【问题标题】:Finally got Key Vault integrated with AKS... but not clear what I need to do if anything after that to read into env vars终于将 Key Vault 与 AKS 集成在一起......但不清楚我需要做什么才能读入 env vars
【发布时间】:2021-05-23 13:42:49
【问题描述】:

文档有点混乱,有两组:

无论如何,我可以执行以下操作来查看 Pod 中的秘密:

kubectl exec -it nginx-secrets-store-inline -- ls /mnt/secrets-store/
kubectl exec -it nginx-secrets-store-inline -- cat /mnt/secrets-store/secret1

这基本上是我看到的文档和教程的结尾。

酷...但是需要做什么才能将它们放入运行在 Pod 中的应用程序的环境变量中?

例如,这就是我在执行kubectl create secret generic app-secrets --from-literal=PGUSER=$pguser... 时设置 API 部署的方式:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: api-deployment-dev
  namespace: production
spec:
  replicas: 3
  revisionHistoryLimit: 5
  selector:
    matchLabels:
      component: api
  template:
    metadata:
      labels:
        component: api
    spec:
      containers:
        - name: api
          image: api
          ports:
            - containerPort: 5000
          env:
            - name: PGDATABASE
              valueFrom:
                secretKeyRef:
                  name: k8stut-dev-secrets
                  key: PGDATABASE
            - name: PGHOST
              value: postgres-cluster-ip-service-dev
            - name: PGPORT
              valueFrom:
                secretKeyRef:
                  name: k8stut-dev-secrets
                  key: PGPORT
            - name: PGUSER
              valueFrom:
                secretKeyRef:
                  name: k8stut-dev-secrets
                  key: PGUSER
            - name: PGPASSWORD
              valueFrom:
                secretKeyRef:
                  name: k8stut-dev-secrets
                  key: PGPASSWORD
          volumeMounts:
            - mountPath: /mnt/file-storage
              name: file-storage-dev
              subPath: file-storage
      volumes:
        - name: file-storage-dev
          persistentVolumeClaim:
            claimName: file-storage-dev
---
apiVersion: v1
kind: Service
metadata:
  name: api-cluster-ip-service-dev
  namespace: development
spec:
  type: ClusterIP
  selector:
    component: api
  ports:
    - port: 5000
      targetPort: 5000

所有这些现在需要做什么?

env:
  - name: PGDATABASE
    valueFrom:
      secretKeyRef:
        name: k8stut-dev-secrets
        key: PGDATABASE

【问题讨论】:

    标签: azure kubernetes azure-aks azure-keyvault


    【解决方案1】:

    CSI 秘密存储驱动程序是一个容器存储接口驱动程序 - 它只能挂载到文件。

    特别是对于 postgres,您可以使用 docker secrets environment variables 指向您安装秘密的路径,它将改为从文件中读取它。这通过将 _FILE 附加到变量名来实现。

    根据该文档:Currently, this is only supported for POSTGRES_INITDB_ARGS, POSTGRES_PASSWORD, POSTGRES_USER, and POSTGRES_DB.

    - name: POSTGRES_DB_FILE
      value: /mnt/secrets-store/db-secret
    

    在一般情况下,如果您需要环境变量中的秘密,我通常会使用容器中的启动脚本来读取 CSI 挂载的秘密并导出它们。如果是自定义容器,这通常很容易添加;如果它是一个标准容器,您可以使用一小组 shell 命令来override the command,这些命令可以通过在调用容器的正常入口点之前读取文件来导出适当的变量。

    【讨论】:

    【解决方案2】:

    Patrick 的上述回答有所帮助,但并不完全正确。 AKS 还支持将 Key Vault 机密“同步”到可用作 ENV 变量的 Kubernetes 机密中。

    请参阅 microsoft 文档,了解如何将密钥同步到 kubernetes: https://docs.microsoft.com/en-us/azure/aks/csi-secrets-store-driver#sync-mounted-content-with-a-kubernetes-secret

    本文展示了如何将秘密引用到环境变量中: https://docs.microsoft.com/en-us/azure/aks/csi-secrets-store-driver#set-an-environment-variable-to-reference-kubernetes-secrets

    【讨论】:

      猜你喜欢
      • 2010-12-31
      • 2020-08-20
      • 1970-01-01
      • 1970-01-01
      • 2016-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-22
      相关资源
      最近更新 更多