AKS(Azure Kubernetes Service) 비밀 자격 증명 모음 CSI 드라이버용 Azure Key Vault 공급자 구성 및 문제 해결 옵션
AKS 클러스터에서 비밀 저장소 CSI 드라이버용 Azure Key Vault 공급자 사용 및 AKS에서 비밀 저장소 CSI 드라이버용 Azure Key Vault 공급자에 액세스하기 위한 ID 제공의 단계를 따릅니다. 이러한 단계를 완료하면 추가 구성을 적용하거나 문제 해결을 수행할 수 있습니다.
구성 옵션
자동 순환 사용 및 사용 안 함
참고 항목
비밀 저장소 CSI 드라이버용 Azure Key Vault 공급자를 사용하도록 설정하면 Pod 탑재 및 SecretProviderClass
의 secretObjects
필드에 정의된 Kubernetes 비밀이 업데이트됩니다. 이 업데이트는 정의한 순환 폴 간격에 따라 변경 내용을 주기적으로 폴링하여 이루어집니다. 순환 폴 간격의 기본값은 ‘2분’입니다.
참고 항목
초기 Pod 배포 후 외부 비밀 저장소에서 비밀이 업데이트되면 애플리케이션에서 비밀 데이터를 사용하는 방법에 따라 Kubernetes 비밀 및 Pod 탑재가 주기적으로 업데이트됩니다.
Kubernetes 비밀을 볼륨으로 탑재: 비밀 저장소 CSI 드라이버의 자동 순환 및 동기화 K8s 비밀 기능을 사용합니다. 애플리케이션은 탑재된 Kubernetes 비밀 볼륨의 변경 내용을 감시해야 합니다. CSI 드라이버가 Kubernetes 비밀을 업데이트하면 해당 볼륨 콘텐츠도 자동으로 업데이트됩니다.
애플리케이션이 컨테이너 파일 시스템으로부터 데이터를 읽음: 비밀 저장소 CSI 드라이버의 순환 기능을 사용합니다. 애플리케이션은 CSI 드라이버에 의해 탑재된 볼륨에서 파일 변경 내용을 감시해야 합니다.
환경 변수에 Kubernetes 비밀 사용: Pod를 다시 시작하여 최신 비밀을 환경 변수로 가져옵니다. Reloader와 같은 도구를 사용하여 동기화된 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
enable-secret-rotation
명령을 사용하여az aks addon enable
매개 변수 없이 비밀 공급자 추가 기능을 다시 사용하도록 설정합니다.az aks addon enable --resource-group myResourceGroup --name myAKSCluster2 --addon azure-keyvault-secrets-provider
이미 SecretProviderClass
를 사용하고 있는 경우 enable-secret-rotation
매개 변수를 지정하지 않고 az aks addon enable
을(를) 사용하여 먼저 비활성화하지 않고도 추가 기능을 업데이트할 수 있습니다.
탑재된 콘텐츠를 Kubernetes 비밀과 동기화
참고 항목
이 섹션의 YAML 예제는 불완전합니다. 선택한 키 자격 증명 모음 ID 액세스 메서드를 지원하도록 수정해야 합니다. 자세한 내용은 비밀 저장소 CSI 드라이버용 Azure Key Vault 공급자에 액세스하기 위한 ID 제공을 참조하세요.
탑재된 비밀 콘텐츠를 미러링하는 Kubernetes 비밀을 만들려고 할 수 있습니다. 비밀은 Pod를 시작하여 탑재한 후에 동기화됩니다. 비밀을 사용하는 Pod를 삭제하면 Kubernetes 비밀도 삭제됩니다.
원하는 Kubernetes 비밀 상태를 정의하려면 아래 예제 YAML에 나온 것처럼
SecretProviderClass
를 만들 때secretObjects
필드를 사용하여 탑재된 콘텐츠를 Kubernetes 비밀과 동기화합니다.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은 환경 변수와 volume/volumeMount를 통해 비밀에 액세스하는 법을 보여 줍니다. 이는 설명을 위한 것입니다. 일반적인 애플리케이션은 둘 중 한 가지 방법을 사용합니다. 그러나 env 변수를 통해 비밀을 사용하려면 먼저 적어도 하나의 Pod에서 비밀을 탑재해야 합니다.
다음 예제 YAML에 나온 것처럼 Pod에서 환경 변수를 설정하여 새로 만든 Kubernetes 비밀을 참조합니다.
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 | 키 자격 증명 모음에서 가져오는 데 걸린 시간 분포. | os_type=<runtime os> , provider=azure , object_name=<keyvault object name> , object_type=<keyvault object type> , error=<error if failed> |
grpc_request | gRPC 요청에 걸린 시간 분포. | os_type=<runtime os> , provider=azure , grpc_method=<rpc full method> , grpc_code=<grpc status code> , grpc_message=<grpc status message> |
비밀 저장소 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 | 성공한 볼륨 탑재 요청의 총 수. | os_type=<runtime os> , provider=<provider name> |
total_node_unpublish | 성공한 볼륨 분리 요청의 총 수. | os_type=<runtime os> |
total_node_publish_error | 볼륨 탑재 요청의 총 오류 수. | os_type=<runtime os> , provider=<provider name> , error_type=<error code> |
total_node_unpublish_error | 볼륨 분리 요청의 총 오류 수. | os_type=<runtime os> |
total_sync_k8s_secret | 동기화된 Kubernetes 비밀의 총 수. | os_type=<runtime os , provider=<provider name> |
sync_k8s_secret_duration_sec | Kubernetes 비밀을 동기화하는 데 걸린 시간 분포. | os_type=<runtime os> |
total_rotation_reconcile | 순환 조정의 총 수. | os_type=<runtime os> , rotated=<true or false> |
total_rotation_reconcile_error | 총 순환 수가 오류와 조정됩니다. | os_type=<runtime os> , rotated=<true or false> , error_type=<error code> |
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 공급자에 대한 자세한 내용은 다음 리소스를 참조하세요.
Azure Kubernetes Service