Gunakan Penyedia Azure Key Vault untuk Secrets Store CSI Driver di kluster AKS
Penyedia Azure Key Vault untuk Secrets Store CSI Driver memungkinkan integrasi Azure Key Vault sebagai penyimpanan rahasia dengan kluster Azure Kubernetes Service (AKS) melalui volume CSI.
Prasyarat
- Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum Anda memulai.
- Sebelum memulai, pastikan versi Azure CLI Anda adalah 2.30.0 atau yang lebih baru. Jika ini adalah versi sebelumnya, instal versi terbaru.
- Jika membatasi Ingress ke kluster, pastikan Port 9808 dan 8095 terbuka.
Versi Kubernetes yang didukung
Versi Kube minimum yang direkomendasikan didasarkan pada jendela dukungan versi Kube yang bergulir. Pastikan Anda menjalankan versi N-2 atau yang lebih baru.
Fitur
- Memasang rahasia, kunci, dan sertifikat ke pod dengan menggunakan volume CSI
- Mendukung volume sebaris CSI
- Mendukung pemasangan beberapa rahasia menyimpan objek sebagai volume tunggal
- Mendukung portabilitas pod dengan CRD
SecretProviderClass - Mendukung kontainer Windows
- Menyinkronkan dengan rahasia Kubernetes
- Mendukung rotasi otomatis konten yang dipasang dan rahasia Kube yang disinkronkan
Buat kluster AKS dengan Penyedia Azure Key Vault Provider untuk dukungan Secrets Store CSI Driver
Pertama, buat grup sumber daya Azure:
az group create -n myResourceGroup -l eastus2
Untuk membuat kluster AKS dengan kemampuan Penyedia Azure Key Vault untuk Secrets Store CSI Driver, gunakan perintah az aks create dengan add-on azure-keyvault-secrets-provider.
az aks create -n myAKSCluster -g myResourceGroup --enable-addons azure-keyvault-secrets-provider --enable-managed-identity
Identitas terkelola yang ditetapkan pengguna, bernama azurekeyvaultsecretsprovider-*, dibuat oleh add-on untuk tujuan mengakses sumber daya Azure. Contoh berikut menggunakan identitas ini untuk menghubungkan ke brankas kunci Azure tempat rahasia akan disimpan, tetapi Anda juga dapat menggunakan metode akses identitas lainnya. Perhatikan clientId identitas dalam output:
...,
"addonProfiles": {
"azureKeyvaultSecretsProvider": {
...,
"identity": {
"clientId": "<client-id>",
...
}
}
Buat kluster AKS yang ada dengan Penyedia Azure Key Vault untuk dukungan Secrets Store CSI Driver
Untuk meningkatkan kluster AKS yang ada dengan Penyedia Azure Key Vault untuk kemampuan Secrets Store CSI Driver, gunakan perintah az aks enable-addons dengan add-on azure-keyvault-secrets-provider:
az aks enable-addons --addons azure-keyvault-secrets-provider --name myAKSCluster --resource-group myResourceGroup
Seperti yang disebutkan di bagian sebelumnya, add-on membuat identitas terkelola yang ditetapkan pengguna yang dapat digunakan untuk mengautentikasi ke brankas kunci Azure Anda.
Memverifikasi Penyedia Azure Key Vault untuk instalasi Secrets Store CSI Driver
Perintah sebelumnya menginstal Secrets Store CSI Driver dan Penyedia Azure Key Vault di node Anda. Verifikasi bahwa instalasi telah selesai dengan mencantumkan semua pod yang memiliki label secrets-store-csi-driver dan secrets-store-provider-azure di namespace kube-system, dan pastikan bahwa output Anda terlihat mirip dengan output yang ditampilkan di sini:
kubectl get pods -n kube-system -l 'app in (secrets-store-csi-driver, secrets-store-provider-azure)'
NAME READY STATUS RESTARTS AGE
aks-secrets-store-csi-driver-4vpkj 3/3 Running 2 4m25s
aks-secrets-store-csi-driver-ctjq6 3/3 Running 2 4m21s
aks-secrets-store-csi-driver-tlvlq 3/3 Running 2 4m24s
aks-secrets-store-provider-azure-5p4nb 1/1 Running 0 4m21s
aks-secrets-store-provider-azure-6pqmv 1/1 Running 0 4m24s
aks-secrets-store-provider-azure-f5qlm 1/1 Running 0 4m25s
Pastikan bahwa pod Driver CSI Secrets Store dan pod Azure Penyedia Secrets Store berjalan di setiap node di kumpulan node cluster Anda.
Membuat atau menggunakan brankas kunci Azure yang ada
Selain kluster AKS, Anda memerlukan sumber daya brankas kunci Azure yang menyimpan konten rahasia. Ingatlah bahwa nama key vault harus unik secara global.
az keyvault create -n <keyvault-name> -g myResourceGroup -l eastus2
brankas kunci Azure Anda dapat menyimpan kunci, rahasia, dan sertifikat. Dalam contoh ini, Anda akan mengatur rahasia teks biasa yang disebut ExampleSecret:
az keyvault secret set --vault-name <keyvault-name> -n ExampleSecret --value MyAKSExampleSecret
Perhatikan properti berikut untuk digunakan di bagian berikutnya:
- Nama objek rahasia di brankas kunci
- Jenis objek (rahasia, kunci, atau sertifikat)
- Nama sumber daya brankas kunci Azure Anda
- ID penyewa Azure pada langganan
Berikan identitas untuk mengakses brankas kunci Azure
Driver CSI Secrets Store memungkinkan metode berikut untuk mengakses brankas kunci Azure:
- Identitas pod Azure Active Directory
- Identitas terkelola yang ditetapkan pengguna atau ditetapkan sistem
Ikuti petunjuk di Berikan identitas untuk mengakses Penyedia Azure Key Vault untuk Secrets Store CSI Driver untuk metode yang Anda pilih.
Validasi rahasia
Setelah pod dimulai, konten yang dipasang di jalur volume yang Anda tentukan di YAML penyebaran akan tersedia.
## show secrets held in secrets-store
kubectl exec busybox-secrets-store-inline -- ls /mnt/secrets-store/
## print a test secret 'ExampleSecret' held in secrets-store
kubectl exec busybox-secrets-store-inline -- cat /mnt/secrets-store/ExampleSecret
Mendapatkan sertifikat dan kunci
Desain Azure Key Vault membuat perbedaan tajam antara kunci, rahasia, dan sertifikat. Fitur sertifikat layanan Key Vault dirancang untuk memanfaatkan kemampuan kunci dan rahasianya. Saat sertifikat brankas kunci dibuat, kunci dan rahasia yang dapat diatasi juga dibuat dengan nama yang sama. Kunci memungkinkan operasi kunci, dan rahasia memungkinkan pengambilan nilai sertifikat sebagai rahasia.
Sertifikat brankas kunci juga berisi metadata sertifikat x509 publik. Gudang kunci menyimpan komponen publik dan privat dari sertifikat Anda secara rahasia. Anda dapat memperoleh setiap komponen individu dengan menentukan objectType di SecretProviderClass. Tabel berikut menunjukkan objek mana yang dipetakan ke berbagai sumber daya yang terkait dengan sertifikat Anda:
| Object | Mengembalikan nilai | Mengembalikan seluruh rantai sertifikat |
|---|---|---|
key |
Kunci publik, dalam format Privacy Enhanced Mail (PEM) | T/A |
cert |
Sertifikat, dalam format PEM | Tidak |
secret |
Kunci privat dan sertifikat, dalam format PEM | Ya |
Nonaktifkan Penyedia Azure Key Vault untuk Secrets Store CSI Driver di kluster AKS yang ada
Catatan
Sebelum Anda menonaktifkan pengaya, pastikan tidak ada SecretProviderClass yang digunakan. Mencoba menonaktifkan pengaya saat SecretProviderClass ada akan menghasilkan kesalahan.
Untuk menonaktifkan kapabilitas Penyedia Azure Key Vault untuk Driver Secrets Store CSI di kluster yang ada, gunakan perintah az aks disable-addons dengan bendera azure-keyvault-secrets-provider:
az aks disable-addons --addons azure-keyvault-secrets-provider -g myResourceGroup -n myAKSCluster
Catatan
Jika add-on dinonaktifkan, beban kerja yang ada tidak akan mengalami masalah dan tidak akan melihat pembaruan apa pun di rahasia yang dipasang. Jika pod dimulai ulang atau pod baru dibuat sebagai bagian dari peristiwa perluasan, pod akan gagal dimulai karena driver tidak lagi berjalan.
Opsi konfigurasi tambahan.
Mengaktifkan dan mennonaktifkan rotasi otomatis
Catatan
Saat Penyedia Azure Key Vault untuk Secrets Store CSI Driver diaktifkan, penyedia akan memperbarui pemasangan pod dan rahasia Kubernetes yang ditentukan di bidang secretObjects pada SecretProviderClass. Penyedia melakukannya dengan polling untuk perubahan secara berkala, berdasarkan interval polling rotasi yang telah Anda tetapkan. Interval polling rotasi defaultnya adalah 2 menit.
Catatan
Ketika rahasia diperbarui di penyimpanan rahasia eksternal setelah penyebaran pod awal, Rahasia Kubernetes dan mount pod akan diperbarui secara berkala tergantung pada bagaimana aplikasi menggunakan data rahasia.
Pasang Rahasia Kubernetes sebagai volume: Gunakan fitur rahasia rotasi otomatis dan Sync K8s dari Driver CSI Secret Store. Aplikasi perlu memperhatikan perubahan dari volume Rahasia Kubernetes yang dipasang. Ketika Rahasia Kubernetes diperbarui oleh Driver CSI, konten volume yang sesuai akan diperbarui secara otomatis.
Aplikasi membaca data dari sistem file kontainer: Gunakan fitur rotasi Driver CSI Secret Store. Aplikasi perlu memperhatikan perubahan file dari volume yang dipasang oleh driver CSI.
Gunakan Rahasia Kubernetes untuk variabel lingkungan: Mulai ulang pod untuk mendapatkan rahasia terbaru sebagai variabel lingkungan. Gunakan alat seperti Reloader untuk melihat perubahan pada Rahasia Kubernetes yang disinkronkan dan melakukan peningkatan bergulir pada pod.
Untuk mengaktifkan rotasi otomatis rahasia, gunakan tanda enable-secret-rotation saat Anda membuat kluster:
az aks create -n myAKSCluster2 -g myResourceGroup --enable-addons azure-keyvault-secrets-provider --enable-secret-rotation
Atau perbarui kluster yang ada dengan add-on yang diaktifkan:
az aks addon update -g myResourceGroup -n myAKSCluster2 -a azure-keyvault-secrets-provider --enable-secret-rotation
Untuk menentukan interval rotasi kustom, gunakan tanda rotation-poll-interval:
az aks addon update -g myResourceGroup -n myAKSCluster2 -a azure-keyvault-secrets-provider --enable-secret-rotation --rotation-poll-interval 5m
Untuk menonaktifkan rotasi otomatis, gunakan tanda disable-secret-rotation:
az aks addon update -g myResourceGroup -n myAKSCluster2 -a azure-keyvault-secrets-provider --disable-secret-rotation
Sinkronkan konten yang dipasang dengan rahasia Kube
Terkadang Anda mungkin ingin membuat rahasia Kubernetes untuk mencerminkan konten yang dipasang.
Saat Anda membuat SecretProviderClass, gunakan bidang secretObjects untuk menentukan status rahasia Kubernetes yang diinginkan, seperti yang ditunjukkan pada contoh berikut.
Catatan
Contoh di sini tidak lengkap. Anda harus mengubahnya untuk mendukung metode akses yang Anda pilih ke identitas brankas kunci Anda.
Rahasia akan disinkronkan hanya setelah Anda memulai pod untuk memasangnya. Hanya mengandalkan sinkronisasi dengan fitur rahasia Kubernetes tidak berfungsi. Ketika semua Pod yang menggunakan rahasia dihapus, rahasia Kubernetes juga akan dihapus.
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
name: azure-sync
spec:
provider: azure
secretObjects: # [OPTIONAL] SecretObjects defines the desired state of synced Kubernetes secret objects
- data:
- key: username # data field to populate
objectName: foo1 # name of the mounted content to sync; this could be the object name or the object alias
secretName: foosecret # name of the Kubernetes secret object
type: Opaque # type of Kubernetes secret object (for example, Opaque, kubernetes.io/tls)
Catatan
Pastikan bahwa objectName di bidang secretObjects cocok dengan nama file konten yang dipasang. Jika Anda menggunakan objectAlias sebagai gantinya, hal ini harus cocok dengan alias objek.
Mengatur variabel lingkungan untuk mereferensikan rahasia Kubernetes
Setelah membuat rahasia Kubernetes, Anda dapat mereferensikannya dengan mengatur variabel lingkungan di pod Anda, seperti yang ditunjukkan pada contoh kode berikut:
Catatan
Contoh di sini tidak lengkap. Anda harus mengubahnya untuk mendukung akses identitas brankas kunci Azure yang telah Anda pilih.
kind: Pod
apiVersion: v1
metadata:
name: busybox-secrets-store-inline
spec:
containers:
- name: busybox
image: k8s.gcr.io/e2e-test-images/busybox:1.29-1
command:
- "/bin/sleep"
- "10000"
volumeMounts:
- name: secrets-store01-inline
mountPath: "/mnt/secrets-store"
readOnly: true
env:
- name: SECRET_USERNAME
valueFrom:
secretKeyRef:
name: foosecret
key: username
volumes:
- name: secrets-store01-inline
csi:
driver: secrets-store.csi.k8s.io
readOnly: true
volumeAttributes:
secretProviderClass: "azure-sync"
Metrik
Penyedia Azure Key Vault
Metrik disajikan melalui Prometheus dari port 8898, tetapi port ini tidak diekspos di luar pod secara default. Akses metrik melalui localhost dengan menggunakan kubectl port-forward:
kubectl port-forward -n kube-system ds/aks-secrets-store-provider-azure 8898:8898 &
curl localhost:8898/metrics
Tabel berikut mencantumkan metrik yang disediakan oleh Penyedia Azure Key Vault untuk Secrets Store CSI Driver:
| Metrik | Deskripsi | Tag |
|---|---|---|
| keyvault_request | Distribusi berapa lama waktu yang dibutuhkan untuk keluar dari brankas kunci | os_type=<runtime os>, provider=azure, object_name=<keyvault object name>, object_type=<keyvault object type>, error=<error if failed> |
| grpc_request | Distribusi berapa lama waktu yang dibutuhkan untuk permintaan gRPC | os_type=<runtime os>, provider=azure, grpc_method=<rpc full method>, grpc_code=<grpc status code>, grpc_message=<grpc status message> |
Secrets Store CSI Driver
Metrik dilayani melalui Prometheus dari port 8095, tetapi port ini tidak terbuka di luar pod secara default. Akses metrik melalui localhost dengan menggunakan kubectl port-forward:
kubectl port-forward -n kube-system ds/aks-secrets-store-csi-driver 8095:8095 &
curl localhost:8095/metrics
Tabel berikut mencantumkan metrik yang disediakan oleh Secrets Store CSI Driver:
| Metrik | Deskripsi | Tag |
|---|---|---|
| total_node_publish | Jumlah total permintaan pemasangan volume yang berhasil | os_type=<runtime os>, provider=<provider name> |
| total_node_unpublish | Jumlah total permintaan pelepasan volume yang berhasil | os_type=<runtime os> |
| total_node_publish_error | Jumlah total kesalahan dengan permintaan pemasangan volume | os_type=<runtime os>, provider=<provider name>, error_type=<error code> |
| total_node_unpublish_error | Jumlah total kesalahan dengan permintaan pelepasan volume | os_type=<runtime os> |
| total_sync_k8s_secret | Jumlah total rahasia Kubernetes yang disinkronkan | os_type=<runtime os, provider=<provider name> |
| sync_k8s_secret_duration_sec | Distribusi berapa lama waktu yang dibutuhkan untuk menyinkronkan rahasia Kubernetes | os_type=<runtime os> |
| total_rotation_reconcile | Jumlah total rotasi yang direkonsiliasi | os_type=<runtime os>, rotated=<true or false> |
| total_rotation_reconcile_error | Jumlah total rotasi yang direkonsiliasi dengan kesalahan | os_type=<runtime os>, rotated=<true or false>, error_type=<error code> |
| total_rotation_reconcile_error | Distribusi berapa lama waktu yang dibutuhkan untuk merotasi konten penyimpanan rahasia untuk pod | os_type=<runtime os> |
Langkah berikutnya
Setelah Anda mempelajari cara menggunakan Penyedia Azure Key Vault untuk Secrets Store CSI Driver dengan kluster AKS, lihat Mengaktifkan driver CSI untuk Azure Disk dan Azure Files di AKS .