Bagikan melalui


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

  1. Masuk ke langganan Penyewa A Anda menggunakan az login perintah .

    # Set environment variable
    TENANT_A_ID=<tenant-id>
    
    az login --tenant $TENANT_A_ID
    
  2. 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

  1. 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
    
  2. 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

  1. Keluar dari langganan Penyewa A Anda menggunakan az logout perintah .

    az logout
    
  2. Masuk ke langganan Penyewa B Anda menggunakan az login perintah .

    # Set environment variable
    TENANT_B_ID=<tenant-id>
    
    az login --tenant $TENANT_B_ID
    
  3. 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

  1. 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
    
  2. Buat bus layanan dan antrean di Penyewa B menggunakan az servicebus namespace create perintah dan az 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
    
  3. 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

  1. 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)
    
  2. 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)
    
  3. 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)
    
  4. 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

  1. Keluar dari langganan Penyewa B Anda menggunakan az logout perintah .

    az logout
    
  2. Masuk ke langganan Penyewa A Anda menggunakan az login perintah .

    az login --tenant $TENANT_A_ID
    
  3. Pastikan Anda bekerja dengan langganan yang benar di Penyewa A menggunakan az account set perintah .

    az account set --subscription $TENANT_A_SUBSCRIPTION_ID
    
  4. 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

  1. Buat Kubernetes ServiceAccount baru di default namespace layanan dan teruskan ID klien identitas terkelola Anda di Penyewa B ke kubectl 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
    
  2. 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 bahwa AZURE_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

  1. 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
    
  2. 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

  1. Masuk ke langganan Penyewa A Anda menggunakan az login perintah .

    az login --tenant $TENANT_A_ID
    
  2. Pastikan Anda bekerja dengan langganan yang benar di Penyewa A menggunakan az account set perintah .

    az account set --subscription $TENANT_A_SUBSCRIPTION_ID
    
  3. 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

  1. Masuk ke langganan Penyewa B Anda menggunakan az login perintah .

    az login --tenant $TENANT_B_ID
    
  2. Pastikan Anda bekerja dengan langganan yang benar di Penyewa B menggunakan az account set perintah .

    az account set --subscription $TENANT_B_SUBSCRIPTION_ID
    
  3. 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: