Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Penyedia Azure Key Vault untuk Driver Secrets Store CSI memungkinkan Anda untuk mendapatkan konten rahasia yang disimpan dalam instans Azure Key Vault dan menggunakan Driver Secrets Store CSI untuk memasangnya ke dalam pod Kubernetes. Artikel ini menjelaskan cara menggunakan Penyedia Azure Key Vault untuk Secrets Store CSI Driver di Azure Red Hat OpenShift.
Nota
Sebagai alternatif untuk solusi sumber terbuka yang disajikan dalam artikel ini, Anda dapat menggunakan Azure Arc untuk mengelola kluster ARO Anda bersama dengan ekstensi Driver Azure Key Vault Provider for Secrets Store CSI-nya. Metode ini didukung sepenuhnya oleh Microsoft dan direkomendasikan alih-alih solusi sumber terbuka di bawah ini.
Prasyarat
Prasyarat berikut diperlukan:
- Kluster Azure Red Hat OpenShift (Lihat Membuat kluster Azure Red Hat OpenShift untuk mempelajari selengkapnya.)
- Azure CLI (masuk)
- Helm 3.x CLI (antarmuka baris perintah)
Atur variabel lingkungan
Atur variabel berikut yang akan digunakan di seluruh prosedur ini:
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)
Menginstal Driver CSI Penyimpanan Rahasia Kubernetes
Membuat proyek ARO; Anda akan menyebarkan Driver CSI ke dalam proyek ini:
oc new-project k8s-secrets-store-csi
Atur SecurityContextConstraints untuk memungkinkan Driver CSI berjalan (jika tidak, Driver CSI tidak akan dapat membuat pod):
oc adm policy add-scc-to-user privileged \ system:serviceaccount:k8s-secrets-store-csi:secrets-store-csi-driver
Tambahkan Driver Secrets Store CSI ke repositori Helm Anda:
helm repo add secrets-store-csi-driver \ https://kubernetes-sigs.github.io/secrets-store-csi-driver/charts
Perbarui repositori Helm Anda:
helm repo update
Instal Driver Secrets Store CSI:
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"
Secara opsional, Anda dapat mengaktifkan autorotasi rahasia dengan menambahkan parameter berikut ke perintah di atas:
--set "syncSecret.enabled=true" --set "enableSecretRotation=true"
Verifikasi bahwa DaemonSet Driver CSI sedang berjalan:
kubectl --namespace=k8s-secrets-store-csi get pods -l "app=secrets-store-csi-driver"
Setelah menjalankan perintah di atas, Anda akan melihat hal berikut:
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
Menyebarkan Penyedia Azure Key Vault untuk Driver Secrets Store CSI
Tambahkan repositori Azure Helm:
helm repo add csi-secrets-store-provider-azure \ https://azure.github.io/secrets-store-csi-driver-provider-azure/charts
Perbarui repositori Helm lokal Anda:
helm repo update
Instal penyedia CSI Azure Key Vault:
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
Atur SecurityContextConstraints untuk memungkinkan driver CSI berjalan:
oc adm policy add-scc-to-user privileged \ system:serviceaccount:k8s-secrets-store-csi:csi-secrets-store-provider-azure
Membuat brankas kunci dan rahasia
Buat namespace layanan untuk aplikasi Anda.
oc new-project my-application
Buat brankas kunci Azure di grup sumber daya Anda yang berisi ARO.
az keyvault create -n ${KEYVAULT_NAME} \ -g ${KEYVAULT_RESOURCE_GROUP} \ --location ${KEYVAULT_LOCATION}
Buat rahasia di brankas kunci.
az keyvault secret set \ --vault-name ${KEYVAULT_NAME} \ --name secret1 --value "Hello"
Buat perwakilan layanan untuk brankas kunci.
Nota
Jika Anda menerima kesalahan saat membuat perwakilan layanan, Anda mungkin perlu meningkatkan Azure CLI Anda ke versi terbaru.
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)"
Tetapkan kebijakan akses untuk perwakilan layanan.
az keyvault set-policy -n ${KEYVAULT_NAME} \ --secret-permissions get \ --spn ${SERVICE_PRINCIPAL_CLIENT_ID}
Buat dan beri label rahasia untuk digunakan Kubernetes untuk mengakses brankas kunci.
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
Menyebarkan aplikasi yang menggunakan Driver CSI
SecretProviderClass
Buat untuk memberikan akses ke rahasia ini: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
Buat pod yang menggunakan yang
SecretProviderClass
dibuat pada langkah sebelumnya: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
Periksa apakah rahasia dipasang:
kubectl exec busybox-secrets-store-inline -- ls /mnt/secrets-store/
Output harus cocok dengan yang berikut ini:
secret1
Cetak rahasia:
kubectl exec busybox-secrets-store-inline \ -- cat /mnt/secrets-store/secret1
Output harus cocok dengan yang berikut ini:
Hello
Pembersihan
Hapus instalan Penyedia Key Vault dan Driver CSI.
Menghapus instalan Penyedia Key Vault
Hapus instalan bagan Helm:
helm uninstall -n k8s-secrets-store-csi azure-csi-provider
Hapus aplikasi:
oc delete project my-application
Hapus brankas kunci Azure:
az keyvault delete -n ${KEYVAULT_NAME}
Hapus perwakilan layanan:
az ad sp delete --id ${SERVICE_PRINCIPAL_CLIENT_ID}
Hapus instalan Driver CSI Penyimpanan Rahasia Kubernetes
Hapus Driver Secrets Store CSI:
helm uninstall -n k8s-secrets-store-csi csi-secrets-store oc delete project k8s-secrets-store-csi
Hapus SecurityContextConstraints:
oc adm policy remove-scc-from-user privileged \ system:serviceaccount:k8s-secrets-store-csi:secrets-store-csi-driver