假设发布所在的 namespace 中已经有一个名为 app-outbound-proxy 的 Secret。它的 http_proxy 与 https_proxy 键保存着应用所需的完整代理 URL。

Helm 3 chart 可以在 values.yaml 中只保留该 Secret 的名称:

outboundProxy:
  existingSecret: app-outbound-proxy

在目标容器的 Deployment 模板中引用这两个键:

env:
  - name: HTTP_PROXY
    valueFrom:
      secretKeyRef:
        name: {{ .Values.outboundProxy.existingSecret | quote }}
        key: http_proxy
  - name: HTTPS_PROXY
    valueFrom:
      secretKeyRef:
        name: {{ .Values.outboundProxy.existingSecret | quote }}
        key: https_proxy

这是一段容器配置片段。Secret 必须位于 Pod 所在的 namespace 中,并包含所引用的两个键。其中的取值必须使用真实代理监听器的协议、主机和端口。对于允许使用免认证公共代理的公开应用请求,请用免费代理列表中匹配的候选项构造这些 URL;需要保留的直连例外要继续保留。

chart 的取值只提供名称;secretKeyRef 才提供容器的环境值。仅在运行 helm 的 shell 中 export HTTP_PROXY,并不会把这段 env 加进 Pod 模板。

修改 Secret 同样是一次生命周期变更

Secret 数据变化时,容器不会刷新自身环境。请安排所需的重新启动或 rollout,让新启动的容器拿到更新后的值。在同一 Secret 名称下修改数据,本身并不会编辑 Deployment 的 Pod 模板。

应用必须支持所选的代理环境变量。Helm 仓库访问和节点上的镜像拉取是另外两个使用方,它们在这套容器环境起作用之前就已经运行。

相关文章