Delen via


AGIC installeren met behulp van een nieuwe Application Gateway-implementatie

In de instructies in dit artikel wordt ervan uitgegaan dat u de Application Gateway-ingangscontroller (AGIC) wilt installeren in een omgeving die geen vooraf bestaande onderdelen bevat.

Tip

Overweeg Application Gateway for Containers voor uw Kubernetes-oplossing voor inkomend verkeer. Zie quickstart: Application Gateway for Containers ALB Controller implementeren voor meer informatie.

Vereiste opdrachtregelprogramma's installeren

We raden het gebruik van Azure Cloud Shell aan voor alle opdrachtregelbewerkingen in dit artikel. U kunt Cloud Shell openen door de knop Cloud Shell starten te selecteren.

U kunt Cloud Shell ook openen vanuit Azure Portal door het bijbehorende pictogram te selecteren.

Azure PowerShell-pictogram in de portal

Uw Cloud Shell-exemplaar beschikt al over alle benodigde hulpprogramma's. Als u ervoor kiest om een andere omgeving te gebruiken, controleert u of de volgende opdrachtregelprogramma's zijn geïnstalleerd:

Een identiteit maken

Gebruik de volgende stappen om een Microsoft Entra-service-principalobject te maken.

  1. Maak een Active Directory-service-principal, die een RBAC-rol (op rollen gebaseerd toegangsbeheer) van Azure bevat:

    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)
    

    Noteer de appId en password waarden uit de JSON-uitvoer. U gebruikt deze in de volgende stappen.

  2. Gebruik de appId waarde uit de uitvoer van de vorige opdracht om de id nieuwe service-principal op te halen:

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

    De uitvoer van deze opdracht is objectId. Noteer deze waarde, omdat u deze in de volgende stap gaat gebruiken.

  3. Maak het parameterbestand dat u gaat gebruiken in de ARM-sjabloonimplementatie (Azure Resource Manager):

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

    Als u een Kubernetes RBAC-cluster wilt implementeren, stelt u deze in aksEnableRBAC op true.

Onderdelen implementeren

Met de volgende procedure worden deze onderdelen aan uw abonnement toegevoegd:

De onderdelen implementeren:

  1. Download de ARM-sjabloon:

    wget https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/deploy/azuredeploy.json -O template.json
    
  2. Implementeer de ARM-sjabloon met behulp van de Azure CLI en wijzig deze indien nodig. De implementatie kan maximaal 5 minuten duren.

    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. Nadat de implementatie is voltooid, downloadt u de uitvoer van de implementatie naar een bestand met de naam deployment-outputs.json:

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

AGIC instellen

Met de instructies in de vorige sectie hebt u een nieuw AKS-cluster en een Application Gateway-implementatie gemaakt en geconfigureerd. U bent nu klaar om een voorbeeld-app en een toegangsbeheerobjectcontroller te implementeren in uw nieuwe Kubernetes-infrastructuur.

Kubernetes-referenties instellen

Voor de volgende stappen moet u de kubectl-opdracht instellen, die u gebruikt om verbinding te maken met uw nieuwe Kubernetes-cluster. Cloud Shell is kubectl al geïnstalleerd. U gebruikt az (Azure CLI) om referenties voor Kubernetes te verkrijgen.

Haal referenties op voor uw zojuist geïmplementeerde AKS-exemplaar. Zie Azure RBAC gebruiken voor Kubernetes-autorisatie met kubectl voor meer informatie over de volgende opdrachten.

# 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

Microsoft Entra Pod Identity installeren

Microsoft Entra Pod Identity biedt op tokens gebaseerde toegang tot Azure Resource Manager.

Microsoft Entra Pod Identity voegt de volgende onderdelen toe aan uw Kubernetes-cluster:

Als u Microsoft Entra Pod Identity wilt installeren in uw cluster, gebruikt u een van de volgende opdrachten:

  • AKS-cluster met Kubernetes RBAC:

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

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

De Helm-opslagplaats toevoegen

Helm is een pakketbeheerder voor Kubernetes. U gebruikt het om het application-gateway-kubernetes-ingress pakket te installeren.

Als u Cloud Shell gebruikt, hoeft u Helm niet te installeren. Cloud Shell wordt geleverd met Helm versie 3. Voer een van de volgende opdrachten uit om de AGIC Helm-opslagplaats toe te voegen:

  • AKS-cluster met Kubernetes RBAC:

    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-uitgeschakeld AKS-cluster:

    helm init
    

De Helm-grafiek van de ingangscontroller installeren

  1. Gebruik het deployment-outputs.json bestand dat u eerder hebt gemaakt om de volgende variabelen te maken:

    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. Downloaden helm-config.yaml, waarmee AGIC wordt geconfigureerd:

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

    Of kopieer het volgende YAML-bestand:

    # 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. Bewerk het zojuist gedownloade helm-config.yaml bestand en vul de secties in voor appgw en 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
    

    Notitie

    Als u implementeert in een onafhankelijke cloud (bijvoorbeeld Azure Government), moet u de appgw.environment configuratieparameter toevoegen en deze instellen op de juiste waarde.

    Dit zijn de waarden:

    • verbosityLevel: Hiermee stelt u het uitgebreidheidsniveau van de AGIC-logboekregistratie-infrastructuur in. Zie Logboekregistratieniveaus voor mogelijke waarden.
    • appgw.environment: Hiermee stelt u de cloudomgeving in. Mogelijke waarden: AZURECHINACLOUD, AZUREGERMANCLOUD, AZUREPUBLICCLOUD, . AZUREUSGOVERNMENTCLOUD
    • appgw.subscriptionId: de Azure-abonnements-id waarin Application Gateway zich bevindt. Voorbeeld: aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e.
    • appgw.resourceGroup: Naam van de Azure-resourcegroep waarin u de Application Gateway-implementatie hebt gemaakt. Voorbeeld: app-gw-resource-group.
    • appgw.name: Naam van de implementatie van Application Gateway. Voorbeeld: applicationgatewayd0f0.
    • appgw.shared: Booleaanse vlag die standaard wordt ingesteld op false. Stel deze in op true als u een gedeelde Application Gateway-implementatie nodig hebt.
    • kubernetes.watchNamespace: Hiermee geeft u de naamruimte op die AGIC moet bekijken. De waarde van de naamruimte kan één tekenreekswaarde of een door komma's gescheiden lijst met naamruimten zijn.
    • armAuth.type: kan zijn aadPodIdentity of servicePrincipal.
    • armAuth.identityResourceID: Resource-id van de beheerde Azure-identiteit.
    • armAuth.identityClientID: Client-id van de identiteit.
    • armAuth.secretJSON: Alleen nodig wanneer u een service-principal kiest als het geheime type (dat wil gezegd, wanneer u instelt armAuth.type op servicePrincipal).

    Notitie

    U hebt de identityResourceID en identityClientID waarden gemaakt tijdens de eerdere stappen voor het implementeren van onderdelen. U kunt ze opnieuw verkrijgen met behulp van de volgende opdracht:

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

    In de opdracht <resource-group> is de resourcegroep van uw Application Gateway-implementatie. De <identity-name> tijdelijke aanduiding is de naam van de gemaakte identiteit. U kunt alle identiteiten voor een bepaald abonnement weergeven met behulp van az identity list.

  4. Installeer het AGIC-pakket:

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

Een voorbeeld-app installeren

Nu u Application Gateway, AKS en AGIC hebt geïnstalleerd, kunt u een voorbeeld-app installeren 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

U kunt ook:

  • Download het voorgaande YAML-bestand:

    curl https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/docs/examples/aspnetapp.yaml -o aspnetapp.yaml
    
  • Pas het YAML-bestand toe:

    kubectl apply -f aspnetapp.yaml