Aracılığıyla paylaş


Azure Arc özellikli Kubernetes kümelerine gizli dizileri getirmek için Azure Key Vault Gizli Dizi Sağlayıcısı uzantısını kullanın

Gizli Dizi Deposu için Azure Key Vault Sağlayıcısı CSI Sürücüsü, Azure Key Vault'un bir CSI birimi aracılığıyla Kubernetes kümesiyle gizli dizi deposu olarak tümleştirilmesine olanak tanır. Azure Arc özellikli Kubernetes kümeleri için, gizli dizileri getirmek için Azure Key Vault Gizli Dizi Sağlayıcısı uzantısını yükleyebilirsiniz.

Azure Key Vault Gizli Dizi Sağlayıcısı uzantısının özellikleri şunlardır:

  • CSI Satır içi birimi kullanarak gizli dizileri/anahtarları/sertifikaları pod'a bağlar
  • SecretProviderClass CRD ile pod taşınabilirliğini destekler
  • Linux ve Windows kapsayıcılarını destekler
  • Kubernetes Gizli Dizileri ile eşitlemeyi destekler
  • Gizli dizilerin otomatik döndürmesini destekler
  • Uzantı bileşenleri kullanılabilirlik alanlarına dağıtılarak alanlar arası yedekli hale gelir

İpucu

Çevrimdışı erişim gerekiyorsa veya gizli dizilerin Kubernetes gizli dizi deposuyla eşitlenmesi gerekiyorsa Arc özellikli Kubernetes kümelerinizde gizli dizi yönetimi için Gizli Dizi Deposu uzantısını kullanın.

Önkoşullar

  • Azure Arc'a bağlı desteklenen kubernetes dağıtımına sahip bir küme. Şu anda bu senaryo için aşağıdaki Kubernetes dağıtımları desteklenmektedir:
    • Küme API'si Azure
    • Azure Stack HCI üzerinde Azure Kubernetes Service (AKS) kümeleri
    • Azure Arc tarafından etkinleştirilen AKS
    • Google Kubernetes Engine
    • OpenShift Kubernetes Dağıtımı
    • Kurallı Kubernetes Dağıtımı
    • Elastic Kubernetes Service
    • Tanzu Kubernetes Grid
    • Azure Red Hat OpenShift
  • Aşağıdaki uç noktalara giden bağlantı:
    • linuxgeneva-microsoft.azurecr.io
    • upstreamarc.azurecr.io
    • *.blob.core.windows.net
  • Küme uzantıları için genel önkoşulları karşıladığınızdan emin olun. Azure CLI uzantısının 0.4.0 veya daha yeni bir k8s-extension sürümünü kullanmanız gerekir.

Arc özellikli kubernetes kümesine Azure Key Vault Gizli Dizi Sağlayıcısı uzantısını yükleme

Bağlı kümenize Azure Key Vault Gizli Dizi Sağlayıcısı uzantısını Azure portalda, Azure CLI kullanarak veya bir ARM şablonu dağıtarak yükleyebilirsiniz.

Azure Arc özellikli kubernetes kümelerinde uzantının yalnızca bir örneği dağıtılabilir.

İpucu

Küme giden ara sunucunun arkasındaysa, uzantıyı yüklemeden önce ara sunucu yapılandırma seçeneğini kullanarak Azure Arc'a bağladığınızdan emin olun.

Azure portal

  1. Azure portalında Kubernetes - Azure Arc'a gidin ve kümenizi seçin.

  2. Uzantılar'ı (Ayarlar'ın altında) ve ardından + Ekle'yi seçin.

    Azure portalında Arc özellikli kubernetes kümesinin Uzantılar bölmesini gösteren ekran görüntüsü.

  3. Kullanılabilir uzantılar listesinden Azure Key Vault Gizli Dizileri Sağlayıcısı'nı seçerek uzantının en son sürümünü dağıtın.

    Azure portalında Azure Key Vault Gizli Dizi Sağlayıcısı uzantısını gösteren ekran görüntüsü.

  4. Uzantıyı dağıtmak için istemleri izleyin. Gerekirse, Yapılandırma sekmesindeki varsayılan seçenekleri değiştirerek yüklemeyi özelleştirin.

