Jak zainstalować kontroler ruchu przychodzącego usługi Application Gateway (AGIC) przy użyciu nowej usługi Application Gateway

W poniższych instrukcjach przyjęto założenie, że kontroler ruchu przychodzącego usługi Application Gateway (AGIC) zostanie zainstalowany w środowisku bez istniejących składników.

Wymagane narzędzia wiersza polecenia

Zalecamy użycie usługi Azure Cloud Shell dla wszystkich poniższych operacji wiersza polecenia. Uruchom powłokę z shell.azure.com lub klikając link:

Alternatywnie uruchom usługę Cloud Shell z witryny Azure Portal przy użyciu następującej ikony:

Portal launch

Usługa Azure Cloud Shell ma już wszystkie niezbędne narzędzia. Jeśli zdecydujesz się korzystać z innego środowiska, upewnij się, że są zainstalowane następujące narzędzia wiersza polecenia:

Tworzenie tożsamości

Wykonaj poniższe kroki, aby utworzyć obiekt jednostki usługi Entra firmy Microsoft. appIdZapisz wartości , passwordi objectId — te wartości będą używane w poniższych krokach.

  1. Tworzenie jednostki usługi AD (przeczytaj więcej na temat kontroli dostępu opartej na rolach platformy Azure):

    az ad sp create-for-rbac --role Contributor --scopes /subscriptions/mySubscriptionID -o json > auth.json
    appId=$(jq -r ".appId" auth.json)
    password=$(jq -r ".password" auth.json)
    

    Wartości appId i password z danych wyjściowych JSON będą używane w poniższych krokach

  2. Użyj polecenia appId z danych wyjściowych poprzedniego polecenia, aby uzyskać id nazwę nowej jednostki usługi:

    objectId=$(az ad sp show --id $appId --query "id" -o tsv)
    

    Dane wyjściowe tego polecenia to objectId, które będą używane w poniższym szablonie usługi Azure Resource Manager

  3. Utwórz plik parametrów, który będzie używany we wdrożeniu szablonu usługi Azure Resource Manager później.

    cat <<EOF > parameters.json
    {
      "aksServicePrincipalAppId": { "value": "$appId" },
      "aksServicePrincipalClientSecret": { "value": "$password" },
      "aksServicePrincipalObjectId": { "value": "$objectId" },
      "aksEnableRBAC": { "value": false }
    }
    EOF
    

    Aby wdrożyć klaster z włączoną kontrolą dostępu opartą na rolach platformy Kubernetes, ustaw pole na aksEnableRBACtrue

Wdrażanie składników

Ten krok spowoduje dodanie następujących składników do subskrypcji:

  1. Pobierz szablon usługi Azure Resource Manager i zmodyfikuj go zgodnie z potrzebami.

    wget https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/deploy/azuredeploy.json -O template.json
    
  2. Wdróż szablon usługi Azure Resource Manager przy użyciu interfejsu wiersza polecenia platformy Azure. Wdrożenie może potrwać do 5 minut.

    resourceGroupName="MyResourceGroup"
    location="westus2"
    deploymentName="ingress-appgw"
    
    # create a resource group
    az group create -n $resourceGroupName -l $location
    
    # modify the template as needed
    az deployment group create \
            -g $resourceGroupName \
            -n $deploymentName \
            --template-file template.json \
            --parameters parameters.json
    
  3. Po zakończeniu wdrażania pobierz dane wyjściowe wdrożenia do pliku o nazwie deployment-outputs.json.

    az deployment group show -g $resourceGroupName -n $deploymentName --query "properties.outputs" -o json > deployment-outputs.json
    

Konfigurowanie kontrolera ruchu przychodzącego usługi Application Gateway

Zgodnie z instrukcjami w poprzedniej sekcji utworzyliśmy i skonfigurowaliśmy nowy klaster usługi AKS i usługę Application Gateway. Teraz możemy wdrożyć przykładową aplikację i kontroler ruchu przychodzącego w nowej infrastrukturze Kubernetes.

Konfigurowanie poświadczeń platformy Kubernetes

Aby wykonać poniższe kroki, musimy skonfigurować polecenie kubectl , którego użyjemy do nawiązania połączenia z nowym klastrem Kubernetes. Usługa Cloud Shell została kubectl już zainstalowana. Użyjemy az interfejsu wiersza polecenia, aby uzyskać poświadczenia dla platformy Kubernetes.

Pobierz poświadczenia dla nowo wdrożonego usługi AKS (przeczytaj więcej):

# use the deployment-outputs.json created after deployment to get the cluster name and resource group name
aksClusterName=$(jq -r ".aksClusterName.value" deployment-outputs.json)
resourceGroupName=$(jq -r ".resourceGroupName.value" deployment-outputs.json)

