針對 Azure Kubernetes Service (AKS) 上適用於祕密存放區 CSI 驅動程式的 Azure Key Vault 提供者進行設定與疑難排解的選項
遵循在 AKS 叢集中使用適用於祕密存放區 CSI 驅動程式的 Azure Key Vault 提供者 (部分機器翻譯) 和提供身分識別以存取 AKS 中適用於祕密存放區 CSI 驅動程式的 Azure Key Vault 提供者 (部分機器翻譯) 中的步驟。 完成這些步驟之後,您可以套用額外的設定或執行疑難排解。
設定選項
啟用和停用自動輪替
注意
啟用適用於祕密存放區 CSI 驅動程式的 Azure Key Vault 提供者時,即會更新 Pod 掛接與在 SecretProviderClass
的 secretObjects
欄位中定義的 Kubernetes 祕密。 其會根據您定義的輪替輪詢間隔,定期輪詢變更。 預設的輪替輪詢間隔是「兩分鐘」。
注意
初始 Pod 部署之後,在外部祕密存放區中更新祕密時,Kubernetes 祕密和 Pod 掛接均會根據應用程式取用祕密資料的方式定期更新。
將 Kubernetes 祕密掛接為磁碟區:使用祕密存放區 CSI 驅動程式的自動輪替和同步 K8s 祕密功能。 應用程式必須監看已掛接 Kubernetes 祕密磁碟區中的變更。 當 CSI 驅動程式更新 Kubernetes 祕密時,對應的磁碟區內容也會自動更新。
應用程式會從容器檔案系統中讀取資料:使用祕密存放區 CSI 驅動程式的輪替功能。 應用程式必須監看 CSI 驅動程式所掛接磁碟區中的檔案變更。
使用環境變數的 Kubernetes 秘密:重新啟動 Pod 以取得最新秘密作為環境變數。 使用重新載入器之類的工具來監看已同步 Kubernetes 秘密的變更,並在 Pod 上執行輪流升級。
在新的 AKS 叢集上啟用自動輪替
使用
az aks create
(部分機器翻譯) 命令,在新的叢集上啟用祕密的自動輪替,並啟用enable-secret-rotation
附加元件。az aks create \ --name myAKSCluster2 \ --resource-group myResourceGroup \ --enable-addons azure-keyvault-secrets-provider \ --enable-secret-rotation \ --generate-ssh-keys
在現有的 AKS 叢集上啟用自動輪替
使用
az aks addon update
(部分機器翻譯) 命令和enable-secret-rotation
參數,更新現有的叢集以啟用祕密的自動輪替。az aks addon update --resource-group myResourceGroup --name myAKSCluster2 --addon azure-keyvault-secrets-provider --enable-secret-rotation
指定自訂輪替間隔
使用
az aks addon update
(部分機器翻譯) 命令搭配rotation-poll-interval
參數,指定自訂輪替間隔。az aks addon update --resource-group myResourceGroup --name myAKSCluster2 --addon azure-keyvault-secrets-provider --enable-secret-rotation --rotation-poll-interval 5m
停用自動輪替
若要停用自動輪替,您必須先停用附加元件。 然後,您可以在不使用 enable-secret-rotation
參數的情況下,重新啟用該附加元件。
使用
az aks addon disable
(部分機器翻譯) 命令,停用祕密提供者附加元件。az aks addon disable --resource-group myResourceGroup --name myAKSCluster2 --addon azure-keyvault-secrets-provider
使用
az aks addon enable
(部分機器翻譯) 命令,在不使用enable-secret-rotation
參數的情況下,重新啟用祕密提供者附加元件。az aks addon enable --resource-group myResourceGroup --name myAKSCluster2 --addon azure-keyvault-secrets-provider
如果您已經在使用 SecretProviderClass
,則可以在不需指定 enable-secret-rotation
參數的情況下使用 az aks addon enable
來更新附加元件,而不需先停用附加元件。
使用 Kubernetes 秘密同步掛接的內容
注意
本節中的 YAML 範例並不完整。 您必須修改這些範例,以支援您選擇來存取金鑰保存庫身分識別的方法。 如需詳細資料,請參閱提供身分識別來存取適用於祕密存放區 CSI 驅動程式的 Azure Key Vault 提供者 (部分機器翻譯)。
您可能想要建立 Kubernetes 祕密來鏡像設定已掛接的祕密內容。 您的祕密會在您啟動 Pod 以掛接它們之後進行同步。 當您刪除取用祕密的 Pod 時,也會刪除 Kubernetes 祕密。
在建立
SecretProviderClass
以定義 Kubernetes 祕密所需的狀態時,使用secretObjects
欄位來將掛接的內容與 Kubernetes 祕密同步,如下列範例 YAML 所示。apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: azure-sync spec: provider: azure secretObjects: # [OPTIONAL] SecretObjects defines the desired state of synced Kubernetes secret objects - data: - key: username # data field to populate objectName: foo1 # name of the mounted content to sync; this could be the object name or the object alias secretName: foosecret # name of the Kubernetes secret object type: Opaque # type of Kubernetes secret object (for example, Opaque, kubernetes.io/tls)
注意
確定
secretObjects
欄位中的objectName
符合已掛接內容的檔案名稱。 如果您改用objectAlias
,其應該符合物件別名。
設定環境變數以參考 Kubernetes 秘密
注意
範例 YAML 示範如何透過 env 變數和 volume/volumeMount 存取祕密。 此範例供說明之用。 一般應用程式會使用其中一種方法。 不過,請注意,為了讓祕密可透過 env 變數取得,必須先由至少一個 Pod 掛接。
在 Pod 中建立環境變數,以參考新建立的 Kubernetes 秘密,如下列範例 YAML 所示。
kind: Pod apiVersion: v1 metadata: name: busybox-secrets-store-inline spec: containers: - name: busybox image: registry.k8s.io/e2e-test-images/busybox:1.29-1 command: - "/bin/sleep" - "10000" volumeMounts: - name: secrets-store01-inline mountPath: "/mnt/secrets-store" readOnly: true env: - name: SECRET_USERNAME valueFrom: secretKeyRef: name: foosecret key: username volumes: - name: secrets-store01-inline csi: driver: secrets-store.csi.k8s.io readOnly: true volumeAttributes: secretProviderClass: "azure-sync"
存取計量
Azure Key Vault 提供者
計量是透過連接埠 8898 的 Prometheus 提供,但預設不會在 Pod 外部公開此連接埠。
使用
kubectl port-forward
,透過 localhost 存取計量。kubectl port-forward -n kube-system ds/aks-secrets-store-provider-azure 8898:8898 & curl localhost:8898/metrics
適用於祕密存放區 CSI 驅動程式的 Azure Key Vault 提供者所提供的計量
計量 | 描述 | 標籤 |
---|---|---|
keyvault_request | 從金鑰保存庫中取得所花費的時間分佈。 | |
grpc_request | gRPC 要求所花費的時間分佈。 |
祕密存放區 CSI 驅動程式
計量是透過連接埠 8095 提供,但預設不會在 Pod 外部公開此連接埠。
使用
kubectl port-forward
,透過 localhost 存取計量。kubectl port-forward -n kube-system ds/aks-secrets-store-csi-driver 8095:8095 & curl localhost:8095/metrics
祕密存放區 CSI 驅動程式所提供的計量
計量 | 描述 | 標籤 |
---|---|---|
total_node_publish | 成功的磁碟區掛接要求總數。 | % |
total_node_unpublish | 成功的磁碟區卸載要求總數。 | os_type=<runtime os> |
total_node_publish_error | 磁碟區掛接要求的錯誤總數。 | os_type=<runtime os> }, |
total_node_unpublish_error | 磁碟區卸載要求的錯誤總數。 | os_type=<runtime os> |
total_sync_k8s_secret | 已同步處理的 Kubernetes 祕密總數。 | % |
sync_k8s_secret_duration_sec | 同步處理 Kubernetes 祕密所花費的時間分佈。 | os_type=<runtime os> |
total_rotation_reconcile | 進行協調的輪替總數。 | % |
total_rotation_reconcile_error | 進行協調且發生錯誤的輪替總數。 | os_type=<runtime os> }, |
total_rotation_reconcile_error | 針對 Pod 輪替祕密存放區內容所花費的時間分佈。 | os_type=<runtime os> |
從開放原始碼移轉至由 AKS 管理的祕密存放區 CSI 驅動程式
使用下列
helm delete
命令,解除安裝開放原始碼祕密存放區 CSI 驅動程式。helm delete <release name>
注意
如果您已使用部署 YAML 安裝驅動程式和提供者,則可使用下列
kubectl delete
命令來刪除元件。# Delete AKV provider pods from Linux nodes kubectl delete -f https://raw.githubusercontent.com/Azure/secrets-store-csi-driver-provider-azure/master/deployment/provider-azure-installer.yaml # Delete AKV provider pods from Windows nodes kubectl delete -f https://raw.githubusercontent.com/Azure/secrets-store-csi-driver-provider-azure/master/deployment/provider-azure-installer-windows.yaml
使用
az aks enable-addons
(部分機器翻譯) 命令,透過此功能升級現有的 AKS 叢集。az aks enable-addons --addons azure-keyvault-secrets-provider --name myAKSCluster --resource-group myResourceGroup
疑難排解
如需疑難排解步驟,請參閱針對適用於祕密存放區 CSI 驅動程式的 Azure Key Vault 提供者進行疑難排解 (部分機器翻譯)。
下一步
若要深入了解適用於祕密存放區 CSI 驅動程式的 Azure Key Vault 提供者,請參閱下列資源: