azure - 终于将 Key Vault 与 AKS 集成...但不清楚我需要做什么,如果之后有任何事情要读入环境变量

标签 azure kubernetes azure-aks azure-keyvault

文档有点令人困惑,有两组:

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

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

最佳答案

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

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

根据该文档:目前,仅 POSTGRES_INITDB_ARGS、POSTGRES_PASSWORD、POSTGRES_USER 和 POSTGRES_DB 支持此功能。

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

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

关于azure - 终于将 Key Vault 与 AKS 集成...但不清楚我需要做什么,如果之后有任何事情要读入环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66296659/

相关文章:

azure - 从 azure blob 下载文件名中带有日期的文件,无论日期之前的名称如何

python - 如何从 Python Azure 存储下载 Blob 图像并从中创建图像对象?

azure - 如何监视 Azure 存储帐户的 IOPS

azure - 将 Application Insight 添加到现有的 Azure Service Fabric 群集

docker - 如何使用 Helm 模板解析 .env 文件(dotenv)?

python - 如何让 Jupyter Notebook 内核在 Kubernetes 中抛出内存不足错误

nginx - 使用 azure aks 获取客户端原始 IP 地址

docker - 如何在不影响正在运行的Pod的情况下将新镜像从Docker Hub拉到kubernetes?

AKS Kubectl 任务的 Azure Devops 管道无法将 list 部署到 AKS

azure-aks - 如果 azure aks kubenet cidr 是内部地址,为什么它们不应该与其他地址重叠?