Azure CLI

  1. Ortam değişkenlerini ayarlayın:

    export CLUSTER_NAME=<arc-cluster-name>
    export RESOURCE_GROUP=<resource-group-name>
    
  2. Aşağıdaki komutu çalıştırarak Gizli Dizi Deposu CSI Sürücüsünü ve Azure Key Vault Gizli Dizi Sağlayıcısı uzantısını yükleyin:

    az k8s-extension create --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --cluster-type connectedClusters --extension-type Microsoft.AzureKeyVaultSecretsProvider --name akvsecretsprovider
    

Bu örneğe benzer bir çıktı görmeniz gerekir. Gizli dizi sağlayıcısı Helm grafiğinin kümeye dağıtılma işlemi birkaç dakika sürebilir.

{
  "aksAssignedIdentity": null,
  "autoUpgradeMinorVersion": true,
  "configurationProtectedSettings": {},
  "configurationSettings": {},
  "customLocationSettings": null,
  "errorInfo": null,
  "extensionType": "microsoft.azurekeyvaultsecretsprovider",
  "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Kubernetes/connectedClusters/$CLUSTER_NAME/providers/Microsoft.KubernetesConfiguration/extensions/akvsecretsprovider",
  "identity": {
    "principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "tenantId": null,
    "type": "SystemAssigned"
  },
  "location": null,
  "name": "akvsecretsprovider",
  "packageUri": null,
  "provisioningState": "Succeeded",
  "releaseTrain": "Stable",
  "resourceGroup": "$RESOURCE_GROUP",
  "scope": {
    "cluster": {
      "releaseNamespace": "kube-system"
    },
    "namespace": null
  },
  "statuses": [],
  "systemData": {
    "createdAt": "2022-05-12T18:35:56.552889+00:00",
    "createdBy": null,
    "createdByType": null,
    "lastModifiedAt": "2022-05-12T18:35:56.552889+00:00",
    "lastModifiedBy": null,
    "lastModifiedByType": null
  },
  "type": "Microsoft.KubernetesConfiguration/extensions",
  "version": "1.1.3"
}

ARM şablonu

  1. Aşağıdaki biçimi kullanarak bir .json dosyası oluşturun. Kümenize başvurmak <için küme adı> değerini güncelleştirin.

    {
        "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
            "ConnectedClusterName": {
                "defaultValue": "<cluster-name>",
                "type": "String",
                "metadata": {
                    "description": "The Connected Cluster name."
                }
            },
            "ExtensionInstanceName": {
                "defaultValue": "akvsecretsprovider",
                "type": "String",
                "metadata": {
                    "description": "The extension instance name."
                }
            },
            "ExtensionVersion": {
                "defaultValue": "",
                "type": "String",
                "metadata": {
                    "description": "The version of the extension type."
                }
            },
            "ExtensionType": {
                "defaultValue": "Microsoft.AzureKeyVaultSecretsProvider",
                "type": "String",
                "metadata": {
                    "description": "The extension type."
                }
            },
            "ReleaseTrain": {
                "defaultValue": "stable",
                "type": "String",
                "metadata": {
                    "description": "The release train."
                }
            }
        },
        "functions": [],
        "resources": [
            {
                "type": "Microsoft.KubernetesConfiguration/extensions",
                "apiVersion": "2021-09-01",
                "name": "[parameters('ExtensionInstanceName')]",
                "identity": {
                 "type": "SystemAssigned"
                },
                "properties": {
                    "extensionType": "[parameters('ExtensionType')]",
                    "releaseTrain": "[parameters('ReleaseTrain')]",
                    "version": "[parameters('ExtensionVersion')]"
                },
                "scope": "[concat('Microsoft.Kubernetes/connectedClusters/', parameters('ConnectedClusterName'))]"
            }
        ]
    }
    
  2. Şimdi aşağıdaki Azure CLI komutunu kullanarak ortam değişkenlerini ayarlayın:

    export TEMPLATE_FILE_NAME=<template-file-path>
    export DEPLOYMENT_NAME=<desired-deployment-name>
    
  3. Son olarak, Azure Key Vault Gizli Dizi Sağlayıcısı uzantısını yüklemek için şu Azure CLI komutunu çalıştırın:

    az deployment group create --name $DEPLOYMENT_NAME --resource-group $RESOURCE_GROUP --template-file $TEMPLATE_FILE_NAME
    

Artık gizli dizi sağlayıcısı kaynaklarını görüntüleyebilmeniz ve kümenizdeki uzantıyı kullanabilmeniz gerekir.

Uzantı yüklemesini doğrulama

Azure Key Vault Gizli Dizi Sağlayıcısı uzantısının başarıyla yüklenmesini onaylamak için aşağıdaki komutu çalıştırın.

az k8s-extension show --cluster-type connectedClusters --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --name akvsecretsprovider

Bu örneğe benzer bir çıktı görmeniz gerekir.

{
  "aksAssignedIdentity": null,
  "autoUpgradeMinorVersion": true,
  "configurationProtectedSettings": {},
  "configurationSettings": {},
  "customLocationSettings": null,
  "errorInfo": null,
  "extensionType": "microsoft.azurekeyvaultsecretsprovider",
  "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Kubernetes/connectedClusters/$CLUSTER_NAME/providers/Microsoft.KubernetesConfiguration/extensions/akvsecretsprovider",
  "identity": {
    "principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "tenantId": null,
    "type": "SystemAssigned"
  },
  "location": null,
  "name": "akvsecretsprovider",
  "packageUri": null,
  "provisioningState": "Succeeded",
  "releaseTrain": "Stable",
  "resourceGroup": "$RESOURCE_GROUP",
  "scope": {
    "cluster": {
      "releaseNamespace": "kube-system"
    },
    "namespace": null
  },
  "statuses": [],
  "systemData": {
    "createdAt": "2022-05-12T18:35:56.552889+00:00",
    "createdBy": null,
    "createdByType": null,
    "lastModifiedAt": "2022-05-12T18:35:56.552889+00:00",
    "lastModifiedBy": null,
    "lastModifiedByType": null
  },
  "type": "Microsoft.KubernetesConfiguration/extensions",
  "version": "1.1.3"
}

Azure Key Vault oluşturma veya seçme

Ardından, bağlı kümenizle kullanılacak Azure Key Vault'ı belirtin. Henüz bir anahtar kasanız yoksa aşağıdaki komutları kullanarak yeni bir Key Vault oluşturun. Anahtar kasanızın adının genel olarak benzersiz olması gerektiğini unutmayın.

Aşağıdaki ortam değişkenlerini ayarlayın:

export AKV_RESOURCE_GROUP=<resource-group-name>
export AZUREKEYVAULT_NAME=<AKV-name>
export AZUREKEYVAULT_LOCATION=<AKV-location>

Ardından aşağıdaki komutu çalıştırın:

az keyvault create -n $AZUREKEYVAULT_NAME -g $AKV_RESOURCE_GROUP -l $AZUREKEYVAULT_LOCATION

Azure Key Vault anahtarları, gizli dizileri ve sertifikaları depolayabilir. Bu örnekte, aşağıdaki komutu kullanarak adlı DemoSecret bir düz metin gizli dizisi ayarlayabilirsiniz:

az keyvault secret set --vault-name $AZUREKEYVAULT_NAME -n DemoSecret --value MyExampleSecret

Sonraki bölüme geçmeden önce aşağıdaki özellikleri not alın:

  • Key Vault'taki gizli nesnenin adı
  • Nesne türü (gizli dizi, anahtar veya sertifika)
  • Key Vault kaynağınızın adı
  • Key Vault'un ait olduğu aboneliğin Azure Kiracı Kimliği

Azure Key Vault'a erişmek için kimlik sağlama

