docker - 如何从Kubernetes/OpenShift的Pod中排除代理环境变量?

标签 docker kubernetes openshift

我的OpenShift容器中有一组代理环境变量(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节点)没有代理环境变量。
$ 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文件的内容(不包括注释)
$ 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
  • 最佳答案

    我们终于弄清楚了。我们根据Configuring Global Proxy Options在安装程序 list 变量中设置了openshift_http_proxyopenshift_https_proxyopenshift_no_proxy

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

    This variable defines the HTTP_PROXY environment variable inserted into builds using the BuildDefaults admission controller. If you do not define this parameter but define the openshift_http_proxy parameter, the openshift_http_proxy value is used. Set the openshift_builddefaults_http_proxy value to False to disable default http proxy for builds regardless of the openshift_http_proxy value.



    我们不知道的(从上面的描述中我还无法确定)是,设置这些安装程序 list 变量会在图像中永久设置HTTP_PROXYHTTPS_PROXYNO_PROXY环境变量。

    现在,当我们回顾构建日志并看到这样的行时,这很痛苦
    ...
    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中排除代理环境变量,因为这些环境变量是在构建时设置的。

    关于docker - 如何从Kubernetes/OpenShift的Pod中排除代理环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53860688/

    相关文章:

    azure - 每次管道运行时,Pip 验证任务都会为 PIP_INDEX_URL/PIP_EXTRA_INDEX_URL 创建新值,从而防止 docker 重用缓存层

    kubernetes - 如何在 Pod 之间或 kubernetes 集群中的节点之间复制文件?

    ruby - Openshift 和 net-ssh 不兼容? (2.9.3-beta1 对比 2.9.2)

    node.js - 设置 redis 环境变量 -- Openshift 上的 Node.js

    docker - 主机上Docker容器的文件系统内容

    ruby-on-rails - 使用 docker 卷时,本地更改不反射(reflect)浏览器中的更改

    docker - 如何一起为docker和electronic创建安装程序?

    kubernetes - 是否可以获取 `.env`文件来创建Kubernetes secret ?

    Kubernetes 与 CloudFoundry

    django - 在 OpenShift 中提供 Django 静态文件