Tutorial: Menggunakan identitas beban kerja dengan aplikasi di Azure Kubernetes Service (AKS)
Azure Kubernetes Service (AKS) adalah layanan Kubernetes terkelola yang memungkinkan Anda dengan cepat menyebarkan dan mengelola kluster Kubernetes. Di tutorial ini, Anda akan:
- Sebarkan kluster AKS menggunakan Azure CLI dengan Penerbit OpenID Koneksi (OIDC) dan identitas terkelola.
- Buat Azure Key Vault dan rahasia.
- Buat ID Beban Kerja Microsoft Entra dan akun layanan Kubernetes.
- Konfigurasikan identitas terkelola untuk federasi token.
- Sebarkan beban kerja dan verifikasi autentikasi dengan identitas beban kerja.
Sebelum Anda mulai
- Tutorial ini mengasumsikan pemahaman dasar tentang konsep Kubernetes. Untuk informasi lebih, lihat konsep inti Kubernetes untuk Azure Kubernetes Service (AKS).
- Jika Anda tidak terbiasa dengan ID Beban Kerja Microsoft Entra, lihat gambaran umum ID Beban Kerja Microsoft Entra.
- Saat Anda membuat kluster AKS, grup sumber daya kedua secara otomatis dibuat untuk menyimpan sumber daya AKS. Untuk informasi selengkapnya, lihat Mengapa ada dua grup sumber daya yang dibuat dengan AKS?
Prasyarat
- Jika Anda tidak memiliki Langganan Azure, buat Akun gratis Azure sebelum memulai.
- Artikel ini memerlukan Azure CLI versi 2.47.0 atau yang lebih baru. Jika menggunakan Azure Cloud Shell, versi terbaru sudah terinstal.
- Identitas yang Anda gunakan untuk membuat kluster Anda harus memiliki izin minimum yang sesuai. Untuk informasi selengkapnya tentang akses dan identitas untuk AKS, lihat Opsi akses dan identitas untuk Azure Kubernetes Service (AKS).
- Jika Anda memiliki beberapa langganan Azure, pilih ID langganan yang sesuai tempat sumber daya harus ditagih menggunakan perintah az account set .
Buat grup sumber daya
Grup sumber daya Azure adalah grup logis tempat sumber daya Azure disebarkan dan dikelola. Saat membuat grup sumber daya, Anda diminta untuk menentukan lokasi. Lokasi ini adalah lokasi penyimpanan metadata grup sumber daya Anda dan tempat sumber daya Anda berjalan di Azure jika Anda tidak menentukan wilayah lain selama pembuatan sumber daya.
Contoh berikut ini menampilkan cara membuat grup sumber daya bernama myResourceGroup di lokasi eastus.
Mmebuat grup sumber daya menggunakan perintah buat grup az.
az group create --name myResourceGroup --location eastus
Contoh output berikut ini menyerupai pembuatan grup sumber daya yang berhasil:
{ "id": "/subscriptions/<guid>/resourceGroups/myResourceGroup", "location": "eastus", "managedBy": null, "name": "myResourceGroup", "properties": { "provisioningState": "Succeeded" }, "tags": null }
Ekspor variabel lingkungan
Untuk membantu menyederhanakan langkah-langkah untuk mengonfigurasi identitas yang diperlukan, langkah-langkah di bawah ini menentukan variabel lingkungan untuk referensi pada kluster.
Buat variabel ini menggunakan perintah berikut. Ganti nilai default untuk
RESOURCE_GROUP
, ,LOCATION
SERVICE_ACCOUNT_NAME
,SUBSCRIPTION
,USER_ASSIGNED_IDENTITY_NAME
, danFEDERATED_IDENTITY_CREDENTIAL_NAME
.export RESOURCE_GROUP="myResourceGroup" export LOCATION="westcentralus" export SERVICE_ACCOUNT_NAMESPACE="default" export SERVICE_ACCOUNT_NAME="workload-identity-sa" export SUBSCRIPTION="$(az account show --query id --output tsv)" export USER_ASSIGNED_IDENTITY_NAME="myIdentity" export FEDERATED_IDENTITY_CREDENTIAL_NAME="myFedIdentity" export KEYVAULT_NAME="azwi-kv-tutorial" export KEYVAULT_SECRET_NAME="my-secret"
Membuat kluster AKS
Buat kluster AKS menggunakan perintah az aks create dengan
--enable-oidc-issuer
parameter untuk menggunakan Pengeluar Sertifikat OIDC.az aks create -g "${RESOURCE_GROUP}" -n myAKSCluster --node-count 1 --enable-oidc-issuer --enable-workload-identity --generate-ssh-keys
Setelah beberapa menit, perintah selesai dan kembalikan informasi berformat JSON tentang kluster.
Dapatkan URL Pengeluar Sertifikat OIDC dan simpan ke variabel lingkungan menggunakan perintah berikut. Ganti nilai default untuk argumen
-n
, yang merupakan nama kluster.export AKS_OIDC_ISSUER="$(az aks show -n myAKSCluster -g "${RESOURCE_GROUP}" --query "oidcIssuerProfile.issuerUrl" -otsv)"
Variabel harus berisi URL Penerbit yang mirip dengan contoh berikut:
https://eastus.oic.prod-aks.azure.com/00000000-0000-0000-0000-000000000000/00000000-0000-0000-0000-000000000000/
Secara default, Penerbit diatur untuk menggunakan URL
https://{region}.oic.prod-aks.azure.com
dasar , di mana nilai untuk{region}
mencocokkan lokasi tempat kluster AKS disebarkan.
Membuat Azure Key Vault dan rahasia
Buat Azure Key Vault dalam grup sumber daya yang Anda buat dalam tutorial ini menggunakan perintah az keyvault create .
az keyvault create --resource-group "${RESOURCE_GROUP}" --location "${LOCATION}" --name "${KEYVAULT_NAME}"
Keluaran dari perintah ini menunjukkan properti key vault yang baru dibuat. Perhatikan dua properti yang tercantum di bawah:
Name
: Nama vault yang Anda berikan ke--name
parameter .vaultUri
: Dalam contoh, ini adalahhttps://<your-unique-keyvault-name>.vault.azure.net/
. Aplikasi yang menggunakan brankas Anda melalui REST API-nya harus menggunakan URI ini.
Pada titik ini, akun Azure Anda adalah satu-satunya yang berwenang untuk melakukan operasi apa pun di brankas baru ini.
Tambahkan rahasia ke vault menggunakan perintah az keyvault secret set . Kata sandi adalah nilai yang Anda tentukan untuk variabel
KEYVAULT_SECRET_NAME
lingkungan dan menyimpan nilai Hello! di dalamnya.az keyvault secret set --vault-name "${KEYVAULT_NAME}" --name "${KEYVAULT_SECRET_NAME}" --value 'Hello!'
Tambahkan URL Key Vault ke variabel
KEYVAULT_URL
lingkungan menggunakan perintah az keyvault show .export KEYVAULT_URL="$(az keyvault show -g "${RESOURCE_GROUP}" -n ${KEYVAULT_NAME} --query properties.vaultUri -o tsv)"
Membuat identitas terkelola dan memberikan izin untuk mengakses rahasia
Atur langganan tertentu sebagai langganan aktif saat ini menggunakan perintah az account set .
az account set --subscription "${SUBSCRIPTION}"
Buat identitas terkelola menggunakan perintah az identity create .
az identity create --name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}" --location "${LOCATION}" --subscription "${SUBSCRIPTION}"
Atur kebijakan akses untuk identitas terkelola untuk mengakses rahasia Key Vault menggunakan perintah berikut.
export USER_ASSIGNED_CLIENT_ID="$(az identity show --resource-group "${RESOURCE_GROUP}" --name "${USER_ASSIGNED_IDENTITY_NAME}" --query 'clientId' -otsv)"
az keyvault set-policy --name "${KEYVAULT_NAME}" --secret-permissions get --spn "${USER_ASSIGNED_CLIENT_ID}"
Membuat akun layanan Kubernetes
Buat akun layanan Kubernetes dan anotasi dengan ID klien identitas terkelola yang dibuat pada langkah sebelumnya menggunakan perintah az aks get-credentials . Ganti nilai default untuk nama kluster dan nama grup sumber daya.
az aks get-credentials -n myAKSCluster -g "${RESOURCE_GROUP}"
Salin input multibaris berikut ke terminal Anda dan jalankan perintah untuk membuat akun layanan.
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: ServiceAccount metadata: annotations: azure.workload.identity/client-id: ${USER_ASSIGNED_CLIENT_ID} name: ${SERVICE_ACCOUNT_NAME} namespace: ${SERVICE_ACCOUNT_NAMESPACE} EOF
Output berikut menyerupan pembuatan identitas yang berhasil:
Serviceaccount/workload-identity-sa created
Menetapkan kredensial identitas federasi
Buat kredensial identitas gabungan antara identitas terkelola, penerbit akun layanan, dan subjek menggunakan perintah az identity federated-credential create .
az identity federated-credential create --name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} --identity-name ${USER_ASSIGNED_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP} --issuer ${AKS_OIDC_ISSUER} --subject system:serviceaccount:${SERVICE_ACCOUNT_NAMESPACE}:${SERVICE_ACCOUNT_NAME}
Catatan
Dibutuhkan beberapa detik agar kredensial identitas federasi disebarluaskan setelah awalnya ditambahkan. Jika permintaan token segera tersedia setelah menambahkan kredensial identitas federasi, Anda mungkin mengalami kegagalan selama beberapa menit, karena cache diisi di direktori dengan data lama. Untuk menghindari masalah ini, Anda dapat menambahkan sedikit penundaan setelah menambahkan kredensial identitas federasi.
Menyebarkan beban kerja
Sebarkan pod yang mereferensikan akun layanan yang dibuat pada langkah sebelumnya menggunakan perintah berikut.
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Pod metadata: name: quick-start namespace: ${SERVICE_ACCOUNT_NAMESPACE} labels: azure.workload.identity/use: "true" spec: serviceAccountName: ${SERVICE_ACCOUNT_NAME} containers: - image: ghcr.io/azure/azure-workload-identity/msal-go name: oidc env: - name: KEYVAULT_URL value: ${KEYVAULT_URL} - name: SECRET_NAME value: ${KEYVAULT_SECRET_NAME} nodeSelector: kubernetes.io/os: linux EOF
Output berikut menyerupan pembuatan pod yang berhasil:
pod/quick-start created
Periksa apakah semua properti disuntikkan dengan benar dengan webhook menggunakan perintah kubectl describe .
kubectl describe pod quick-start
Verifikasi pod bisa mendapatkan token dan mengakses rahasia dari Key Vault menggunakan perintah log kubectl.
kubectl logs quick-start
Output berikut menyerupan akses token yang berhasil:
I1013 22:49:29.872708 1 main.go:30] "successfully got secret" secret="Hello!"
Membersihkan sumber daya
Anda mungkin ingin meninggalkan sumber daya ini di tempat. Jika Anda tidak lagi memerlukan sumber daya ini, gunakan perintah berikut untuk menghapusnya.
Hapus pod menggunakan
kubectl delete pod
perintah .kubectl delete pod quick-start
Hapus akun layanan menggunakan
kubectl delete sa
perintah .kubectl delete sa "${SERVICE_ACCOUNT_NAME}" --namespace "${SERVICE_ACCOUNT_NAMESPACE}"
Hapus grup sumber daya Azure dan semua sumber dayanya menggunakan perintah az group delete .
az group delete --name "${RESOURCE_GROUP}"
Langkah berikutnya
Dalam tutorial ini, Anda menyebarkan kluster Kubernetes dan kemudian menyebarkan aplikasi kontainer sederhana untuk menguji bekerja dengan ID Beban Kerja Microsoft Entra.
Tutorial ini untuk tujuan pengantar. Untuk panduan tentang cara membuat solusi lengkap dengan AKS untuk produksi, lihat panduan solusi AKS.