Azure Kubernetes Service'te (AKS) kiracılar arası iş yükü kimliğini yapılandırma
Bu makalede, Azure Kubernetes Service'te (AKS) kiracılar arası iş yükü kimliğini yapılandırmayı öğreneceksiniz. Kiracılar arası iş yükü kimliği, AKS kümenizden başka bir kiracıdaki kaynaklara erişmenizi sağlar. Bu örnekte, bir kiracıda bir Azure Service Bus oluşturur ve başka bir kiracıdaki AKS kümesinde çalışan bir iş yükünden ileti gönderirsiniz.
İş yükü kimliği hakkında daha fazla bilgi için bkz. İş yükü kimliğine genel bakış.
Önkoşullar
Her birinin ayrı bir kiracıda yer alan iki Azure aboneliği. Bu makalede, bunları A Kiracısı ve B Kiracısı olarak adlandıracağız.
Yerel makinenizde Yüklü Azure CLI. Azure CLI yüklü değilse bkz . Azure CLI'yi yükleme.
Bash kabuk ortamı. Bu makalede Bash kabuğu söz dizimi kullanılır.
Aşağıdaki abonelik ayrıntılarına sahip olmanız gerekir:
- Kiracı A kiracı kimliği
- Kiracı A abonelik kimliği
- Kiracı B kiracı kimliği
- Kiracı B abonelik kimliği
Önemli
Ayarladığınız ortam değişkenlerini korumak için bu makalenin süresi boyunca aynı terminal penceresinde olduğunuzdan emin olun. Terminal penceresini kapatırsanız ortam değişkenlerini yeniden ayarlamanız gerekir.
A Kiracısında kaynakları yapılandırma
Kiracı A'da iş yükü kimliği ve OIDC veren etkinleştirilmiş bir AKS kümesi oluşturursunuz. Bu kümeyi, B Kiracısı'ndaki kaynaklara erişmeye çalışan bir uygulama dağıtmak için kullanırsınız.
A Kiracısında oturum açma
komutunu kullanarak Kiracı A aboneliğinizde oturum açın
az login
.# Set environment variable TENANT_A_ID=<tenant-id> az login --tenant $TENANT_A_ID
komutunu kullanarak A Kiracısı'nda doğru abonelikle çalıştığından
az account set
emin olun.# Set environment variable TENANT_A_SUBSCRIPTION_ID=<subscription-id> # Log in to your Tenant A subscription az account set --subscription $TENANT_A_SUBSCRIPTION_ID
A Kiracısında kaynak oluşturma
komutunu kullanarak AKS kümesini barındırmak için A Kiracısı'nda
az group create
bir kaynak grubu oluşturun.# Set environment variables RESOURCE_GROUP=<resource-group-name> LOCATION=<location> # Create a resource group az group create --name $RESOURCE_GROUP --location $LOCATION
A Kiracısında iş yükü kimliği ve OIDC verenin etkinleştirildiği bir AKS kümesi oluşturmak için
az aks create
komutunu kullanın.# 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
AKS kümesinden OIDC veren URL'sini alma
komutunu kullanarak A Kiracısı'ndaki kümeden OIDC veren URL'sini
az aks show
alın.OIDC_ISSUER_URL=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query "oidcIssuerProfile.issuerUrl" --output tsv)
B Kiracısında kaynakları yapılandırma
B Kiracısı'nda bir Azure Service Bus, yönetilen kimlik oluşturur ve hizmet veriyoluna ileti okuma ve yazma izinleri atar ve yönetilen kimlik ile A Kiracısı'ndaki AKS kümesi arasında güven oluşturursunuz.
B Kiracısında oturum açma
komutunu kullanarak Kiracı A aboneliğinizin oturumunu
az logout
kapatın.az logout
komutunu kullanarak Kiracı B aboneliğinizde oturum açın
az login
.# Set environment variable TENANT_B_ID=<tenant-id> az login --tenant $TENANT_B_ID
komutunu kullanarak B Kiracısı'nda doğru abonelikle çalıştığından
az account set
emin olun.# Set environment variable TENANT_B_SUBSCRIPTION_ID=<subscription-id> # Log in to your Tenant B subscription az account set --subscription $TENANT_B_SUBSCRIPTION_ID
B Kiracısında kaynak oluşturma
Komutunu kullanarak
az group create
yönetilen kimliği barındırmak için B Kiracısı'nda bir kaynak grubu oluşturun.# Set environment variables RESOURCE_GROUP=<resource-group-name> LOCATION=<location> # Create a resource group az group create --name $RESOURCE_GROUP --location $LOCATION
ve komutlarını kullanarak
az servicebus namespace create
B Kiracısında bir hizmet veri yolu veaz servicebus queue create
kuyruğu oluşturun.# 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
komutunu kullanarak
az identity create
B Kiracısı'nda kullanıcı tarafından atanan bir yönetilen kimlik oluşturun.# Set environment variable IDENTITY_NAME=${SERVICEBUS_NAME}-identity # Create a user-assigned managed identity az identity create --resource-group $RESOURCE_GROUP --name $IDENTITY_NAME
B Kiracısında kaynak kimliklerini alma ve izinleri atama
komutunu kullanarak B Kiracısında yönetilen kimliğin
az identity show
asıl kimliğini alın.# Get the user-assigned managed identity principalId PRINCIPAL_ID=$(az identity show \ --resource-group $RESOURCE_GROUP \ --name $IDENTITY_NAME \ --query principalId \ --output tsv)
komutunu kullanarak B Kiracısında yönetilen kimliğin
az identity show
istemci kimliğini alın.CLIENT_ID=$(az identity show \ --resource-group $RESOURCE_GROUP \ --name $IDENTITY_NAME \ --query clientId \ --output tsv)
komutunu kullanarak
az servicebus namespace show
B Kiracısındaki service bus ad alanının kaynak kimliğini alın.SERVICEBUS_ID=$(az servicebus namespace show \ --name $SERVICEBUS_NAME \ --resource-group $RESOURCE_GROUP \ --query id \ --output tsv)
Komutunu kullanarak service bus iletilerini okumak ve yazmak için Kiracı B izinlerinde yönetilen kimliği atayın
az role assignment create
.az role assignment create \ --role "Azure Service Bus Data Owner" \ --assignee-object-id $PRINCIPAL_ID \ --assignee-principal-type ServicePrincipal \ --scope $SERVICEBUS_ID
AKS kümesi ile yönetilen kimlik arasında güven oluşturma
Bu bölümde, A Kiracısı'ndaki AKS kümesi ile B Kiracısı'ndaki yönetilen kimlik arasında güven oluşturmak için gereken federasyon kimliği kimlik bilgilerini oluşturursunuz. A Kiracısı'ndaki AKS kümesinden OIDC veren URL'sini ve B Kiracısında yönetilen kimliğin adını kullanırsınız.
komutunu kullanarak
az identity federated-credential create
bir federasyon kimliği kimlik bilgisi oluşturun.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
, makalenin devamında A Kiracısı'nda oluşturduğunuz Kubernetes hizmet hesabının adıdır. Uygulama podunuz kimlik doğrulama isteklerinde bulunursa, bu değer yetkilendirme isteğinde olduğu gibi subject
Microsoft Entra Id'ye gönderilir. Microsoft Entra Id, bu değerin federasyon kimliği kimlik bilgilerini oluştururken ayarladığınız değerle eşleşip eşleşmediğine bağlı olarak uygunluğu belirler, bu nedenle değerin eşleştiğinden emin olmak önemlidir.
Azure Service Bus kuyruğuna ileti göndermek için uygulama dağıtma
Bu bölümde, A Kiracısı'ndaki AKS kümenize, B Kiracısı'ndaki Azure Service Bus kuyruğuna ileti gönderen bir uygulama dağıtacaksınız.
A Kiracısında oturum açın ve AKS kimlik bilgilerini alın
komutunu kullanarak B Kiracısı aboneliğinizin oturumunu
az logout
kapatın.az logout
komutunu kullanarak Kiracı A aboneliğinizde oturum açın
az login
.az login --tenant $TENANT_A_ID
komutunu kullanarak A Kiracısı'nda doğru abonelikle çalıştığından
az account set
emin olun.az account set --subscription $TENANT_A_SUBSCRIPTION_ID
komutunu kullanarak A Kiracısı'ndaki AKS kümesinin
az aks get-credentials
kimlik bilgilerini alın.az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
Azure Service Bus kuyruğuna ileti göndermek için Kubernetes kaynakları oluşturma
Ad alanında
default
yeni bir Kubernetes ServiceAccount oluşturun ve B Kiracısındaki yönetilen kimliğinizin istemci kimliğini komutunakubectl apply
geçirin. İstemci kimliği, A Kiracısı'ndaki uygulamanın kimliğini B Kiracısı'ndaki Azure Service Bus'ta doğrulamak için kullanılır.kubectl apply -f - <<EOF apiVersion: v1 kind: ServiceAccount metadata: annotations: azure.workload.identity/client-id: $CLIENT_ID name: myserviceaccount EOF
Azure Service Bus kuyruğunuza 100 ileti göndermek için ad alanında yeni bir Kubernetes İşi
default
oluşturun. Pod şablonu, önceki adımda oluşturduğunuz iş yükü kimliğini ve hizmet hesabını kullanacak şekilde yapılandırılmıştır. Ayrıca ortam değişkenininAZURE_TENANT_ID
Kiracı B kiracı kimliğine ayarlandığını unutmayın. İş yükü kimliği varsayılan olarak AKS kümesinin kiracısına ayarlandığı için bu gereklidir, bu nedenle B Kiracısının kiracı kimliğini açıkça ayarlamanız gerekir.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
Dağıtımı doğrulama
komutunu kullanarak
kubectl describe pod
podun durumunu denetleyerek podun B Kiracısındaki Azure Service Bus kuyruğuyla etkileşim kuracak şekilde doğru yapılandırıldığını doğrulayın.# 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
Uygulamanın komutunu kullanarak kiracılar arasında ileti gönderip gönderemediğini görmek için pod günlüklerini
kubectl logs
denetleyin.kubectl logs $POD_NAME
Çıkışınız aşağıdaki örnek çıkışa benzer olmalıdır:
... Adding message to batch: Hello World! Adding message to batch: Hello World! Adding message to batch: Hello World! Sent 100 messages
Not
Ek doğrulama adımı olarak, Azure portalına gidebilir ve Service Bus Gezgini'nde gönderilen iletileri görüntülemek için B Kiracısı'ndaki Azure Service Bus kuyruğuna gidebilirsiniz.
Kaynakları temizleme
Dağıtımın başarılı olduğunu doğruladıktan sonra, Azure maliyetlerinin oluşmasını önlemek için kaynakları temizleyebilirsiniz.
A Kiracısı'ndaki kaynakları silme
komutunu kullanarak Kiracı A aboneliğinizde oturum açın
az login
.az login --tenant $TENANT_A_ID
komutunu kullanarak A Kiracısı'nda doğru abonelikle çalıştığından
az account set
emin olun.az account set --subscription $TENANT_A_SUBSCRIPTION_ID
komutunu kullanarak
az group delete
Azure kaynak grubunu ve içindeki tüm kaynakları silin.az group delete --name $RESOURCE_GROUP --yes --no-wait
B Kiracısı'ndaki kaynakları silme
komutunu kullanarak Kiracı B aboneliğinizde oturum açın
az login
.az login --tenant $TENANT_B_ID
komutunu kullanarak B Kiracısı'nda doğru abonelikle çalıştığından
az account set
emin olun.az account set --subscription $TENANT_B_SUBSCRIPTION_ID
komutunu kullanarak
az group delete
Azure kaynak grubunu ve içindeki tüm kaynakları silin.az group delete --name $RESOURCE_GROUP --yes --no-wait
Sonraki adımlar
Bu makalede, Azure Kubernetes Service'te (AKS) kiracılar arası iş yükü kimliğini yapılandırmayı öğrendiniz. İş yükü kimliği hakkında daha fazla bilgi edinmek için aşağıdaki makalelere bakın:
Azure Kubernetes Service