更新我的 CSI Secrets Store 驅動程式,如下所述:
https://docs.microsoft.com/en-us/azure/aks/csi-secrets-store-driver
我以前通過usign作業過secretObjects,我通過以下方式完成:
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
name: aks-akv-secret-provider
spec:
provider: azure
secretObjects:
- secretName: myapp-prod-secrets
type: Opaque
data:
- objectName: SENDGRID-API-KEY
key: SENDGRID_API_KEY
parameters:
usePodIdentity: "true"
keyvaultName: myappakvprod
cloudName: ""
objects: |
array:
- |
objectName: SENDGRID-API-KEY
objectType: secret
objectVersion: ""
tenantId: $tenantId
例如,在 API 的清單中,我會:
...
env:
- name: SENDGRID_API_KEY
valueFrom:
secretKeyRef:
name: myapp-prod-secrets
key: SENDGRID_API_KEY
volumeMounts:
- name: secrets-store01-inline
mountPath: /mnt/secrets-store
readOnly: true
volumes:
- name: secrets-store01-inline
csi:
driver: secrets-store.csi.k8s.io
readOnly: true
volumeAttributes:
secretProviderClass: aks-akv-secret-provider
...
然后在代碼中我會做類似的事情,它會作業:
EMAIL_KEY = os.environ['SENDGRID_API_KEY']
基本上,它是將 AKV 機密掛載到 Pod,然后創建 Kubernetes 機密環境變數。
但是,檔案中的這種方法似乎是事后的想法(“你有時可能......”而不是“你必須”):
https://docs.microsoft.com/en-us/azure/aks/csi-secrets-store-driver#sync-mounted-content-with-a-kubernetes-secret
我將其解釋為表明只需將秘密掛載到 Pod 就足夠了,而為它們創建 Kubernetes 秘密是無關緊要的。
我的問題是這樣的:
如果您只是將秘密掛載到 Pod,如果它們不是環境變數,您應該如何從應用程式代碼中訪問它們?
它們可以通過以下方式訪問:
kubectl exec busybox-secrets-store-inline -- cat /mnt/secrets-store/ExampleSecret
所以我想在 Python、JavaScript 等中,你可以做任何類似的命令來讀取秘密而不是os.environ['ExampleSecret']. 但是,如果您在本地開發中沒有以同樣的方式安裝秘密,那么代碼庫中就會存在差異。
只是在尋找對此的澄清。
uj5u.com熱心網友回復:
如果您只是將機密掛載到 pod,機密將作為掛載位置上的檔案提供
- 檔案名將是密鑰的名稱(或您在密鑰提供程式類中指定的別名)
- 檔案的內容將是秘密值。
要訪問和使用代碼中的秘密,您需要閱讀檔案以檢索秘密值。許多框架都內置了將此類結構映射到配置物件的功能,例如在 .NET 中有Key-per-file 配置提供程式
但是,如果您在本地開發中沒有以同樣的方式安裝秘密,那么代碼庫中就會存在差異。
是的,這是正確的,對于您在開發和生產中所做的任何不同的事情都是如此。如果您想避免差異,請使用相同的機制在開發和生產中為應用程式提供秘密值,無論是通過環境變數還是通過檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/446661.html
標籤:天蓝色 Kubernetes 天蓝色 天蓝色密钥库 Kubernetes-秘密