Şu anda Arc özellikli kümelerde Gizli Dizi Deposu CSI Sürücüsüne bir hizmet sorumlusu üzerinden erişilebilir. Key Vault'unuza erişebilecek bir kimlik sağlamak için bu adımları izleyin.

  1. Azure'da hizmet sorumlusu oluşturmak için adımları izleyin. Bu adımda oluşturulan İstemci Kimliği ve İstemci Gizli Dizisi'ni not alın.

  2. Ardından Azure Key Vault'un oluşturulan hizmet sorumlusu için GET iznine sahip olduğundan emin olun.

  3. Bağlı kümede kubernetes gizli dizisi oluşturmak için ilk adımdaki istemci kimliğini ve gizli diziyi kullanın:

    kubectl create secret generic secrets-store-creds --from-literal clientid="<client-id>" --from-literal clientsecret="<client-secret>"
    
  4. Oluşturulan gizli diziyi etiketle:

    kubectl label secret secrets-store-creds secrets-store.csi.k8s.io/used=true
    
  5. Anahtar kasası adı, kiracı kimliği ve AKV örneğinizden alınacak nesneler için değerlerinizi doldurarak aşağıdaki YAML ile bir SecretProviderClass oluşturun:

    # This is a SecretProviderClass example using service principal to access Keyvault
    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: akvprovider-demo
    spec:
      provider: azure
      parameters:
        usePodIdentity: "false"
        keyvaultName: <key-vault-name>
        cloudName:                           # Defaults to AzurePublicCloud
        objects:  |
          array:
            - |
              objectName: DemoSecret
              objectType: secret             # object types: secret, key or cert
              objectVersion: ""              # [OPTIONAL] object versions, default to latest if empty
        tenantId: <tenant-Id>                # The tenant ID of the Azure Key Vault instance
    

    Ulusal bulutlarla kullanmak için Azure Kamu için veya AzureChinaCloud 21Vianet tarafından sağlanan Microsoft Azure için olarak değiştirin.cloudName AzureUSGovernmentCloud

  6. SecretProviderClass'ı kümenize uygulayın:

    kubectl apply -f secretproviderclass.yaml
    
  7. Kimliğinizin adını doldurarak aşağıdaki YAML ile bir pod oluşturun:

    # This is a sample pod definition for using SecretProviderClass and service principal to access Keyvault
    kind: Pod
    apiVersion: v1
    metadata:
      name: busybox-secrets-store-inline
    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: "akvprovider-demo"
            nodePublishSecretRef:                       
              name: secrets-store-creds
    
  8. Podu kümenize uygulayın:

    kubectl apply -f pod.yaml
    

Gizli dizileri doğrulama

Pod başlatıldıktan sonra, dağıtım YAML'nizde belirtilen birim yolundaki bağlı içerik kullanılabilir.

## show secrets held in secrets-store
kubectl exec busybox-secrets-store-inline -- ls /mnt/secrets-store/

## print a test secret 'DemoSecret' held in secrets-store
kubectl exec busybox-secrets-store-inline -- cat /mnt/secrets-store/DemoSecret

Ek yapılandırma seçenekleri

Azure Key Vault Gizli Dizi Sağlayıcısı uzantısı Helm grafik yapılandırmalarını destekler.

Aşağıdaki yapılandırma ayarları, Azure Key Vault Gizli Dizi Sağlayıcısı uzantısıyla sık sık kullanılır:

Yapılandırma Ayarı Varsayılan Açıklama
enableSecretRotation yanlış Boole türü. ise true, pod bağlamasını ve Kubernetes Gizli Dizisini düzenli aralıklarla dış gizli dizi deposundaki en son içerikle güncelleştirir
rotationPollInterval 2 m ise enableSecretRotation true, bu ayar gizli dizi döndürme yoklama aralığı süresini belirtir. Bu süre, tüm podlar ve Kubernetes gizli dizileri için bağlı içeriklerin en son sürüme ne sıklıkta yeniden eşitlenmeleri gerektiği temelinde ayarlanabilir.
syncSecret.enabled yanlış Boole girişi. Bazı durumlarda, bağlı içeriği yansıtmak için bir Kubernetes Gizli Dizisi oluşturmak isteyebilirsiniz. ise true, SecretProviderClass alanın eşitlenen Kubernetes Gizli Dizi nesnelerinin istenen durumunu tanımlamasına izin verir secretObjects .

