【问题标题】:How do I exclude proxy env vars from pods for Kubernetes/OpenShift?如何从 Kubernetes/OpenShift 的 Pod 中排除代理环境变量?
【发布时间】:2019-01-22 12:31:25
【问题描述】:

在我的 OpenShift pod 中有一组代理环境变量(http_proxy、HTTP_PROXY、https_proxy、HTTPS_PROXY、no_proxy、NO_PROXY),我没有明确包含它们,我不希望它们在那里。

例如

$ oc run netshoot -it --image docker-registry.default.svc:5000/default/netshoot -- bash
If you don't see a command prompt, try pressing enter.

bash-4.4$ env | grep -i proxy | sort
HTTPS_PROXY=http://xx.xx.xx.xx:8081/
HTTP_PROXY=http://xx.xx.xx.xx:8081/
NO_PROXY=.cluster.local,.mydomain.nz,.localdomain.com,.svc,10.xx.xx.xx,127.0.0.1,172.30.0.1,app01.mydomain.nz,app02.mydomain.nz,inf01.mydomain.nz,inf02.mydomain.nz,mst01.mydomain.nz,localaddress,localhost,.edpay.nz
http_proxy=xx.xx.xx.xx:8081
https_proxy=xx.xx.xx.xx:8081
no_proxy=.cluster.local,.mydomain.nz,.localdomain.com,.svc,10.xx.xx.xx,127.0.0.1,172.30.0.1,app01.mydomain.nz,app02.mydomain.nz,inf01.mydomain.nz,inf02.mydomain.nz,mst01.mydomain.nz,localaddress,localhost,.edpay.nz

我还没有追踪这些环境变量是如何进入我的 pod 的。

我不是Setting Proxy Environment Variables in Pods

$ oc get pod netshoot-1-hjp2p -o yaml | grep -A 10 env
[no output]

$ oc get deploymentconfig netshoot -o yaml | grep -A 10 env
[no output]

我不是Creating Pod Presets

$ oc get podpresets --all-namespaces
No resources found.

我的主/应用节点上的 Docker 没有代理环境变量。

$ grep -i proxy /etc/sysconfig/docker
[no output]

我的主/应用节点上的 Kubelet (openshift-node) 没有代理环境变量。

$ grep -i proxy /etc/sysconfig/atomic-openshift-node
[no output]

我的主节点上的主组件没有代理环境变量。

$ grep -i proxy /etc/sysconfig/atomic-openshift-master
[no output]

$ grep -i proxy /etc/sysconfig/atomic-openshift-master-api
[no output]

$ grep -i proxy /etc/sysconfig/atomic-openshift-master-controllers
[no output]

sysconfig 文件的内容(不包括 cmets)

$ cat /etc/sysconfig/atomic-openshift-master
OPTIONS="--loglevel=0"
CONFIG_FILE=/etc/origin/master/master-config.yaml

$ cat /etc/sysconfig/atomic-openshift-node
OPTIONS=--loglevel=2
CONFIG_FILE=/etc/origin/node/node-config.yaml
IMAGE_VERSION=v3.9.51

$ cat /etc/sysconfig/docker
OPTIONS=' --selinux-enabled       --signature-verification=False         --insecure-registry 172.30.0.0/16'
if [ -z "${DOCKER_CERT_PATH}" ]; then
    DOCKER_CERT_PATH=/etc/docker
fi
ADD_REGISTRY='--add-registry registry.access.redhat.com'

$ cat /etc/sysconfig/atomic-openshift-master-api
OPTIONS=--loglevel=2 --listen=https://0.0.0.0:8443 --master=https://mst01.mydomain.nz:8443
CONFIG_FILE=/etc/origin/master/master-config.yaml
OPENSHIFT_DEFAULT_REGISTRY=docker-registry.default.svc:5000

$ cat /etc/sysconfig/atomic-openshift-master-controllers
OPTIONS=--loglevel=2 --listen=https://0.0.0.0:8444
CONFIG_FILE=/etc/origin/master/master-config.yaml
OPENSHIFT_DEFAULT_REGISTRY=docker-registry.default.svc:5000

我不知道那些代理环境变量是如何进入我的 pod 的。

版本:

  • OpenShift v3.9.51

【问题讨论】:

  • 你在使用 Dockerfile 吗?如果可以,您可以检查/发布内容吗?
  • 主机级别的/etc/sysconfig/openshift-master/etc/sysconfig/openshift-node的内容是什么?
  • 它们是否被定义为图像的一部分而不是运行时环境?图像是如何在 OpenShift 中构建的?
  • 使用 Dockerfile 但代理环境变量 在其中或基础映像中定义。就是基于这个hub.docker.com/r/nicolaka/netshoot
  • 图像是在 OpenShift 中使用 BuildConfig(没有代理环境变量)构建的,并使用 oc start-build -n default netshoot 调用。

标签: docker kubernetes openshift


【解决方案1】:

我们终于想通了。根据Configuring Global Proxy Options,我们在安装程序清单变量中设置了openshift_http_proxyopenshift_https_proxyopenshift_no_proxy

我们知道这意味着它还根据文档隐式设置了 openshift_builddefaults_http_proxyopenshift_builddefaults_https_proxyopenshift_builddefaults_no_proxy 安装程序库存变量

此变量定义使用 BuildDefaults 准入控制器插入构建中的 HTTP_PROXY 环境变量。如果您不定义此参数但定义了 openshift_http_proxy 参数,则使用 openshift_http_proxy 值。将 openshift_builddefaults_http_proxy 值设置为 False 以禁用构建的默认 http 代理,而不考虑 openshift_http_proxy 值。

我们所做的知道(我认为从上面的描述中根本不清楚)是设置这些安装程序库存变量设置HTTP_PROXYHTTPS_PROXY 和@ 987654330@ env vars 永久存在于您的图像中。

现在当我们回顾构建日志并看到类似这样的行时,这一点非常明显

...
Step 2/19 : ENV "HTTP_PROXY" "xxx.xxx.xxx.xxx" "HTTPS_PROXY" "xxx.xxx.xxx.xxx" "NO_PROXY" "127.0.0.1,localhost,172.30.0.1,.svc,.cluster.local" "http_proxy" "xxx.xxx.xxx.xxx" "https_proxy" "xxx.xxx.xxx.xxx" "no_proxy" "127.0.0.1,localhost,172.30.0.1,.svc,.cluster.local"
...

我们无法从 pod 中排除代理环境变量,因为这些环境变量是在构建时设置的。

【讨论】:

    猜你喜欢
    • 2020-03-30
    • 2021-08-19
    • 1970-01-01
    • 2020-08-06
    • 2022-06-15
    • 1970-01-01
    • 2021-08-26
    • 2019-06-30
    • 2018-02-20
    相关资源
    最近更新 更多