az aks get-credentials --resource-group $resourceGroupName --name $aksClusterName

Instalowanie tożsamości pod firmy Microsoft Entra

Usługa Microsoft Entra Pod Identity zapewnia dostęp oparty na tokenach do usługi Azure Resource Manager (ARM).

Tożsamość zasobnika firmy Microsoft doda następujące składniki do klastra Kubernetes:

Aby zainstalować tożsamość pod firmy Microsoft w klastrze:

  • Klaster usługi AKS z włączoną kontrolą dostępu opartą na rolach platformy Kubernetes

    kubectl create -f https://raw.githubusercontent.com/Azure/aad-pod-identity/master/deploy/infra/deployment-rbac.yaml
    
  • Usługa Kubernetes RBAC wyłączyła klaster usługi AKS

    kubectl create -f https://raw.githubusercontent.com/Azure/aad-pod-identity/master/deploy/infra/deployment.yaml
    

Instalowanie narzędzia Helm

Helm jest menedżerem pakietów dla platformy Kubernetes. Użyjemy go do zainstalowania application-gateway-kubernetes-ingress pakietu.

Uwaga

Jeśli używasz usługi Cloud Shell, nie musisz instalować programu Helm. Usługa Azure Cloud Shell jest dostarczana z programem Helm w wersji 3. Pomiń pierwszy krok i po prostu dodaj repozytorium AGIC Helm.

  1. Zainstaluj program Helm i uruchom następujące polecenie, aby dodać application-gateway-kubernetes-ingress pakiet helm:

    • Klaster usługi AKS z włączoną kontrolą dostępu opartą na rolach platformy Kubernetes

      kubectl create serviceaccount --namespace kube-system tiller-sa
      kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller-sa
      helm init --tiller-namespace kube-system --service-account tiller-sa
      
    • Usługa Kubernetes RBAC wyłączyła klaster usługi AKS

      helm init
      
  2. Dodaj repozytorium AGIC Helm:

    helm repo add application-gateway-kubernetes-ingress https://appgwingress.blob.core.windows.net/ingress-azure-helm-package/
    helm repo update
    

Instalowanie wykresu helm kontrolera ruchu przychodzącego

  1. Użyj utworzonego deployment-outputs.json powyżej pliku i utwórz następujące zmienne.

    applicationGatewayName=$(jq -r ".applicationGatewayName.value" deployment-outputs.json)
    resourceGroupName=$(jq -r ".resourceGroupName.value" deployment-outputs.json)
    subscriptionId=$(jq -r ".subscriptionId.value" deployment-outputs.json)
    identityClientId=$(jq -r ".identityClientId.value" deployment-outputs.json)
    identityResourceId=$(jq -r ".identityResourceId.value" deployment-outputs.json)
    
  2. Pobierz plik helm-config.yaml, który skonfiguruje program AGIC:

    wget https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/docs/examples/sample-helm-config.yaml -O helm-config.yaml
    

    Możesz też skopiować poniższy plik YAML:

    # This file contains the essential configs for the ingress controller helm chart
    
    # Verbosity level of the App Gateway Ingress Controller
    verbosityLevel: 3
    
    ################################################################################
    # Specify which application gateway the ingress controller will manage
    #
    appgw:
        subscriptionId: <subscriptionId>
        resourceGroup: <resourceGroupName>
        name: <applicationGatewayName>
    
        # Setting appgw.shared to "true" will create an AzureIngressProhibitedTarget CRD.
        # This prohibits AGIC from applying config for any host/path.
        # Use "kubectl get AzureIngressProhibitedTargets" to view and change this.
        shared: false
    
    ################################################################################
    # Specify which kubernetes namespace the ingress controller will watch
    # Default value is "default"
    # Leaving this variable out or setting it to blank or empty string would
    # result in Ingress Controller observing all acessible namespaces.
    #
    # kubernetes:
    #   watchNamespace: <namespace>
    
    ################################################################################
    # Specify the authentication with Azure Resource Manager
    #
    # Two authentication methods are available:
    # - Option 1: AAD-Pod-Identity (https://github.com/Azure/aad-pod-identity)
    armAuth:
        type: aadPodIdentity
        identityResourceID: <identityResourceId>
        identityClientID:  <identityClientId>
    
    ## Alternatively you can use Service Principal credentials
    # armAuth:
    #    type: servicePrincipal
    #    secretJSON: <<Generate this value with: "az ad sp create-for-rbac --subscription <subscription-uuid> --role Contributor --sdk-auth | base64 -w0" >>
    
    ################################################################################
    # Specify if the cluster is Kubernetes RBAC enabled or not
    rbac:
        enabled: false # true/false
    
    # Specify aks cluster related information. THIS IS BEING DEPRECATED.
    aksClusterConfiguration:
        apiServerAddress: <aks-api-server-address>
    
  3. Edytuj nowo pobrane pliki helm-config.yaml i wypełnij sekcje appgw i armAuth.

    sed -i "s|<subscriptionId>|${subscriptionId}|g" helm-config.yaml
    sed -i "s|<resourceGroupName>|${resourceGroupName}|g" helm-config.yaml
    sed -i "s|<applicationGatewayName>|${applicationGatewayName}|g" helm-config.yaml
    sed -i "s|<identityResourceId>|${identityResourceId}|g" helm-config.yaml
    sed -i "s|<identityClientId>|${identityClientId}|g" helm-config.yaml
    

    Uwaga

    W przypadku wdrażania w suwerennych chmurach (np. Azure Government)appgw.environment należy dodać i ustawić parametr konfiguracji na odpowiednią wartość, jak opisano poniżej.

    Wartości:

    • verbosityLevel: ustawia poziom szczegółowości infrastruktury rejestrowania AGIC. Zobacz Poziomy rejestrowania, aby uzyskać możliwe wartości.
    • appgw.environment: Ustawia środowisko chmury. Możliwe wartości: AZURECHINACLOUD, , AZUREGERMANCLOUD, AZUREPUBLICCLOUDAZUREUSGOVERNMENTCLOUD
    • appgw.subscriptionId: identyfikator subskrypcji platformy Azure, w którym znajduje się usługa Application Gateway. Przykład: a123b234-a3b4-557d-b2df-a0bc12de1234
    • appgw.resourceGroup: nazwa grupy zasobów platformy Azure, w której utworzono usługę Application Gateway. Przykład: app-gw-resource-group
    • appgw.name: nazwa usługi Application Gateway. Przykład: applicationgatewayd0f0
    • appgw.shared: ta flaga logiczna powinna być domyślnie ustawiona na false. Ustaw wartość na true wartość , jeśli potrzebujesz usługi Application Gateway udostępnionej.
    • kubernetes.watchNamespace: Określ przestrzeń nazw, którą powinien obserwować AGIC. Wartość przestrzeni nazw może być pojedynczą wartością ciągu lub rozdzielaną przecinkami listą przestrzeni nazw.
    • armAuth.type: może to być aadPodIdentity lub servicePrincipal
    • armAuth.identityResourceID: identyfikator zasobu tożsamości zarządzanej platformy Azure
    • armAuth.identityClientID: identyfikator klienta tożsamości. Więcej informacji o identityClientID znajduje się poniżej.
    • armAuth.secretJSON: wymagany tylko wtedy, gdy wybrano typ klucza tajnego jednostki usługi (gdy armAuth.type ustawiono wartość servicePrincipal)

    Uwaga

    Wartości identityResourceID i identityClientID są wartościami utworzonymi podczas kroków Wdrażanie składników i można je uzyskać ponownie przy użyciu następującego polecenia:

    az identity show -g <resource-group> -n <identity-name>
    

    <resource-group> w powyższym poleceniu jest grupą zasobów usługi Application Gateway. <identity-name> to nazwa utworzonej tożsamości. Wszystkie tożsamości dla danej subskrypcji można wymienić przy użyciu: az identity list

  4. Zainstaluj pakiet kontrolera ruchu przychodzącego usługi Application Gateway:

    helm install -f helm-config.yaml --generate-name application-gateway-kubernetes-ingress/ingress-azure
    

Instalowanie przykładowej aplikacji

Po zainstalowaniu usługi Application Gateway, AKS i AGIC można zainstalować przykładową aplikację za pośrednictwem usługi Azure Cloud Shell:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  name: aspnetapp
  labels:
    app: aspnetapp
spec:
  containers:
  - image: "mcr.microsoft.com/dotnet/samples:aspnetapp"
    name: aspnetapp-image
    ports:
    - containerPort: 8080
      protocol: TCP

---

apiVersion: v1
kind: Service
metadata:
  name: aspnetapp
spec:
  selector:
    app: aspnetapp
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080

---

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: aspnetapp
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
spec:
  rules:
  - http:
      paths:
      - path: /
        pathType: Exact
        backend:
          service:
            name: aspnetapp
            port:
              number: 80
        pathType: Exact
EOF

Alternatywnie możesz:

  • Pobierz powyższy plik YAML:

    curl https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/docs/examples/aspnetapp.yaml -o aspnetapp.yaml
    
  • Zastosuj plik YAML:

    kubectl apply -f aspnetapp.yaml
    

Inne przykłady

Ten przewodnik z instrukcjami zawiera więcej przykładów dotyczących uwidaczniania usługi AKS za pośrednictwem protokołu HTTP lub HTTPS w Internecie za pomocą usługi Application Gateway.