3

我正在寻找一种可能的方式来引用我的 deployment.yaml 中的秘密(1 班轮)

目前我正在使用

containers:
        - name: {{ template "myapp.name" . }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          imagePullPolicy: Always
          env:
            - name: COUCHDB_USER
              valueFrom:
                secretKeyRef:
                  name: {{ .Release.Name }}-secrets
                  key: COUCHDB_USER
            - name: COUCHDB_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: {{ .Release.Name }}-secrets
                  key: COUCHDB_PASSWORD

通过尽可能少的修改,我想实现这样的目标:

containers:
        - name: {{ template "myapp.name" . }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          imagePullPolicy: Always
          env:
            - name: COUCHDB_URL
              value: http://${COUCHDB_USER}:${COUCHDB_PASSWORD}@{{ .Release.Name }}-couchdb:5984

如果我可以在部署期间的 1 步中执行此操作,而不是传递 2 个 env var 并在我的应用程序中解析它们,那就太担心了。

4

1 回答 1

7

COUCHDB_USER如果没有设置和COUCHDB_PASSWORD在容器环境中,我看不到任何实现它的方法。

一种解决方法是,您可以在其中指定您的密码,container.EnvFrom并且您的所有密码keys都将转换为环境变量。然后,您可以使用这些环境变量来创建您的复合环境(即 COUCHDB_URL)。

仅供参考,使用从 Kubernetes 中的另一个 env 创建 env ()。花括号{}此时将不起作用。


一个样本是,

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  COUCHDB_USER: YWRtaW4=
  COUCHDB_PASSWORD: MWYyZDFlMmU2N2Rm
---
apiVersion: v1
kind: Pod
metadata:
  name: secret-env-pod
spec:
  containers:
  - name: mycontainer
    image: redis
    envFrom:
    - secretRef:
        name: mysecret
    env:
    - name: COUCHDB_URL
      value: http://$(COUCHDB_USER):$(COUCHDB_PASSWORD)rest-of-the-url

您可以通过以下方式确认输出,

$ kubectl exec -it secret-env-pod bash

root@secret-env-pod:/data# env | grep COUCHDB
COUCHDB_URL=http://admin:1f2d1e2e67dfrest-of-the-url
COUCHDB_PASSWORD=1f2d1e2e67df
COUCHDB_USER=admin

在您的情况下,容器的 yaml 是:

    containers:
    - name: {{ template "myapp.name" . }}
      image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
      imagePullPolicy: Always
      envFrom:
      - secretRef:
          name: {{ .Release.Name }}-secrets
      env:
      - name: COUCHDB_URL
        value: http://$(COUCHDB_USER):$(COUCHDB_PASSWORD)@{{ .Release.Name }}-couchdb:5984
于 2019-01-10T06:44:12.960 回答