Mengonfigurasi identitas beban kerja lintas penyewa di Azure Kubernetes Service (AKS)
Dalam artikel ini, Anda mempelajari cara mengonfigurasi identitas beban kerja lintas penyewa di Azure Kubernetes Service (AKS). Identitas beban kerja lintas penyewa memungkinkan Anda mengakses sumber daya di penyewa lain dari kluster AKS Anda. Dalam contoh ini, Anda membuat Azure Bus Layanan dalam satu penyewa dan mengirim pesan ke dalamnya dari beban kerja yang berjalan di kluster AKS di penyewa lain.
Untuk informasi selengkapnya tentang identitas beban kerja, lihat Ringkasan identitas beban kerja.
Prasyarat
Dua langganan Azure, masing-masing dalam penyewa terpisah. Dalam artikel ini, kami menyebutnya sebagai Penyewa A dan Penyewa B.
Azure CLI diinstal pada komputer lokal Anda. Jika Anda tidak memiliki Azure CLI yang terinstal, lihat Menginstal Azure CLI.
Lingkungan shell Bash. Artikel ini menggunakan sintaks shell Bash.
Anda harus memiliki detail langganan berikut:
- PENYEWA ID penyewa
- PENYEWA ID langganan
- ID penyewa Penyewa B
- ID langganan Penyewa B
Penting
Pastikan Anda tetap berada dalam jendela terminal yang sama selama durasi artikel ini untuk mempertahankan variabel lingkungan yang Anda tetapkan. Jika Anda menutup jendela terminal, Anda perlu mengatur variabel lingkungan lagi.
Mengonfigurasi sumber daya di Penyewa A
Di Penyewa A, Anda membuat kluster AKS dengan identitas beban kerja dan penerbit OIDC diaktifkan. Anda menggunakan kluster ini untuk menyebarkan aplikasi yang mencoba mengakses sumber daya di Penyewa B.
Masuk ke Penyewa A
Masuk ke langganan Penyewa A Anda menggunakan
az login
perintah .# Set environment variable TENANT_A_ID=<tenant-id> az login --tenant $TENANT_A_ID
Pastikan Anda bekerja dengan langganan yang benar di Penyewa A menggunakan
az account set
perintah .# Set environment variable TENANT_A_SUBSCRIPTION_ID=<subscription-id> # Log in to your Tenant A subscription az account set --subscription $TENANT_A_SUBSCRIPTION_ID
Membuat sumber daya di Penyewa A
Buat grup sumber daya di Penyewa A untuk menghosting kluster AKS menggunakan
az group create
perintah .# Set environment variables RESOURCE_GROUP=<resource-group-name> LOCATION=<location> # Create a resource group az group create --name $RESOURCE_GROUP --location $LOCATION
Buat kluster AKS di Penyewa A dengan identitas beban kerja dan penerbit OIDC diaktifkan menggunakan
az aks create
perintah .# Set environment variable CLUSTER_NAME=<cluster-name> # Create an AKS cluster az aks create \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --enable-oidc-issuer \ --enable-workload-identity \ --generate-ssh-keys
Mendapatkan URL penerbit OIDC dari kluster AKS
Dapatkan URL penerbit OIDC dari kluster di Penyewa A menggunakan
az aks show
perintah .OIDC_ISSUER_URL=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query "oidcIssuerProfile.issuerUrl" --output tsv)
Mengonfigurasi sumber daya di Penyewa B
Di Penyewa B, Anda membuat Azure Bus Layanan, identitas terkelola, dan menetapkannya izin untuk membaca dan menulis pesan ke bus layanan, dan membangun kepercayaan antara identitas terkelola dan kluster AKS di Penyewa A.
Masuk ke Penyewa B
Keluar dari langganan Penyewa A Anda menggunakan
az logout
perintah .az logout
Masuk ke langganan Penyewa B Anda menggunakan
az login
perintah .# Set environment variable TENANT_B_ID=<tenant-id> az login --tenant $TENANT_B_ID
Pastikan Anda bekerja dengan langganan yang benar di Penyewa B menggunakan
az account set
perintah .# Set environment variable TENANT_B_SUBSCRIPTION_ID=<subscription-id> # Log in to your Tenant B subscription az account set --subscription $TENANT_B_SUBSCRIPTION_ID
Membuat sumber daya di Penyewa B
Buat grup sumber daya di Penyewa B untuk menghosting identitas terkelola
az group create
menggunakan perintah .# Set environment variables RESOURCE_GROUP=<resource-group-name> LOCATION=<location> # Create a resource group az group create --name $RESOURCE_GROUP --location $LOCATION
Buat bus layanan dan antrean di Penyewa B menggunakan
az servicebus namespace create
perintah danaz servicebus queue create
.# Set environment variable SERVICEBUS_NAME=sb-crosstenantdemo-$RANDOM # Create a new service bus namespace and and return the service bus hostname SERVICEBUS_HOSTNAME=$(az servicebus namespace create \ --name $SERVICEBUS_NAME \ --resource-group $RESOURCE_GROUP \ --disable-local-auth \ --query serviceBusEndpoint \ --output tsv | sed -e 's/https:\/\///' -e 's/:443\///') # Create a new queue in the service bus namespace az servicebus queue create \ --name myqueue \ --namespace $SERVICEBUS_NAME \ --resource-group $RESOURCE_GROUP
Buat identitas terkelola yang ditetapkan pengguna di Penyewa B menggunakan
az identity create
perintah .# Set environment variable IDENTITY_NAME=${SERVICEBUS_NAME}-identity # Create a user-assigned managed identity az identity create --resource-group $RESOURCE_GROUP --name $IDENTITY_NAME
Mendapatkan ID sumber daya dan menetapkan izin di Penyewa B
Dapatkan ID utama identitas terkelola di Penyewa B menggunakan
az identity show
perintah .# Get the user-assigned managed identity principalId PRINCIPAL_ID=$(az identity show \ --resource-group $RESOURCE_GROUP \ --name $IDENTITY_NAME \ --query principalId \ --output tsv)
Dapatkan ID klien identitas terkelola di Penyewa B menggunakan
az identity show
perintah .CLIENT_ID=$(az identity show \ --resource-group $RESOURCE_GROUP \ --name $IDENTITY_NAME \ --query clientId \ --output tsv)
Dapatkan ID sumber daya namespace bus layanan di Penyewa B menggunakan
az servicebus namespace show
perintah .SERVICEBUS_ID=$(az servicebus namespace show \ --name $SERVICEBUS_NAME \ --resource-group $RESOURCE_GROUP \ --query id \ --output tsv)
Tetapkan identitas terkelola di izin Penyewa B untuk membaca dan menulis pesan bus layanan menggunakan
az role assignment create
perintah .az role assignment create \ --role "Azure Service Bus Data Owner" \ --assignee-object-id $PRINCIPAL_ID \ --assignee-principal-type ServicePrincipal \ --scope $SERVICEBUS_ID
Membangun kepercayaan antara kluster AKS dan identitas terkelola
Di bagian ini, Anda membuat kredensial identitas federasi yang diperlukan untuk membangun kepercayaan antara kluster AKS di Penyewa A dan identitas terkelola di Penyewa B. Anda menggunakan URL penerbit OIDC dari kluster AKS di Penyewa A dan nama identitas terkelola di Penyewa B.
Buat kredensial identitas federasi menggunakan
az identity federated-credential create
perintah .az identity federated-credential create \ --name $IDENTITY_NAME-$RANDOM \ --identity-name $IDENTITY_NAME \ --resource-group $RESOURCE_GROUP \ --issuer $OIDC_ISSUER_URL \ --subject system:serviceaccount:default:myserviceaccount
--subject system:serviceaccount:default:myserviceaccount
adalah nama akun layanan Kubernetes yang Anda buat di Penyewa A nanti di artikel. Ketika pod aplikasi Anda membuat permintaan autentikasi, nilai ini dikirim ke ID Microsoft Entra sebagai subject
dalam permintaan otorisasi. ID Microsoft Entra menentukan kelayakan berdasarkan apakah nilai ini cocok dengan apa yang Anda tetapkan saat Membuat kredensial identitas federasi, jadi penting untuk memastikan nilai cocok.
Menyebarkan aplikasi untuk mengirim pesan ke antrean Azure Bus Layanan
Di bagian ini, Anda menyebarkan aplikasi ke kluster AKS di Penyewa A yang mengirim pesan ke antrean Azure Bus Layanan di Penyewa B.
Masuk ke Penyewa A dan dapatkan kredensial AKS
Keluar dari langganan Penyewa B Anda menggunakan
az logout
perintah .az logout
Masuk ke langganan Penyewa A Anda menggunakan
az login
perintah .az login --tenant $TENANT_A_ID
Pastikan Anda bekerja dengan langganan yang benar di Penyewa A menggunakan
az account set
perintah .az account set --subscription $TENANT_A_SUBSCRIPTION_ID
Dapatkan kredensial untuk kluster AKS di Penyewa A menggunakan
az aks get-credentials
perintah .az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
Membuat sumber daya Kubernetes untuk mengirim pesan ke antrean Azure Bus Layanan
Buat Kubernetes ServiceAccount baru di
default
namespace layanan dan teruskan ID klien identitas terkelola Anda di Penyewa B kekubectl apply
perintah . ID klien digunakan untuk mengautentikasi aplikasi di Penyewa A ke Azure Bus Layanan di Penyewa B.kubectl apply -f - <<EOF apiVersion: v1 kind: ServiceAccount metadata: annotations: azure.workload.identity/client-id: $CLIENT_ID name: myserviceaccount EOF
Buat Pekerjaan Kubernetes baru di
default
namespace layanan untuk mengirim 100 pesan ke antrean Azure Bus Layanan Anda. Templat Pod dikonfigurasi untuk menggunakan identitas beban kerja dan akun layanan yang Anda buat di langkah sebelumnya. Perhatikan juga bahwaAZURE_TENANT_ID
variabel lingkungan diatur ke ID penyewa Penyewa B. Ini diperlukan sebagai identitas beban kerja default ke penyewa kluster AKS, jadi Anda perlu secara eksplisit mengatur ID penyewa Penyewa B.kubectl apply -f - <<EOF apiVersion: batch/v1 kind: Job metadata: name: myproducer spec: template: metadata: labels: azure.workload.identity/use: "true" spec: serviceAccountName: myserviceaccount containers: - image: ghcr.io/azure-samples/aks-app-samples/servicebusdemo:latest name: myproducer resources: {} env: - name: OPERATION_MODE value: "producer" - name: MESSAGE_COUNT value: "100" - name: AZURE_SERVICEBUS_QUEUE_NAME value: myqueue - name: AZURE_SERVICEBUS_HOSTNAME value: $SERVICEBUS_HOSTNAME - name: AZURE_TENANT_ID value: $TENANT_B_ID restartPolicy: Never EOF
Verifikasi penyebaran
Verifikasi bahwa pod dikonfigurasi dengan benar untuk berinteraksi dengan antrean Azure Bus Layanan di Penyewa B dengan memeriksa status pod menggunakan
kubectl describe pod
perintah .# Get the dynamically generated pod name POD_NAME=$(kubectl get po --selector job-name=myproducer -o jsonpath='{.items[0].metadata.name}') # Verify the tenant ID environment variable is set for Tenant B kubectl describe pod $POD_NAME | grep AZURE_TENANT_ID
Periksa log pod untuk melihat apakah aplikasi dapat mengirim pesan di seluruh penyewa menggunakan
kubectl logs
perintah .kubectl logs $POD_NAME
Output Anda akan terlihat mirip dengan contoh output berikut:
... Adding message to batch: Hello World! Adding message to batch: Hello World! Adding message to batch: Hello World! Sent 100 messages
Catatan
Sebagai langkah verifikasi tambahan, Anda dapat membuka portal Azure dan menavigasi ke antrean Azure Bus Layanan di Penyewa B untuk melihat pesan yang dikirim di Bus Layanan Explorer.
Membersihkan sumber daya
Setelah memverifikasi bahwa penyebaran berhasil, Anda dapat membersihkan sumber daya untuk menghindari timbulnya biaya Azure.
Menghapus sumber daya di Penyewa A
Masuk ke langganan Penyewa A Anda menggunakan
az login
perintah .az login --tenant $TENANT_A_ID
Pastikan Anda bekerja dengan langganan yang benar di Penyewa A menggunakan
az account set
perintah .az account set --subscription $TENANT_A_SUBSCRIPTION_ID
Hapus grup sumber daya Azure dan semua sumber daya di dalamnya menggunakan
az group delete
perintah .az group delete --name $RESOURCE_GROUP --yes --no-wait
Menghapus sumber daya di Penyewa B
Masuk ke langganan Penyewa B Anda menggunakan
az login
perintah .az login --tenant $TENANT_B_ID
Pastikan Anda bekerja dengan langganan yang benar di Penyewa B menggunakan
az account set
perintah .az account set --subscription $TENANT_B_SUBSCRIPTION_ID
Hapus grup sumber daya Azure dan semua sumber daya di dalamnya menggunakan
az group delete
perintah .az group delete --name $RESOURCE_GROUP --yes --no-wait
Langkah berikutnya
Dalam artikel ini, Anda mempelajari cara mengonfigurasi identitas beban kerja lintas penyewa di Azure Kubernetes Service (AKS). Untuk mempelajari selengkapnya tentang identitas beban kerja, lihat artikel berikut ini:
Azure Kubernetes Service