Bagikan melalui


Gunakan ekstensi Secret Store untuk mengambil rahasia untuk akses offline di kluster Kubernetes dengan dukungan Azure Arc

Ekstensi Azure Key Vault Secret Store untuk Kubernetes ("SSE") secara otomatis menyinkronkan rahasia dari Azure Key Vault ke kluster Kubernetes dengan dukungan Azure Arc untuk akses offline. Ini berarti Anda dapat menggunakan Azure Key Vault untuk menyimpan, memelihara, dan memutar rahasia Anda, bahkan saat menjalankan kluster Kubernetes dalam keadaan semi-terputus. Rahasia yang disinkronkan disimpan di penyimpanan rahasia kluster, membuatnya tersedia sebagai rahasia Kubernetes untuk digunakan dengan semua cara yang biasa: dipasang sebagai volume data, atau diekspos sebagai variabel lingkungan ke kontainer dalam pod.

Rahasia yang disinkronkan adalah aset bisnis penting, sehingga SSE mengamankannya melalui namespace dan simpul yang terisolasi, kebijakan kontrol akses berbasis peran (RBAC), dan izin terbatas untuk penyinkron rahasia. Untuk perlindungan ekstra, enkripsi penyimpanan rahasia Kubernetes di kluster Anda.

Tip

SSE direkomendasikan untuk skenario di mana akses offline diperlukan, atau jika Anda memerlukan rahasia yang disinkronkan ke penyimpanan rahasia Kubernetes. Jika tidak memerlukan fitur ini, Anda dapat menggunakan ekstensi Penyedia Rahasia Azure Key Vault untuk manajemen rahasia di kluster Kubernetes dengan dukungan Arc. Tidak disarankan untuk menjalankan ekstensi Penyedia Rahasia Azure Key Vault online dan SSE offline secara berdampingan dalam kluster.

Artikel ini menunjukkan kepada Anda cara menginstal dan mengonfigurasi SSE sebagai ekstensi Kubernetes dengan dukungan Azure Arc.

Penting

SSE saat ini dalam PRATINJAU. Lihat Ketentuan Penggunaan Tambahan untuk Pratinjau Microsoft Azure untuk persyaratan hukum yang berlaku pada fitur Azure dalam versi beta, pratinjau, atau belum dirilis secara umum.

Prasyarat

  • Kluster dengan dukungan Arc. Ini bisa menjadi salah satu yang Anda sambungkan ke diri Anda sendiri (contoh di seluruh panduan ini menggunakan kluster K3s ) atau AKS yang dikelola Microsoft yang diaktifkan oleh kluster Azure Arc . Kluster harus menjalankan Kubernetes versi 1.27 atau yang lebih tinggi, dan di salah satu wilayah yang didukung (US Timur, US Timur2, US Barat, US2 Barat, US3 Barat, Eropa Barat, Eropa Utara). Wilayah ini ditentukan oleh wilayah grup sumber daya yang digunakan untuk membuat kluster Arc.
  • Pastikan Anda memenuhi prasyarat umum untuk ekstensi kluster, termasuk versi k8s-extension terbaru ekstensi Azure CLI.
  • cert-manager diperlukan untuk mendukung TLS untuk komunikasi log intrakluster. Contohnya nanti dalam panduan ini mengarahkan Anda melalui penginstalan. Untuk informasi selengkapnya tentang cert-manager, lihat cert-manager.io

Instal Azure CLI dan masuk, jika Anda belum:

az login

Sebelum memulai, atur variabel lingkungan yang akan digunakan untuk mengonfigurasi sumber daya Azure dan kluster. Jika Anda sudah memiliki identitas terkelola, Azure Key Vault, atau sumber daya lain yang tercantum di sini, perbarui nama dalam variabel lingkungan untuk mencerminkan sumber daya tersebut.

