在 Helm chart 中使用已有的 Secret 承载代理变量
在 Helm 3 的 Deployment 模板中引用来自 Secret 的完整代理 URL,而不是假设某个 shell 变量会自动成为容器环境变量。
假设发布所在的 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 仓库访问和节点上的镜像拉取是另外两个使用方,它们在这套容器环境起作用之前就已经运行。