Aracılığıyla paylaş


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:

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

  1. ARO projesi oluşturma; CSI Sürücüsünü bu projeye dağıtacaksınız:

    oc new-project k8s-secrets-store-csi
    
  2. 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
    
  3. 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
    
  4. Helm depolarınızı güncelleştirin:

    helm repo update
    
  5. 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"

  6. 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

  1. Azure Helm deposunu ekleyin:

    helm repo add csi-secrets-store-provider-azure \
       https://azure.github.io/secrets-store-csi-driver-provider-azure/charts
    
  2. Yerel Helm depolarınızı güncelleştirin:

    helm repo update
    
  3. 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
    
  4. 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

  1. Uygulamanız için bir ad alanı oluşturun.

    oc new-project my-application
    
  2. Kaynak grubunuzda ARO içeren bir Azure anahtar kasası oluşturun.

    az keyvault create -n ${KEYVAULT_NAME} \
       -g ${KEYVAULT_RESOURCE_GROUP} \
       --location ${KEYVAULT_LOCATION}
    
  3. Anahtar kasasında bir gizli dizi oluşturun.

    az keyvault secret set \
       --vault-name ${KEYVAULT_NAME} \
       --name secret1 --value "Hello"
    
  4. 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)"
    
  5. 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}
    
  6. 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

  1. 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
    
  2. Ö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
    
  3. 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
    
  4. 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

  1. Helm grafiğini kaldırma:

    helm uninstall -n k8s-secrets-store-csi azure-csi-provider
    
  2. Uygulamayı silin:

    oc delete project my-application
    
  3. Azure anahtar kasasını silin:

    az keyvault delete -n ${KEYVAULT_NAME}
    
  4. Hizmet sorumlusunu silin:

    az ad sp delete --id ${SERVICE_PRINCIPAL_CLIENT_ID}
    

Kubernetes Gizli Deposu CSI Sürücüsünü kaldırma

  1. 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
    
  2. SecurityContextConstraints'i silin:

    oc adm policy remove-scc-from-user privileged \
      system:serviceaccount:k8s-secrets-store-csi:secrets-store-csi-driver