export RESOURCE_GROUP="AzureArcTest"
export CLUSTER_NAME="AzureArcTest1"
export LOCATION="EastUS"
export SUBSCRIPTION="$(az account show --query id --output tsv)"
az account set --subscription "${SUBSCRIPTION}"
export AZURE_TENANT_ID="$(az account show -s $SUBSCRIPTION --query tenantId --output tsv)"
export CURRENT_USER="$(az ad signed-in-user show --query userPrincipalName --output tsv)"
export KEYVAULT_NAME="my-kv"
export KEYVAULT_SECRET_NAME="my-secret"
export USER_ASSIGNED_IDENTITY_NAME="my-identity"
export FEDERATED_IDENTITY_CREDENTIAL_NAME="my-credential"
export KUBERNETES_NAMESPACE="my-namespace"
export SERVICE_ACCOUNT_NAME="my-service-account"

Mengaktifkan federasi identitas beban kerja di kluster Anda

SSE menggunakan fitur yang disebut federasi identitas beban kerja untuk mengakses dan menyinkronkan rahasia Azure Key Vault. Bagian ini menjelaskan cara menyiapkannya. Bagian berikut akan menjelaskan cara penggunaannya secara rinci.

Tip

Langkah-langkah berikut didasarkan pada panduan Cara mengonfigurasi Kubernetes dengan dukungan Arc dengan federasi identitas beban kerja. Lihat dokumentasi tersebut untuk bantuan tambahan apa pun.

Jika kluster Anda belum tersambung ke Azure Arc, ikuti langkah-langkah berikut. Selama langkah-langkah ini, aktifkan federasi identitas beban kerja sebagai bagian connect dari perintah:

az connectedk8s connect --name ${CLUSTER_NAME} --resource-group ${RESOURCE_GROUP} --enable-oidc-issuer

Jika kluster Anda sudah tersambung ke Azure Arc, aktifkan identitas beban kerja menggunakan update perintah :

az connectedk8s update --name ${CLUSTER_NAME} --resource-group ${RESOURCE_GROUP} --enable-oidc-issuer

Sekarang konfigurasikan kluster Anda untuk mengeluarkan token Akun Layanan dengan URL penerbit baru (service-account-issuer) yang memungkinkan MICROSOFT Entra ID menemukan kunci publik yang diperlukan agar dapat memvalidasi token ini. Kunci publik ini adalah untuk penerbit token akun layanan kluster sendiri, dan mereka diperoleh dan dihosting cloud di URL ini sebagai hasil dari --enable-oidc-issuer opsi yang Anda tetapkan di atas.

Secara opsional, Anda juga dapat mengonfigurasi batasan pada izin SSE sendiri sebagai sumber daya istimewa yang berjalan di sarana kontrol dengan mengonfigurasi OwnerReferencesPermissionEnforcement pengontrol penerimaan. Pengontrol penerimaan ini membatasi berapa banyak SSE yang dapat mengubah objek lain dalam kluster.

  1. Konfigurasikan kube-apiserver Anda dengan bidang URL penerbit dan penerapan izin. Contoh berikut adalah untuk kluster k3s. Kluster Anda mungkin memiliki cara yang berbeda untuk mengubah argumen server API: --kube-apiserver-arg="--service-account-issuer=${SERVICE_ACCOUNT_ISSUER}" and --kube-apiserver-arg="--enable-admission-plugins=OwnerReferencesPermissionEnforcement".

    • Dapatkan URL penerbit akun layanan.

      export SERVICE_ACCOUNT_ISSUER="$(az connectedk8s show --name ${CLUSTER_NAME} --resource-group ${RESOURCE_GROUP} --query "oidcIssuerProfile.issuerUrl" --output tsv)"
      echo $SERVICE_ACCOUNT_ISSUER
      
    • Buka file konfigurasi server K3s.

      sudo nano /etc/systemd/system/k3s.service
      
    • Edit konfigurasi server agar terlihat seperti contoh berikut, mengganti <SERVICE_ACCOUNT_ISSUER> dengan output di atas dari echo $SERVICE_ACCOUNT_ISSUER, ingatlah untuk menyertakan garis miring berikutnya dari URL ini:

      ExecStart=/usr/local/bin/k3s \
        server --write-kubeconfig-mode=644 \
           --kube-apiserver-arg="--service-account-issuer=<SERVICE_ACCOUNT_ISSUER>" \
           --kube-apiserver-arg="--enable-admission-plugins=OwnerReferencesPermissionEnforcement"
      
  2. Mulai ulang kube-apiserver Anda.

    sudo systemctl daemon-reload
    sudo systemctl restart k3s
    

Membuat rahasia dan mengonfigurasi identitas untuk mengaksesnya

Untuk mengakses dan menyinkronkan rahasia Azure Key Vault tertentu, SSE memerlukan akses ke identitas terkelola Azure dengan izin Azure yang sesuai untuk mengakses rahasia tersebut. Identitas terkelola harus ditautkan ke akun layanan Kubernetes menggunakan fitur identitas beban kerja yang Anda aktifkan di atas. SSE menggunakan identitas terkelola Azure federasi terkait untuk menarik rahasia dari Azure Key Vault ke penyimpanan rahasia Kubernetes Anda. Bagian berikut ini menjelaskan cara menyiapkannya.

Membuat Azure Key Vault

Buat Azure Key Vault dan tambahkan rahasia. Jika Anda sudah memiliki Azure Key Vault dan rahasia, Anda dapat melewati bagian ini.

  1. Buat Azure Key Vault:

    az keyvault create --resource-group "${RESOURCE_GROUP}" --location "${LOCATION}" --name "${KEYVAULT_NAME}" --enable-rbac-authorization
    
  2. Beri diri Anda izin 'Secrets Officer' di vault, sehingga Anda dapat membuat rahasia:

    az role assignment create --role "Key Vault Secrets Officer" --assignee ${CURRENT_USER} --scope /subscriptions/${SUBSCRIPTION}/resourcegroups/${RESOURCE_GROUP}/providers/Microsoft.KeyVault/vaults/${KEYVAULT_NAME}
    
  3. Buat rahasia dan perbarui sehingga Anda memiliki dua versi:

    az keyvault secret set --vault-name "${KEYVAULT_NAME}" --name "${KEYVAULT_SECRET_NAME}" --value 'Hello!'
    az keyvault secret set --vault-name "${KEYVAULT_NAME}" --name "${KEYVAULT_SECRET_NAME}" --value 'Hello2'
    

Membuat identitas terkelola yang ditetapkan pengguna

Selanjutnya, buat identitas terkelola yang ditetapkan pengguna dan beri izin untuk mengakses Azure Key Vault. Jika Anda sudah memiliki identitas terkelola dengan izin Pembaca Key Vault dan Pengguna Rahasia Key Vault ke Azure Key Vault, Anda dapat melewati bagian ini. Untuk informasi selengkapnya, lihat Membuat identitas terkelola yang ditetapkan pengguna dan Menggunakan izin rahasia, kunci, dan sertifikat Azure RBAC dengan Key Vault.

  1. Buat identitas terkelola yang ditetapkan pengguna:

    az identity create --name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}" --location "${LOCATION}" --subscription "${SUBSCRIPTION}"
    
  2. Berikan identitas Pembaca Key Vault dan Izin Pengguna Rahasia Key Vault. Anda mungkin perlu menunggu sejenak untuk replikasi pembuatan identitas sebelum perintah ini berhasil:

    export USER_ASSIGNED_CLIENT_ID="$(az identity show --resource-group "${RESOURCE_GROUP}" --name "${USER_ASSIGNED_IDENTITY_NAME}" --query 'clientId' -otsv)"
    az role assignment create --role "Key Vault Reader" --assignee "${USER_ASSIGNED_CLIENT_ID}" --scope /subscriptions/${SUBSCRIPTION}/resourcegroups/${RESOURCE_GROUP}/providers/Microsoft.KeyVault/vaults/${KEYVAULT_NAME}
    az role assignment create --role "Key Vault Secrets User" --assignee "${USER_ASSIGNED_CLIENT_ID}" --scope /subscriptions/${SUBSCRIPTION}/resourcegroups/${RESOURCE_GROUP}/providers/Microsoft.KeyVault/vaults/${KEYVAULT_NAME}
    

Membuat kredensial identitas gabungan

Buat akun layanan Kubernetes untuk beban kerja yang membutuhkan akses ke rahasia. Kemudian, buat kredensial identitas federasi untuk menautkan antara identitas terkelola, penerbit akun layanan OIDC, dan Akun Layanan Kubernetes.

  1. Buat Akun Layanan Kubernetes yang akan digabungkan ke identitas terkelola. Buat anotasi dengan detail identitas terkelola terkait yang ditetapkan pengguna.

    kubectl create ns ${KUBERNETES_NAMESPACE}
    
    cat <<EOF | kubectl apply -f -
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: ${SERVICE_ACCOUNT_NAME}
        namespace: ${KUBERNETES_NAMESPACE}
    EOF
    
  2. Buat kredensial identitas gabungan:

    az identity federated-credential create --name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} --identity-name ${USER_ASSIGNED_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP} --issuer ${SERVICE_ACCOUNT_ISSUER} --subject system:serviceaccount:${KUBERNETES_NAMESPACE}:${SERVICE_ACCOUNT_NAME}
    

Menginstal SSE

SSE tersedia sebagai ekstensi Azure Arc. Kluster Kubernetes dengan dukungan Azure Arc dapat diperluas dengan ekstensi Kubernetes dengan dukungan Azure Arc. Ekstensi memungkinkan kemampuan Azure pada kluster terhubung Anda dan memberikan pengalaman berbasis Azure Resource Manager untuk penginstalan ekstensi dan manajemen siklus hidup.

cert-manager dan trust-manager juga diperlukan untuk komunikasi log yang aman antara layanan kluster dan harus diinstal sebelum ekstensi Arc.

  1. Pasang cert-manager.

    helm repo add jetstack https://charts.jetstack.io/ --force-update
    helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace --version v1.16.2 --set crds.enabled=true 
    
  2. Instal trust-manager.

    helm upgrade trust-manager jetstack/trust-manager --install --namespace cert-manager --wait
    
  3. Instal SSE ke kluster berkemampuan Arc Anda menggunakan perintah berikut:

    az k8s-extension create \
      --cluster-name ${CLUSTER_NAME} \
      --cluster-type connectedClusters \
      --extension-type microsoft.azure.secretstore \
      --resource-group ${RESOURCE_GROUP} \
      --release-train preview \
      --name ssarcextension \
      --scope cluster 
    

    Jika diinginkan, Anda dapat secara opsional memodifikasi interval polling --configuration-settings rotationPollIntervalInSeconds=<time_in_seconds>rotasi default dengan menambahkan :

    Nama Parameter Deskripsi Nilai default
    rotationPollIntervalInSeconds Menentukan seberapa cepat SSE memeriksa atau memperbarui rahasia yang mengelolanya. 3600 (1 jam)

Mengonfigurasi SSE

Konfigurasikan ekstensi yang diinstal dengan informasi tentang Azure Key Vault dan rahasia mana yang akan disinkronkan ke kluster Anda dengan menentukan instans sumber daya kustom Kubernetes. Anda membuat dua jenis sumber daya kustom:

  • Objek SecretProviderClass untuk menentukan koneksi ke Key Vault.
  • Objek SecretSync untuk setiap rahasia yang akan disinkronkan.

Membuat SecretProviderClass sumber daya

Sumber SecretProviderClass daya digunakan untuk menentukan koneksi ke Azure Key Vault, identitas yang digunakan untuk mengakses vault, rahasia mana yang akan disinkronkan, dan jumlah versi setiap rahasia untuk dipertahankan secara lokal.

Anda memerlukan terpisah SecretProviderClass untuk setiap Azure Key Vault yang ingin Anda sinkronkan, untuk setiap identitas yang digunakan untuk akses ke Azure Key Vault, dan untuk setiap namespace Layanan Kubernetes target.

Buat satu atau beberapa SecretProviderClass file YAML dengan nilai yang sesuai untuk Key Vault dan rahasia Anda dengan mengikuti contoh ini.

cat <<EOF > spc.yaml
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: secret-provider-class-name                      # Name of the class; must be unique per Kubernetes namespace
  namespace: ${KUBERNETES_NAMESPACE}                    # Kubernetes namespace to make the secrets accessible in
spec:
  provider: azure
  parameters:
    clientID: "${USER_ASSIGNED_CLIENT_ID}"               # Managed Identity Client ID for accessing the Azure Key Vault with.
    keyvaultName: ${KEYVAULT_NAME}                       # The name of the Azure Key Vault to synchronize secrets from.
    objects: |
      array:
        - |
          objectName: ${KEYVAULT_SECRET_NAME}            # The name of the secret to sychronize.
          objectType: secret
          objectVersionHistory: 2                       # [optional] The number of versions to synchronize, starting from latest.
    tenantID: "${AZURE_TENANT_ID}"                       # The tenant ID of the Key Vault 
EOF

Membuat SecretSync objek

Setiap rahasia yang disinkronkan SecretSync juga memerlukan objek, untuk menentukan informasi khusus kluster. Di sini Anda menentukan informasi seperti nama rahasia di kluster dan nama Anda untuk setiap versi rahasia yang disimpan di kluster Anda.

Buat satu SecretSync file YAML objek untuk setiap rahasia, mengikuti templat ini. Namespace Layanan Kubernetes harus cocok dengan namespace dari pencocokan SecretProviderClass.

cat <<EOF > ss.yaml
apiVersion: secret-sync.x-k8s.io/v1alpha1
kind: SecretSync
metadata:
  name: secret-sync-name                                  # Name of the object; must be unique per Kubernetes namespace
  namespace: ${KUBERNETES_NAMESPACE}                      # Kubernetes namespace
spec:
  serviceAccountName: ${SERVICE_ACCOUNT_NAME}             # The Kubernetes service account to be given permissions to access the secret.
  secretProviderClassName: secret-provider-class-name     # The name of the matching SecretProviderClass with the configuration to access the AKV storing this secret
  secretObject:
    type: Opaque
    data:
    - sourcePath: ${KEYVAULT_SECRET_NAME}/0                # Name of the secret in Azure Key Vault with an optional version number (defaults to latest)
      targetKey: ${KEYVAULT_SECRET_NAME}-data-key0         # Target name of the secret in the Kubernetes secret store (must be unique)
    - sourcePath: ${KEYVAULT_SECRET_NAME}/1                # [optional] Next version of the AKV secret. Note that versions of the secret must match the configured objectVersionHistory in the secrets provider class 
      targetKey: ${KEYVAULT_SECRET_NAME}-data-key1         # [optional] Next target name of the secret in the K8s secret store
EOF

Menerapkan CR konfigurasi

Terapkan sumber daya kustom konfigurasi (CR) menggunakan kubectl apply perintah :

kubectl apply -f ./spc.yaml
kubectl apply -f ./ss.yaml

SSE secara otomatis mencari rahasia dan mulai menyinkronkannya ke kluster.

Lihat opsi konfigurasi

Untuk melihat opsi konfigurasi tambahan untuk dua jenis sumber daya kustom ini, gunakan kubectl describe perintah untuk memeriksa CRD di kluster:

# Get the name of any applied CRD(s)
kubectl get crds -o custom-columns=NAME:.metadata.name

# View the full configuration options and field parameters for a given CRD
kubectl describe crd secretproviderclass
kubectl describe crd secretsync

Mengamati rahasia yang disinkronkan ke kluster

Setelah konfigurasi diterapkan, rahasia mulai disinkronkan ke kluster secara otomatis pada irama yang ditentukan saat menginstal SSE.

Menampilkan rahasia yang disinkronkan

Lihat rahasia yang disinkronkan ke kluster dengan menjalankan perintah berikut:

# View a list of all secrets in the namespace
kubectl get secrets -n ${KUBERNETES_NAMESPACE}

# View details of all secrets in the namespace
kubectl get secrets -n ${KUBERNETES_NAMESPACE} -o yaml

Menampilkan status sinkronisasi terakhir

Untuk melihat status sinkronisasi terbaru untuk rahasia tertentu, gunakan kubectl describe perintah untuk SecretSync objek . Output mencakup tanda waktu pembuatan rahasia, versi rahasia, dan pesan status terperinci untuk setiap peristiwa sinkronisasi. Output ini dapat digunakan untuk mendiagnosis kesalahan koneksi atau konfigurasi, dan untuk mengamati kapan nilai rahasia berubah.

