Konfigurowanie tożsamości obciążenia między dzierżawami w usłudze Azure Kubernetes Service (AKS)
Z tego artykułu dowiesz się, jak skonfigurować tożsamość obciążenia między dzierżawami w usłudze Azure Kubernetes Service (AKS). Tożsamość obciążenia między dzierżawami umożliwia dostęp do zasobów w innej dzierżawie z klastra usługi AKS. W tym przykładzie utworzysz usługę Azure Service Bus w jednej dzierżawie i wyślesz do niej komunikaty z obciążenia uruchomionego w klastrze usługi AKS w innej dzierżawie.
Aby uzyskać więcej informacji na temat tożsamości obciążenia, zobacz Omówienie tożsamości obciążenia.
Wymagania wstępne
Dwie subskrypcje platformy Azure, z których każda należy do oddzielnej dzierżawy. W tym artykule nazywamy je dzierżawą A i dzierżawą B.
Interfejs wiersza polecenia platformy Azure zainstalowany na komputerze lokalnym. Jeśli nie masz zainstalowanego interfejsu wiersza polecenia platformy Azure, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.
Środowisko powłoki Bash. W tym artykule jest używana składnia powłoki Bash.
Musisz mieć następujące szczegóły subskrypcji:
- Identyfikator dzierżawy
- Dzierżawa Identyfikator subskrypcji
- Identyfikator dzierżawy B dzierżawy
- Identyfikator subskrypcji B dzierżawy
Ważne
Upewnij się, że pozostaniesz w tym samym oknie terminalu na czas trwania tego artykułu, aby zachować ustawione zmienne środowiskowe. Jeśli zamkniesz okno terminalu, musisz ponownie ustawić zmienne środowiskowe.
Konfigurowanie zasobów w dzierżawie A
W dzierżawie A utworzysz klaster usługi AKS z włączoną tożsamością obciążenia i wystawcą OIDC. Ten klaster służy do wdrażania aplikacji, która próbuje uzyskać dostęp do zasobów w dzierżawie B.
Zaloguj się do dzierżawy A
Zaloguj się do subskrypcji Dzierżawa A przy użyciu
az login
polecenia .# Set environment variable TENANT_A_ID=<tenant-id> az login --tenant $TENANT_A_ID
Upewnij się, że pracujesz z poprawną subskrypcją w dzierżawie A przy użyciu
az account set
polecenia .# Set environment variable TENANT_A_SUBSCRIPTION_ID=<subscription-id> # Log in to your Tenant A subscription az account set --subscription $TENANT_A_SUBSCRIPTION_ID
Tworzenie zasobów w dzierżawie A
Utwórz grupę zasobów w dzierżawie A do hostowania klastra usługi AKS przy użyciu
az group create
polecenia .# Set environment variables RESOURCE_GROUP=<resource-group-name> LOCATION=<location> # Create a resource group az group create --name $RESOURCE_GROUP --location $LOCATION
Utwórz klaster usługi AKS w dzierżawie A z tożsamością obciążenia i wystawcą OIDC włączonym
az aks create
za pomocą polecenia .# 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
Uzyskiwanie adresu URL wystawcy OIDC z klastra usługi AKS
Pobierz adres URL wystawcy OIDC z klastra w dzierżawie A przy użyciu
az aks show
polecenia .OIDC_ISSUER_URL=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query "oidcIssuerProfile.issuerUrl" --output tsv)
Konfigurowanie zasobów w dzierżawie B
W dzierżawie B utworzysz usługę Azure Service Bus, tożsamość zarządzaną i przypiszesz do niej uprawnienia do odczytu i zapisu komunikatów w usłudze Service Bus oraz ustanowić relację zaufania między tożsamością zarządzaną a klastrem AKS w dzierżawie A.
Zaloguj się do dzierżawy B
Wyloguj się z subskrypcji Dzierżawa A przy użyciu
az logout
polecenia .az logout
Zaloguj się do subskrypcji dzierżawy B przy użyciu
az login
polecenia .# Set environment variable TENANT_B_ID=<tenant-id> az login --tenant $TENANT_B_ID
Upewnij się, że pracujesz z poprawną subskrypcją w dzierżawie B przy użyciu
az account set
polecenia .# Set environment variable TENANT_B_SUBSCRIPTION_ID=<subscription-id> # Log in to your Tenant B subscription az account set --subscription $TENANT_B_SUBSCRIPTION_ID
Tworzenie zasobów w dzierżawie B
Utwórz grupę zasobów w dzierżawie B , aby hostować tożsamość zarządzaną przy użyciu
az group create
polecenia .# Set environment variables RESOURCE_GROUP=<resource-group-name> LOCATION=<location> # Create a resource group az group create --name $RESOURCE_GROUP --location $LOCATION
Utwórz magistralę usług i kolejkę w dzierżawie B przy użyciu
az servicebus namespace create
poleceń iaz 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
Utwórz tożsamość zarządzaną przypisaną przez użytkownika w dzierżawie B przy użyciu
az identity create
polecenia .# Set environment variable IDENTITY_NAME=${SERVICEBUS_NAME}-identity # Create a user-assigned managed identity az identity create --resource-group $RESOURCE_GROUP --name $IDENTITY_NAME
Pobieranie identyfikatorów zasobów i przypisywanie uprawnień w dzierżawie B
Pobierz identyfikator podmiotu zabezpieczeń tożsamości zarządzanej w dzierżawie B przy użyciu
az identity show
polecenia .# Get the user-assigned managed identity principalId PRINCIPAL_ID=$(az identity show \ --resource-group $RESOURCE_GROUP \ --name $IDENTITY_NAME \ --query principalId \ --output tsv)
Pobierz identyfikator klienta tożsamości zarządzanej w dzierżawie B przy użyciu
az identity show
polecenia .CLIENT_ID=$(az identity show \ --resource-group $RESOURCE_GROUP \ --name $IDENTITY_NAME \ --query clientId \ --output tsv)
Pobierz identyfikator zasobu przestrzeni nazw usługi Service Bus w dzierżawie
az servicebus namespace show
B przy użyciu polecenia .SERVICEBUS_ID=$(az servicebus namespace show \ --name $SERVICEBUS_NAME \ --resource-group $RESOURCE_GROUP \ --query id \ --output tsv)
Przypisz tożsamość zarządzaną w dzierżawie B uprawnienia do odczytywania i zapisywania komunikatów usługi Service Bus przy użyciu
az role assignment create
polecenia .az role assignment create \ --role "Azure Service Bus Data Owner" \ --assignee-object-id $PRINCIPAL_ID \ --assignee-principal-type ServicePrincipal \ --scope $SERVICEBUS_ID
Ustanawianie zaufania między klastrem usługi AKS a tożsamością zarządzaną
W tej sekcji utworzysz poświadczenia tożsamości federacyjnej potrzebne do ustanowienia zaufania między klastrem usługi AKS w dzierżawie A a tożsamością zarządzaną w dzierżawie B. Adres URL wystawcy OIDC jest używany z klastra usługi AKS w dzierżawie A i nazwę tożsamości zarządzanej w dzierżawie B.
Utwórz poświadczenia tożsamości federacyjnej przy użyciu
az identity federated-credential create
polecenia .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
to nazwa konta usługi Kubernetes utworzonego w dzierżawie A w dalszej części artykułu. Gdy zasobnik aplikacji wysyła żądania uwierzytelniania, ta wartość jest wysyłana do identyfikatora Entra firmy Microsoft jako subject
elementu w żądaniu autoryzacji. Identyfikator entra firmy Microsoft określa uprawnienia na podstawie tego, czy ta wartość jest zgodna z wartością ustawioną podczas tworzenia poświadczeń tożsamości federacyjnej, dlatego ważne jest, aby upewnić się, że wartość jest zgodna.
Wdrażanie aplikacji w celu wysyłania komunikatów do kolejki usługi Azure Service Bus
W tej sekcji wdrożysz aplikację w klastrze usługi AKS w dzierżawie A , która wysyła komunikaty do kolejki usługi Azure Service Bus w dzierżawie B.
Zaloguj się do dzierżawy A i uzyskaj poświadczenia usługi AKS
Wyloguj się z subskrypcji dzierżawy B przy użyciu
az logout
polecenia .az logout
Zaloguj się do subskrypcji Dzierżawa A przy użyciu
az login
polecenia .az login --tenant $TENANT_A_ID
Upewnij się, że pracujesz z poprawną subskrypcją w dzierżawie A przy użyciu
az account set
polecenia .az account set --subscription $TENANT_A_SUBSCRIPTION_ID
Pobierz poświadczenia klastra usługi AKS w dzierżawie
az aks get-credentials
A przy użyciu polecenia .az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
Tworzenie zasobów platformy Kubernetes w celu wysyłania komunikatów do kolejki usługi Azure Service Bus
Utwórz nowy konto usługi Kubernetes ServiceAccount w
default
przestrzeni nazw i przekaż identyfikator klienta tożsamości zarządzanej w dzierżawie B dokubectl apply
polecenia . Identyfikator klienta służy do uwierzytelniania aplikacji w dzierżawie A w usłudze Azure Service Bus w dzierżawie B.kubectl apply -f - <<EOF apiVersion: v1 kind: ServiceAccount metadata: annotations: azure.workload.identity/client-id: $CLIENT_ID name: myserviceaccount EOF
Utwórz nowe zadanie Kubernetes w
default
przestrzeni nazw, aby wysyłać 100 komunikatów do kolejki usługi Azure Service Bus. Szablon zasobnika jest skonfigurowany do używania tożsamości obciążenia i konta usługi utworzonego w poprzednim kroku. Należy również pamiętać, że zmiennaAZURE_TENANT_ID
środowiskowa jest ustawiona na identyfikator dzierżawy B dzierżawy. Jest to wymagane, ponieważ tożsamość obciążenia jest domyślna dla dzierżawy klastra usługi AKS, dlatego należy jawnie ustawić identyfikator dzierżawy dzierżawy 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
Weryfikowanie wdrożenia
Sprawdź, czy zasobnik jest poprawnie skonfigurowany do interakcji z kolejką usługi Azure Service Bus w dzierżawie B , sprawdzając stan zasobnika przy użyciu
kubectl describe pod
polecenia .# 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
Sprawdź dzienniki zasobnika, aby sprawdzić, czy aplikacja mogła wysyłać komunikaty między dzierżawami przy użyciu
kubectl logs
polecenia .kubectl logs $POD_NAME
Dane wyjściowe powinny wyglądać podobnie do następujących przykładowych danych wyjściowych:
... Adding message to batch: Hello World! Adding message to batch: Hello World! Adding message to batch: Hello World! Sent 100 messages
Uwaga
W ramach dodatkowej weryfikacji możesz przejść do witryny Azure Portal i przejść do kolejki usługi Azure Service Bus w dzierżawie B , aby wyświetlić komunikaty, które zostały wysłane w Eksploratorze usługi Service Bus.
Czyszczenie zasobów
Po sprawdzeniu, czy wdrożenie zakończy się pomyślnie, możesz wyczyścić zasoby, aby uniknąć ponoszenia kosztów platformy Azure.
Usuwanie zasobów w dzierżawie A
Zaloguj się do subskrypcji Dzierżawa A przy użyciu
az login
polecenia .az login --tenant $TENANT_A_ID
Upewnij się, że pracujesz z poprawną subskrypcją w dzierżawie A przy użyciu
az account set
polecenia .az account set --subscription $TENANT_A_SUBSCRIPTION_ID
Usuń grupę zasobów platformy Azure i wszystkie zasoby w niej przy użyciu
az group delete
polecenia .az group delete --name $RESOURCE_GROUP --yes --no-wait
Usuwanie zasobów w dzierżawie B
Zaloguj się do subskrypcji dzierżawy B przy użyciu
az login
polecenia .az login --tenant $TENANT_B_ID
Upewnij się, że pracujesz z poprawną subskrypcją w dzierżawie B przy użyciu
az account set
polecenia .az account set --subscription $TENANT_B_SUBSCRIPTION_ID
Usuń grupę zasobów platformy Azure i wszystkie zasoby w niej przy użyciu
az group delete
polecenia .az group delete --name $RESOURCE_GROUP --yes --no-wait
Następne kroki
W tym artykule przedstawiono sposób konfigurowania tożsamości obciążenia między dzierżawami w usłudze Azure Kubernetes Service (AKS). Aby dowiedzieć się więcej na temat tożsamości obciążenia, zobacz następujące artykuły:
Azure Kubernetes Service