Udostępnij za pośrednictwem


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

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

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

  1. Wyloguj się z subskrypcji Dzierżawa A przy użyciu az logout polecenia .

    az logout
    
  2. 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
    
  3. 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

  1. 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
    
  2. Utwórz magistralę usług i kolejkę w dzierżawie B przy użyciu az servicebus namespace create poleceń i 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. 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

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

  1. Wyloguj się z subskrypcji dzierżawy B przy użyciu az logout polecenia .

    az logout
    
  2. Zaloguj się do subskrypcji Dzierżawa A przy użyciu az login polecenia .

    az login --tenant $TENANT_A_ID
    
  3. 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
    
  4. 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

  1. 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 do kubectl 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
    
  2. 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 zmienna AZURE_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

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

  1. Zaloguj się do subskrypcji Dzierżawa A przy użyciu az login polecenia .

    az login --tenant $TENANT_A_ID
    
  2. 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
    
  3. 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

  1. Zaloguj się do subskrypcji dzierżawy B przy użyciu az login polecenia .

    az login --tenant $TENANT_B_ID
    
  2. 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
    
  3. 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: