终于将 Key Vault 与 AKS 集成了......但不清楚我需要做什么才能读入环境变量
Finally got Key Vault integrated with AKS... but not clear what I need to do if anything after that to read into env vars
文档有点混乱,有两组:
- https://docs.microsoft.com/en-us/azure/key-vault/general/key-vault-integrate-kubernetes
- https://azure.github.io/secrets-store-csi-driver-provider-azure/configurations/identity-access-modes/pod-identity-mode/
无论如何,我可以执行以下操作来查看 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
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 装载的秘密并将它们导出。如果它是自定义容器,通常很容易添加;如果它是一个标准容器,您可以 override the command 使用一小组 shell 命令,这些命令可以通过在调用容器的正常 ENTRYPOINT 之前读取文件来导出适当的变量。
帕特里克的上述回答有所帮助,但并不完全正确。 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
文档有点混乱,有两组:
- https://docs.microsoft.com/en-us/azure/key-vault/general/key-vault-integrate-kubernetes
- https://azure.github.io/secrets-store-csi-driver-provider-azure/configurations/identity-access-modes/pod-identity-mode/
无论如何,我可以执行以下操作来查看 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...
:
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 秘密存储驱动程序是一个容器存储 接口驱动程序 - 它只能挂载到文件。
特别是对于 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 装载的秘密并将它们导出。如果它是自定义容器,通常很容易添加;如果它是一个标准容器,您可以 override the command 使用一小组 shell 命令,这些命令可以通过在调用容器的正常 ENTRYPOINT 之前读取文件来导出适当的变量。
帕特里克的上述回答有所帮助,但并不完全正确。 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