如何为kubernetes(v1.11.2)集群设置代理设置(http_proxy变量)?

时间:2018-11-06 14:03:44

标签: docker proxy kubernetes http-proxy squid

我已经设置了一个Kubernetes集群,由于组织政策,该集群由于某种原因无法连接到Internet。现在,有些服务需要通过互联网进行通信。为了解决这个问题,我在K8s集群之外设置了一个转发代理(Squid)。我的K8s集群的所有节点都可以使用转发代理访问“ google.com”。但是我无法使我的Pod通过该代理进行通信。

我在所有主节点和工作节点上都设置了以下变量:

export http_proxy="http://10.x.x.x:3128"
export https_proxy="https://10.x.x.x:3128"

我能够从主节点和工作节点卷曲google.com。但是,当我将其附加到容器中时,我注意到没有变量http_proxy和https_proxy。而且无法成功卷曲。

我的Pod和服务网络与我的VM网络不同

pod-network-cidr=192.167.0.0/16 
service-cidr 192.168.0.0/16 

我的VM网络就像:

Master  -> 10.2.2.40
Worker1 -> 10.2.2.41
Worker2 -> 10.2.2.42
Worker3 -> 10.2.2.43

我的转发代理正在运行

Forward Proxy: 10.5.2.30

我正在使用kubernetes v1.11.2版本。这里有什么帮助,例如我应该在哪里放置kubernetes集群的http_proxy设置,以使其对所有pod和服务有效?

3 个答案:

答案 0 :(得分:1)

您可以在Docker机器上添加http_proxy设置,以便通过目标代理服务器转发来自嵌套Pod容器的数据包。

对于基于Ubuntu的操作系统:

export http_proxy='http://<host>:<port>'记录添加到文件/etc/default/docker

对于基于Centos的操作系统:

export http_proxy='http://<host>:<port>'记录添加到文件/etc/sysconfig/docker

然后重新启动Docker服务。

答案 1 :(得分:1)

所以我发现要为特定容器设置代理,在Dockerfile中设置env变量。

ENV HTTP_PROXY http://10.x.x.x:PORT

答案 2 :(得分:0)

对于docker服务,请使用systemd设置文件:

创建文件:

/etc/systemd/system/docker.service.d/http-proxy.conf

内容如下:

[Service]
Environment="HTTP_PROXY=http://10.x.x.x:3128"
Environment="HTTPS_PROXY=http://10.x.x.x:3128"

(您还可以包含NO_PROXY变量)

您需要重新加载systemctl并重新启动docker服务:

systemctl daemon-reload
systemctl restart docker

如mk_sta所说,要使容器能够连接到代理,请使用/etc/default/docker/etc/sysconfig/docker