目地
为k8s的docker服务提供http/https代理,解决docker无法pull gcr.io/google_containers 谷歌镜像问题
环境
- GCE ubuntu 16.04
- k8s集群机器 ubuntu16.04
简要步骤
- GCE 搭建squid正向http/https代理服务器
- 直接使用apt-get install 安装
apt-get install squid3 -y
注意:配置文件在/etc/squid或/etc/squid3下,根据系统不同可能会有一点差异,由于这里进行快速安装,不需要暴露端口给外部使用,也不需要密码,所以配置文件我这里保持默认
- GCE 安装stunnel代理服务器
-
stunnel主要用来在GCE和k8s机器上代理的数据传输进行加密,否则明文传输很快会被GFW拦截.注意stunnel分为服务端和客户端,GCE上安装服务端,在k8s集群上安装客户端
-
直接使用apt-get install 安装服务端
apt-get install stunnel4 -y
-
编辑配置文件 vim /etc/stunnel/stunnel.conf
verify = 2 #要求并验证每个SSL连接的证书。如果未显示证书或无效证书,则会丢弃连接。 CAfile = /etc/stunnel/stunnel.pem ##下一步生成的证书地址 client = no #是否为客户端 这里是服务端填写no [squid] accept = 65501 connect = 127.0.0.1:3128 #本地squid服务地址 cert = /etc/stunnel/stunnel.pem #下一步生成的证书地址
-
客户端stunnel.conf示例配置
-
cert = stunnel.pem client = yes [squid] accept = 127.0.0.1:8080 connect = [Server’s Public IP]:8888
-
openssl生成证书,用户stunnel加密解密
openssl genrsa -out key.pem 2048 openssl req -new -x509 -key key.pem -out cert.pem -days 1095 cat key.pem cert.pem >> /etc/stunnel/stunnel.pem
注意:创建证书时,系统会要求您提供一些国家/地区信息,可随便输入,但是当被要求输入“Common Name”时,您必须输入正确的hostname或IP地址(VPS),我这里输入的ip地址。
-
通过配置/etc/default/stunnel4文件启用自动启动,vim /etc/default/stunnel4
#将ENABLED更改为1: ENABLED=1
-
重新启动Stunnel使配置生效,使用以下命令:
/etc/init.d/stunnel4 restart
- K8S 集群机器分别搭建stunnel
- 安装步骤几乎和上面相同
- scp或其他方法把证书拷贝到k8s集群中
- 配置文件不同
cert = /etc/stunnel/stunnel.pem #和服务端完全相同的证书 client = yes #声明为客户端 [squid] accept = 127.0.0.1:65502 #本地代理的端口,即为http/https代理地址 connect = {GCE_IP}:65501 #GCE 服务端ip和端口
浏览器SwitchyOmega代理穿透GFW
- 配置添加http代理127.0.0.1:65502 即可
- docker添加http/https代理请参考官方文档 https://docs.docker.com/engine/admin/systemd/#start-manually