Dela via


Installera AGIC med hjälp av en ny Application Gateway-distribution

Anvisningarna i den här artikeln förutsätter att du vill installera Application Gateway Ingress Controller (AGIC) i en miljö som inte har några befintliga komponenter.

Dricks

Överväg Application Gateway för containrar för din Kubernetes-ingresslösning. Mer information finns i Snabbstart: Distribuera Application Gateway för containrar ALB-styrenhet.

Installera nödvändiga kommandoradsverktyg

Vi rekommenderar att du använder Azure Cloud Shell för alla kommandoradsåtgärder i den här artikeln. Du kan öppna Cloud Shell genom att välja knappen Starta Cloud Shell .

Du kan också öppna Cloud Shell från Azure Portal genom att välja dess ikon.

Azure PowerShell-ikon i portalen

Din Cloud Shell-instans har redan alla nödvändiga verktyg. Om du väljer att använda en annan miljö kontrollerar du att följande kommandoradsverktyg är installerade:

Skapa en identitet

Använd följande steg för att skapa ett Microsoft Entra-objekt för tjänstens huvudnamn.

  1. Skapa ett Huvudnamn för Active Directory-tjänsten, som innehåller en Rollbaserad åtkomstkontroll i Azure (RBAC):

    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)
    

    appId Registrera värdena och password från JSON-utdata. Du kommer att använda dem i nästa steg.

  2. appId Använd värdet från föregående kommandos utdata för att hämta det id nya tjänstens huvudnamn:

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

    Utdata för det här kommandot är objectId. Registrera det här värdet eftersom du använder det i nästa steg.

  3. Skapa parameterfilen som du ska använda i distributionen av Azure Resource Manager-mallen (ARM-mall):

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

    Om du vill distribuera ett Kubernetes RBAC-aktiverat kluster anger du aksEnableRBAC till true.

Distribuera komponenter

Följande procedur lägger till dessa komponenter i din prenumeration:

Så här distribuerar du komponenterna:

  1. Ladda ned ARM-mallen:

    wget https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/deploy/azuredeploy.json -O template.json
    
  2. Distribuera ARM-mallen med hjälp av Azure CLI och ändra den efter behov. Distributionen kan ta upp till 5 minuter.

    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. När distributionen är klar laddar du ned distributionsutdata till en fil med namnet deployment-outputs.json:

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

Konfigurera AGIC

Med anvisningarna i föregående avsnitt skapade och konfigurerade du ett nytt AKS-kluster och en Application Gateway-distribution. Nu är du redo att distribuera en exempelapp och en ingresskontrollant till din nya Kubernetes-infrastruktur.

Konfigurera Kubernetes-autentiseringsuppgifter

För följande steg måste du konfigurera kubectl-kommandot som du ska använda för att ansluta till ditt nya Kubernetes-kluster. Cloud Shell har kubectl redan installerats. Du använder az (Azure CLI) för att hämta autentiseringsuppgifter för Kubernetes.

Hämta autentiseringsuppgifter för din nyligen distribuerade AKS-instans. Mer information om följande kommandon finns i Använda Azure RBAC för Kubernetes-auktorisering med kubectl.

# use the deployment-outputs.json file 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

Installera Microsoft Entra Pod Identity

Microsoft Entra Pod Identity ger tokenbaserad åtkomst till Azure Resource Manager.

Microsoft Entra Pod Identity lägger till följande komponenter i ditt Kubernetes-kluster:

Om du vill installera Microsoft Entra Pod Identity i klustret använder du något av följande kommandon:

  • Kubernetes RBAC-aktiverat AKS-kluster:

    kubectl create -f https://raw.githubusercontent.com/Azure/aad-pod-identity/master/deploy/infra/deployment-rbac.yaml
    
  • Kubernetes RBAC-inaktiverat AKS-kluster:

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

Lägg till Helm-lagringsplatsen

Helm är pakethanterare för Kubernetes. Du använder det för att installera application-gateway-kubernetes-ingress paketet.

Om du använder Cloud Shell behöver du inte installera Helm. Cloud Shell levereras med Helm version 3. Kör något av följande kommandon för att lägga till AGIC Helm-lagringsplatsen:

  • Kubernetes RBAC-aktiverat AKS-kluster:

    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
    
  • Kubernetes RBAC-inaktiverat AKS-kluster:

    helm init
    

Installera ingresskontrollantens Helm-diagram

  1. deployment-outputs.json Använd filen som du skapade tidigare för att skapa följande variabler:

    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. Ladda ned helm-config.yaml, som konfigurerar AGIC:

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

    Eller kopiera följande YAML-fil:

    # 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 accessible 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. Redigera den nyligen nedladdade helm-config.yaml filen och fyll i avsnitten för appgw och 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
    

    Kommentar

    Om du distribuerar till ett nationellt moln (till exempel Azure Government) måste du lägga till konfigurationsparametern appgw.environment och ange den till lämpligt värde.

    Här är värdena:

    • verbosityLevel: Anger utförlighetsnivån för AGIC-loggningsinfrastrukturen. Möjliga värden finns i Loggningsnivåer.
    • appgw.environment: Anger molnmiljön. Möjliga värden: AZURECHINACLOUD, AZUREGERMANCLOUD, AZUREPUBLICCLOUD, AZUREUSGOVERNMENTCLOUD.
    • appgw.subscriptionId: Det Azure-prenumerations-ID som Application Gateway finns i. Exempel: aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e.
    • appgw.resourceGroup: Namnet på den Azure-resursgrupp där du skapade Application Gateway-distributionen. Exempel: app-gw-resource-group.
    • appgw.name: Namnet på Application Gateway-distributionen. Exempel: applicationgatewayd0f0.
    • appgw.shared: Boolesk flagga som standard är false. Ange den till true om du behöver en delad Application Gateway-distribution.
    • kubernetes.watchNamespace: Anger det namnområde som AGIC ska titta på. Namnområdesvärdet kan vara ett enskilt strängvärde eller en kommaavgränsad lista med namnområden.
    • armAuth.type: Kan vara aadPodIdentity eller servicePrincipal.
    • armAuth.identityResourceID: Resurs-ID för den hanterade Azure-identiteten.
    • armAuth.identityClientID: Klient-ID för identiteten.
    • armAuth.secretJSON: Behövs bara när du väljer ett huvudnamn för tjänsten som hemlighetstyp (d.s. när du anger armAuth.type ).servicePrincipal

    Kommentar

    Du skapade identityResourceID värdena och identityClientID under de tidigare stegen för att distribuera komponenter. Du kan hämta dem igen med hjälp av följande kommando:

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

    I kommandot <resource-group> är resursgruppen för din Application Gateway-distribution. Platshållaren <identity-name> är namnet på den skapade identiteten. Du kan lista alla identiteter för en viss prenumeration med hjälp az identity listav .

  4. Installera AGIC-paketet:

    helm install agic-controller oci://mcr.microsoft.com/azure-application-gateway/charts/ingress-azure --version 1.7.5 -f helm-config.yaml
    

Installera en exempelapp

Nu när du har installerat Application Gateway, AKS och AGIC kan du installera en exempelapp via 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

Du kan också göra så här:

  • Ladda ned den föregående YAML-filen:

    curl https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/docs/examples/aspnetapp.yaml -o aspnetapp.yaml
    
  • Använd YAML-filen:

    kubectl apply -f aspnetapp.yaml
    
  • Fler exempel på hur du exponerar en AKS-tjänst för Internet via HTTP eller HTTPS med hjälp av Application Gateway finns i den här guiden.
  • Information om Application Gateway för containrar finns i den här översiktsartikeln.