Uzantı yüklendiğinde bu ayarlar şu komut kullanılarak az k8s-extension create belirtilebilir:

az k8s-extension create --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --cluster-type connectedClusters --extension-type Microsoft.AzureKeyVaultSecretsProvider --name akvsecretsprovider --configuration-settings secrets-store-csi-driver.enableSecretRotation=true secrets-store-csi-driver.rotationPollInterval=3m secrets-store-csi-driver.syncSecret.enabled=true

Yüklemeden sonra şu komutu kullanarak az k8s-extension update da bu ayarları değiştirebilirsiniz:

az k8s-extension update --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --cluster-type connectedClusters --name akvsecretsprovider --configuration-settings secrets-store-csi-driver.enableSecretRotation=true secrets-store-csi-driver.rotationPollInterval=3m secrets-store-csi-driver.syncSecret.enabled=true

Dağıtımınız için gereken diğer yapılandırma ayarlarını kullanabilirsiniz. Örneğin, küme oluştururken kubelet kök dizinini değiştirmek için komutunu değiştirin az k8s-extension create :

az k8s-extension create --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --cluster-type connectedClusters --extension-type Microsoft.AzureKeyVaultSecretsProvider --name akvsecretsprovider --configuration-settings linux.kubeletRootDir=/path/to/kubelet secrets-store-csi-driver.linux.kubeletRootDir=/path/to/kubelet

Azure Key Vault Gizli Dizi Sağlayıcısı uzantısını kaldırma

Uzantıyı kaldırmak için aşağıdaki komutu çalıştırın:

az k8s-extension delete --cluster-type connectedClusters --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --name akvsecretsprovider

Not

Uzantı kaldırıldığında, uzantı yüklendiğinde oluşturulan Özel Kaynak Tanımları (CRD) silinmez.

Uzantı örneğinin silindiğini onaylamak için aşağıdaki komutu çalıştırın:

az k8s-extension list --cluster-type connectedClusters --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP

Uzantı başarıyla kaldırıldıysa, çıkışta Azure Key Vault Gizli Dizi Sağlayıcısı uzantısının listelendiğini görmezsiniz. Kümenizde yüklü başka uzantı yoksa boş bir dizi görürsünüz.

Artık ihtiyacınız yoksa, aşağıdaki komutu çalıştırarak hizmet sorumlusuyla ilişkili Kubernetes gizli dizisini sildiğinizden emin olun:

kubectl delete secret secrets-store-creds

Mutabakat ve sorun giderme

Azure Key Vault Gizli Dizi Sağlayıcısı uzantısı kendi kendine iyileştiricidir. Birisi uzantı yüklendiğinde dağıtılan bir uzantı bileşenini değiştirmeye veya silmeye çalışırsa, bu bileşen özgün durumuyla mutabıktır. Yalnızca Özel Kaynak Tanımları (CRD) için özel durumlar vardır. CRD'ler silinirse, bunlar uzlaştırılamaz. Silinen CRD'leri geri yüklemek için komutunu mevcut uzantı örneği adıyla yeniden kullanın az k8s-extension create .

Yaygın sorunları çözme hakkında daha fazla bilgi için Bkz. Gizli Dizi Deposu CSI sürücüsü ve Gizli Dizi Deposu CSI Sürücüsü için Azure Key Vault sağlayıcısı için açık kaynak sorun giderme kılavuzları.

Sonraki adımlar

  • Bir şeyler denemek ister misin? Küme API'sini kullanarak Azure Arc Jumpstart senaryosunu kullanmaya hızlı bir şekilde başlayın.
  • Azure Key Vault hakkında daha fazla bilgi edinin.