在Helm 3中将代理设置为环境变量

时间:2020-02-11 13:41:33

标签: kubernetes kubernetes-helm

ı想在我通过Helm v3创建的deploy.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 }}

1 个答案:

答案 0 :(得分:1)

考虑到Helm的语法已经在Stack上讨论了几次,所以我只作总结,以减少孤立的问题并将其发布为社区Wiki,因为我在这里没有做太多事情。


here所述,有几种添加env的方法。

方法1 正确执行此操作的方式(秘密)。

由于您不想公开数据,因此最好将其另存为kubernetes中的内容。

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

示例:

username: root
password: password

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

示例:

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

方法2 export变量,并在运行helm install 时使用它。

在此之前,您必须修改统计图,以便安装时该值可以为set

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

$ export USERNAME=root-user

现在在运行头盔安装时使用此变量,

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

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

$ 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

您可以看到秘密用户名的数据已更改为root-user

this example已添加到github存储库中。

kubernetes/helm回购中也对此进行了一些讨论。您可以查看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>"