kubectl describe secretsync secret-sync-name -n ${KUBERNETES_NAMESPACE}

Menampilkan nilai rahasia

Untuk melihat nilai rahasia yang disinkronkan, yang sekarang disimpan di penyimpanan rahasia Kubernetes, gunakan perintah berikut:

kubectl get secret secret-sync-name -n ${KUBERNETES_NAMESPACE} -o jsonpath="{.data.${KEYVAULT_SECRET_NAME}-data-key0}" | base64 -d
kubectl get secret secret-sync-name -n ${KUBERNETES_NAMESPACE} -o jsonpath="{.data.${KEYVAULT_SECRET_NAME}-data-key1}" | base64 -d

Pemecahan Masalah

SSE adalah penyebaran Kubernetes yang berisi pod dengan dua kontainer: pengontrol, yang mengelola penyimpanan rahasia di kluster, dan penyedia, yang mengelola akses ke, dan menarik rahasia dari, Azure Key Vault. Setiap rahasia yang disinkronkan memiliki SecretSync objek yang berisi status sinkronisasi rahasia itu dari Azure Key Vault ke penyimpanan rahasia kluster.

Untuk memecahkan masalah, mulailah dengan melihat status SecretSync objek, seperti yang dijelaskan dalam Menampilkan status sinkronisasi terakhir. Tabel berikut ini mencantumkan jenis status umum, maknanya, dan potensi langkah pemecahan masalah untuk mengatasi kesalahan.

