【问题标题】:Set proxy as an environment variable in Helm 3 [duplicate]在 Helm 3 中将代理设置为环境变量 [重复]
【发布时间】:2020-05-26 22:33:12
【问题描述】:

我想在我通过 Helm v3 创建的 deployment.yaml 中将代理设置为 env 变量。在 helm 模板中添加 env 的正确格式应该是什么,同时有什么方法可以在 values.yaml 中传递这个值?

  - env:
  - name: "HTTP_PROXY"
    value: "http://<user>:<password>@<ip_addr>:<port>"




    containers:
            - name: {{ .Chart.Name }}
              securityContext:
                {{- toYaml .Values.securityContext | nindent 12 }}
              image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
              imagePullPolicy: {{ .Values.image.pullPolicy }}
              ports:
                - name: http
                  containerPort: 8080
                  protocol: TCP
              resources:
                {{- toYaml .Values.resources | nindent 12 }}

【问题讨论】:

标签: kubernetes kubernetes-helm


【解决方案1】:

考虑到 Helm 的语法已经在 Stack 上讨论过几次,我将把它总结一下,以便减少孤立的问题并将其发布为社区 wiki,因为我在这里没有做太多.


正如here 所讨论的那样,有几种可能的方法可以添加env

方式 1这样做的正确方法(秘密)。

由于您不想公开数据,因此最好将其保存为 kubernetes 中的秘密。

首先,在Values 文件中添加所有需要的行,以便可以从外部设置这些值。

例子:

username: root
password: password

然后,在您的 template 文件夹中添加一个 secret.yaml 文件,并将所需的数据复制到该文件中。

例子:

apiVersion: v1
kind: Secret
metadata:
  name: {{ .Release.Name }}-auth
data:
  password: {{ .Values.password | b64enc }}
  username: {{ .Values.username | b64enc }}

现在调整您的部署 yaml 模板并在 env 部分进行更改,如下所示(当然您可以按照您需要的方式组合 env):

spec:
  restartPolicy: Always
   containers:
     - name: sample-app
       image: "sample-app:latest"
       imagePullPolicy: Always
         env:          
           - name: "USERNAME"
             valueFrom:
             secretKeyRef:
               key:  username
               name: {{ .Release.Name }}-auth
           - name: "PASSWORD"
             valueFrom:
               secretKeyRef:
                 key:  password
                 name: {{ .Release.Name }}-auth

方式 2export 变量并在运行helm install时使用它

在此之前,您必须修改您的图表,以便在安装时该值可以是set

如果您为--set 标志正确修改了模板, 您可以使用环境变量进行设置。

$ export USERNAME=root-user

现在在运行 helm install 时使用这个变量,

$ helm install --set username=$USERNAME ./mychart

如果您在dry-run 模式下运行此helm install,您可以验证更改,

$ helm install --dry-run --set username=$USERNAME --debug ./mychart
[debug] Created tunnel using local port: '44937'

[debug] SERVER: "127.0.0.1:44937"

[debug] Original chart version: ""
[debug] CHART PATH: /home/maruf/go/src/github.com/the-redback/kubernetes-yaml-drafts/helm-charts/mychart

NAME:   irreverant-meerkat
REVISION: 1
RELEASED: Fri Apr 20 03:29:11 2018
CHART: mychart-0.1.0
USER-SUPPLIED VALUES:
username: root-user

COMPUTED VALUES:
password: password
username: root-user

HOOKS:
MANIFEST:

---
# Source: mychart/templates/secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: irreverant-meerkat-auth
data:
  password: password
  username: root-user
---
# Source: mychart/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: irreverant-meerkat
  labels:
    app: irreverant-meerkat
spec:
  replicas: 1
  template:
    metadata:
      name: irreverant-meerkat
      labels:
        app: irreverant-meerkat
    spec:
      containers:
      - name: irreverant-meerkat
        image: alpine
        env:
        - name: "USERNAME"
          valueFrom:
            secretKeyRef:
              key:  username
              name: irreverant-meerkat-auth
        - name: "PASSWORD"
          valueFrom:
            secretKeyRef:
              key:  password
              name: irreverant-meerkat-auth

        imagePullPolicy: IfNotPresent
      restartPolicy: Always
  selector:
    matchLabels:
      app: irreverant-meerkat

可以看到username in secret的数据变成了root-user

this example 已添加到 github 仓库中。

kubernetes/helm repo 中也对此进行了一些讨论。您可以查看this issue 了解所有其他使用环境变量的方法。


方式 3。在 Yaml 中直接硬编码值(更快,但不是那么安全/易于维护)

   spec:
      restartPolicy: Always
      containers:
            - name: {{ .Chart.Name }}
              securityContext:
                {{- toYaml .Values.securityContext | nindent 12 }}
              image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
              imagePullPolicy: {{ .Values.image.pullPolicy }}
              ports:
                - name: http
                  containerPort: 8080
                  protocol: TCP
              resources:
                {{- toYaml .Values.resources | nindent 12 }}
              env:
                - name: "HTTP_PROXY"
                  value: "http://<user>:<password>@<ip_addr>:<port>"

【讨论】:

  • 对于方式3,有没有办法使用go模板?如名称:{{ .Values.proxyname }} ?
猜你喜欢
  • 1970-01-01
  • 2021-08-08
  • 2021-09-24
  • 2020-08-04
  • 2020-07-08
  • 2021-07-30
  • 1970-01-01
  • 1970-01-01
  • 2015-07-12
相关资源
最近更新 更多