Azure Red Hat OpenShift'te Gizli Dizi deposu CSI Sürücüsü için Azure Key Vault Sağlayıcısını kullanma
Gizli Dizi deposu için Azure Key Vault Sağlayıcısı CSI Sürücüsü, bir Azure Key Vault örneğinde depolanan gizli dizi içeriğini almanıza ve Bunları Kubernetes podlarına bağlamak için Gizli Dizi Deposu CSI Sürücüsünü kullanmanıza olanak tanır. Bu makalede, Azure Red Hat OpenShift üzerinde Gizli Dizi Deposu CSI Sürücüsü için Azure Key Vault Sağlayıcısı'nın nasıl kullanılacağı açıklanmaktadır.
Dekont
Bu makalede sunulan açık kaynak çözümüne alternatif olarak, Azure Arc'ı kullanarak ARO kümelerinizi ve Gizli Dizi deposu için Azure Key Vault Sağlayıcısı CSI Sürücüsü uzantısını yönetebilirsiniz. Bu yöntem Microsoft tarafından tam olarak desteklenir ve aşağıdaki açık kaynak çözümü yerine önerilir.
Ön koşullar
Aşağıdaki önkoşullar gereklidir:
- Azure Red Hat OpenShift kümesi (Daha fazla bilgi edinmek için bkz . Azure Red Hat OpenShift kümesi oluşturma.)
- Azure CLI (oturum açıldı)
- Helm 3.x CLI
Ortam değişkenlerini belirleme
Bu yordam boyunca kullanılacak aşağıdaki değişkenleri ayarlayın:
export KEYVAULT_RESOURCE_GROUP=${AZR_RESOURCE_GROUP:-"openshift"}
export KEYVAULT_LOCATION=${AZR_RESOURCE_LOCATION:-"eastus"}
export KEYVAULT_NAME=secret-store-$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 10 | head -n 1)
export AZ_TENANT_ID=$(az account show -o tsv --query tenantId)
Kubernetes Gizli Dizi Deposu CSI Sürücüsünü Yükleme
ARO projesi oluşturma; CSI Sürücüsünü bu projeye dağıtacaksınız:
oc new-project k8s-secrets-store-csi
SecurityContextConstraints'i CSI Sürücüsünün çalışmasına izin verecek şekilde ayarlayın (aksi takdirde CSI Sürücüsü pod oluşturamaz):
oc adm policy add-scc-to-user privileged \ system:serviceaccount:k8s-secrets-store-csi:secrets-store-csi-driver
Gizli Dizi Deposu CSI Sürücüsünü Helm depolarınıza ekleyin:
helm repo add secrets-store-csi-driver \ https://kubernetes-sigs.github.io/secrets-store-csi-driver/charts
Helm depolarınızı güncelleştirin:
helm repo update
Gizli Dizi Deposu CSI Sürücüsünü Yükleyin:
helm install -n k8s-secrets-store-csi csi-secrets-store \ secrets-store-csi-driver/secrets-store-csi-driver \ --version v1.3.1 \ --set "linux.providersDir=/var/run/secrets-store-csi-providers"
İsteğe bağlı olarak, yukarıdaki komuta aşağıdaki parametreleri ekleyerek gizli dizilerin otomatik olarak yeniden çalışmasını etkinleştirebilirsiniz:
--set "syncSecret.enabled=true" --set "enableSecretRotation=true"
CSI Sürücüsü DaemonSets'in çalıştığını doğrulayın:
kubectl --namespace=k8s-secrets-store-csi get pods -l "app=secrets-store-csi-driver"
Yukarıdaki komutu çalıştırdıktan sonra aşağıdakileri görmeniz gerekir:
NAME READY STATUS RESTARTS AGE csi-secrets-store-secrets-store-csi-driver-cl7dv 3/3 Running 0 57s csi-secrets-store-secrets-store-csi-driver-gbz27 3/3 Running 0 57s
Gizli Dizi Deposu CSI Sürücüsü için Azure Key Vault Sağlayıcısı dağıtma
Azure Helm deposunu ekleyin:
helm repo add csi-secrets-store-provider-azure \ https://azure.github.io/secrets-store-csi-driver-provider-azure/charts
Yerel Helm depolarınızı güncelleştirin:
helm repo update
Azure Key Vault CSI sağlayıcısını yükleyin:
helm install -n k8s-secrets-store-csi azure-csi-provider \ csi-secrets-store-provider-azure/csi-secrets-store-provider-azure \ --set linux.privileged=true --set secrets-store-csi-driver.install=false \ --set "linux.providersDir=/var/run/secrets-store-csi-providers" \ --version=v1.4.1
CSI sürücüsünün çalışmasına izin vermek için SecurityContextConstraints'i ayarlayın:
oc adm policy add-scc-to-user privileged \ system:serviceaccount:k8s-secrets-store-csi:csi-secrets-store-provider-azure
Anahtar kasası ve gizli dizi oluşturma
Uygulamanız için bir ad alanı oluşturun.
oc new-project my-application
Kaynak grubunuzda ARO içeren bir Azure anahtar kasası oluşturun.
az keyvault create -n ${KEYVAULT_NAME} \ -g ${KEYVAULT_RESOURCE_GROUP} \ --location ${KEYVAULT_LOCATION}
Anahtar kasasında bir gizli dizi oluşturun.
az keyvault secret set \ --vault-name ${KEYVAULT_NAME} \ --name secret1 --value "Hello"
Anahtar kasası için bir hizmet sorumlusu oluşturun.
Dekont
Hizmet sorumlusunu oluştururken hata alırsanız Azure CLI'nizi en son sürüme yükseltmeniz gerekebilir.
export SERVICE_PRINCIPAL_CLIENT_SECRET="$(az ad sp create-for-rbac --skip-assignment --name http://$KEYVAULT_NAME --query 'password' -otsv)" export SERVICE_PRINCIPAL_CLIENT_ID="$(az ad sp list --display-name http://$KEYVAULT_NAME --query '[0].appId' -otsv)"
Hizmet sorumlusu için bir erişim ilkesi ayarlayın.
az keyvault set-policy -n ${KEYVAULT_NAME} \ --secret-permissions get \ --spn ${SERVICE_PRINCIPAL_CLIENT_ID}
Kubernetes'in anahtar kasasına erişmek için kullanacağı gizli diziyi oluşturun ve etiketleyin.
kubectl create secret generic secrets-store-creds \ -n my-application \ --from-literal clientid=${SERVICE_PRINCIPAL_CLIENT_ID} \ --from-literal clientsecret=${SERVICE_PRINCIPAL_CLIENT_SECRET} kubectl -n my-application label secret \ secrets-store-creds secrets-store.csi.k8s.io/used=true
CSI Sürücüsünü kullanan bir uygulama dağıtma
Bu gizli diziye erişim vermek için bir
SecretProviderClass
oluşturun:cat <<EOF | kubectl apply -f - apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: azure-kvname namespace: my-application spec: provider: azure parameters: usePodIdentity: "false" useVMManagedIdentity: "false" userAssignedIdentityID: "" keyvaultName: "${KEYVAULT_NAME}" objects: | array: - | objectName: secret1 objectType: secret objectVersion: "" tenantId: "${AZ_TENANT_ID}" EOF
Önceki adımda oluşturulanı
SecretProviderClass
kullanan bir pod oluşturun:cat <<EOF | kubectl apply -f - kind: Pod apiVersion: v1 metadata: name: busybox-secrets-store-inline namespace: my-application spec: containers: - name: busybox image: k8s.gcr.io/e2e-test-images/busybox:1.29 command: - "/bin/sleep" - "10000" volumeMounts: - name: secrets-store-inline mountPath: "/mnt/secrets-store" readOnly: true volumes: - name: secrets-store-inline csi: driver: secrets-store.csi.k8s.io readOnly: true volumeAttributes: secretProviderClass: "azure-kvname" nodePublishSecretRef: name: secrets-store-creds EOF
Gizli dizinin takılı olup olmadığını denetleyin:
kubectl exec busybox-secrets-store-inline -- ls /mnt/secrets-store/
Çıktı aşağıdakiyle eşleşmelidir:
secret1
Gizli diziyi yazdırın:
kubectl exec busybox-secrets-store-inline \ -- cat /mnt/secrets-store/secret1
Çıktı aşağıdakiyle eşleşmelidir:
Hello
Temizleme
Key Vault Sağlayıcısını ve CSI Sürücüsünü kaldırın.
Key Vault Sağlayıcısını kaldırma
Helm grafiğini kaldırma:
helm uninstall -n k8s-secrets-store-csi azure-csi-provider
Uygulamayı silin:
oc delete project my-application
Azure anahtar kasasını silin:
az keyvault delete -n ${KEYVAULT_NAME}
Hizmet sorumlusunu silin:
az ad sp delete --id ${SERVICE_PRINCIPAL_CLIENT_ID}
Kubernetes Gizli Deposu CSI Sürücüsünü kaldırma
Gizli Dizi Deposu CSI Sürücüsünü Silin:
helm uninstall -n k8s-secrets-store-csi csi-secrets-store oc delete project k8s-secrets-store-csi
SecurityContextConstraints'i silin:
oc adm policy remove-scc-from-user privileged \ system:serviceaccount:k8s-secrets-store-csi:secrets-store-csi-driver
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin