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

How to set proxy settings (http_proxy variables) for kubernetes (v1.11.2) cluster?

我已经设置了一个 Kubernetes 集群,但由于组织政策,它无法连接互联网。现在有一些服务需要通过互联网进行通信。为了解决这个问题,我设置了一个位于 K8s 集群之外的正向代理(Squid)。我的 K8s 集群的所有节点都可以使用正向代理访问 "google.com"。但是我无法让我的 pods 通过该代理进行通信。

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

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

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

我的 pods 和服务网络与我的 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 设置放在哪里,以使其对所有 pods 和服务有效?

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

对于基于 Ubuntu 的操作系统:

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

对于基于 Centos 的操作系统:

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

之后重新启动 Docker 服务。

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

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

对于 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

对于能够连接到代理的容器,请使用 /etc/default/docker/etc/sysconfig/docker,如 mk_sta 所述。