Jenis Status SecretSync Detail Langkah-langkah untuk memperbaiki/menyelidiki lebih lanjut
CreateSucceeded Rahasia berhasil dibuat. n/a
CreateFailedProviderError Pembuatan rahasia gagal karena beberapa masalah dengan penyedia (koneksi ke Azure Key Vault). Kegagalan ini bisa disebabkan oleh konektivitas internet, izin yang tidak mencukup untuk rahasia sinkronisasi identitas, kesalahan konfigurasi SecretProviderClass, atau masalah lainnya. Selidiki lebih lanjut dengan melihat log penyedia menggunakan perintah berikut:
kubectl get pods -n azure-secret-store
kubectl logs <secret-sync-controller-pod-name> -n azure-secret-store --container='provider-azure-installer'
CreateFailedInvalidLabel Pembuatan rahasia gagal karena rahasia sudah ada tanpa label Kubernetes yang benar yang digunakan SSE untuk mengelola rahasianya. Hapus label dan rahasia yang ada dan izinkan SSE untuk membuat ulang rahasia: kubectl delete secret <secret-name>
Untuk memaksa SSE membuat ulang rahasia lebih cepat dari interval polling rotasi yang dikonfigurasi, hapus SecretSync objek (kubectl delete secretsync <secret-name>) dan terapkan kembali kelas sinkronisasi rahasia (kubectl apply -f <path_to_secret_sync>).
CreateFailedInvalidAnnotation Pembuatan rahasia gagal karena rahasia sudah ada tanpa anotasi Kubernetes yang benar yang digunakan SSE untuk mengelola rahasianya. Hapus anotasi dan rahasia yang ada dan izinkan SSE untuk membuat ulang rahasia: kubectl delete secret <secret-name>
Untuk memaksa SSE membuat ulang rahasia lebih cepat dari interval polling rotasi yang dikonfigurasi, hapus SecretSync objek (kubectl delete secretsync <secret-name>) dan terapkan kembali kelas sinkronisasi rahasia (kubectl apply -f <path_to_secret_sync>).
UpdateNoValueChangeSucceeded SSE memeriksa Azure Key Vault untuk pembaruan di akhir interval polling yang dikonfigurasi, tetapi tidak ada perubahan untuk disinkronkan. n/a
UpdateValueChangeOrForceUpdateSucceeded SSE memeriksa Azure Key Vault untuk pembaruan dan berhasil memperbarui nilai. n/a
UpdateFailedInvalidLabel Pembaruan rahasia gagal karena label pada rahasia yang digunakan SSE untuk mengelola rahasianya dimodifikasi. Hapus label dan rahasia yang ada, dan izinkan SSE untuk membuat ulang rahasia: kubectl delete secret <secret-name>
Untuk memaksa SSE membuat ulang rahasia lebih cepat dari interval polling rotasi yang dikonfigurasi, hapus SecretSync objek (kubectl delete secretsync <secret-name>) dan terapkan kembali kelas sinkronisasi rahasia (kubectl apply -f <path_to_secret_sync>).
UpdateFailedInvalidAnnotation Pembaruan rahasia gagal karena anotasi pada rahasia yang digunakan SSE untuk mengelola rahasianya dimodifikasi. Hapus anotasi dan rahasia yang ada dan izinkan SSE untuk membuat ulang rahasia: kubectl delete secret <secret-name>
Untuk memaksa SSE membuat ulang rahasia lebih cepat dari interval polling rotasi yang dikonfigurasi, hapus SecretSync objek (kubectl delete secretsync <secret-name>) dan terapkan kembali kelas sinkronisasi rahasia (kubectl apply -f <path_to_secret_sync>).
UpdateFailedProviderError Pembaruan rahasia gagal karena beberapa masalah dengan penyedia (koneksi ke Azure Key Vault). Kegagalan ini bisa disebabkan oleh konektivitas internet, izin yang tidak mencukup untuk rahasia sinkronisasi identitas, konfigurasi SecretProviderClass, atau masalah lainnya. Selidiki lebih lanjut dengan melihat log penyedia menggunakan perintah berikut:
kubectl get pods -n azure-secret-store
kubectl logs <secret-sync-controller-pod-name> -n azure-secret-store --container='provider-azure-installer'
UserInputValidationFailed Pembaruan rahasia gagal karena kelas sinkronisasi rahasia dikonfigurasi dengan salah (seperti jenis rahasia yang tidak valid). Tinjau definisi kelas sinkronisasi rahasia dan koreksi kesalahan apa pun. Kemudian, hapus SecretSync objek (kubectl delete secretsync <secret-name>), hapus kelas sinkronisasi rahasia (kubectl delete -f <path_to_secret_sync>), dan terapkan kembali kelas sinkronisasi rahasia (kubectl apply -f <path_to_secret_sync>).
ControllerSpcError Pembaruan rahasia gagal karena SSE gagal mendapatkan kelas penyedia atau kelas penyedia salah dikonfigurasi. Tinjau kelas penyedia dan koreksi kesalahan apa pun. Kemudian, hapus SecretSync objek (kubectl delete secretsync <secret-name>), hapus kelas penyedia (kubectl delete -f <path_to_provider>), dan terapkan kembali kelas penyedia (kubectl apply -f <path_to_provider>).
ControllerInternalError Pembaruan rahasia gagal karena kesalahan internal di SSE. Periksa log SSE atau peristiwa untuk informasi selengkapnya:
kubectl get pods -n azure-secret-store
kubectl logs <secret-sync-controller-pod-name> -n azure-secret-store --container='manager'
SecretPatchFailedUnknownError Pembaruan rahasia gagal selama patching nilai rahasia Kubernetes. Kegagalan ini mungkin terjadi jika rahasia dimodifikasi oleh seseorang selain SSE atau jika ada masalah selama pembaruan SSE. Coba hapus rahasia dan SecretSync objek, lalu biarkan SSE membuat ulang rahasia dengan menerapkan kembali CR sinkronisasi rahasia:
kubectl delete secret <secret-name>
kubectl delete secretsync <secret-name>
kubectl apply -f <path_to_secret_sync>

Menghapus SSE

Untuk menghapus SSE dan berhenti menyinkronkan rahasia, hapus instalannya az k8s-extension delete dengan perintah :

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

Menghapus instalan ekstensi tidak menghapus rahasia, SecretSync objek, atau CRD dari kluster. Objek-objek ini harus dihapus langsung dengan kubectl.

Menghapus SecretSync CRD menghapus semua SecretSync objek, dan secara default menghapus semua rahasia yang dimiliki, tetapi rahasia dapat bertahan jika:

Dalam kasus di atas, rahasia harus dihapus secara langsung menggunakan kubectl.

Langkah berikutnya