Share via


Application Gateway bejövőforgalom-vezérlő (AGIC) telepítése új Application Gateway használatával

Az alábbi utasítások feltételezik, hogy az Application Gateway bejövőforgalom-vezérlője (AGIC) olyan környezetben lesz telepítve, amelyben nincsenek már meglévő összetevők.

Szükséges parancssori eszközök

Javasoljuk az Azure Cloud Shell használatát az alábbi összes parancssori művelethez. Indítsa el a rendszerhéjat shell.azure.com vagy kattintson a hivatkozásra:

Másik lehetőségként indítsa el a Cloud Shellt az Azure Portalról az alábbi ikonnal:

Portal launch

Az Azure Cloud Shell már rendelkezik minden szükséges eszközzel. Ha másik környezetet használ, győződjön meg arról, hogy a következő parancssori eszközök vannak telepítve:

Identitás létrehozása

Kövesse az alábbi lépéseket egy Microsoft Entra szolgáltatásnév-objektum létrehozásához. Jegyezze fel ezeket az appIdpasswordobjectId értékeket a következő lépésekben.

  1. AD-szolgáltatásnév létrehozása (További információ az Azure RBAC-ről):

    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)
    

    A appId JSON-kimenet és password -értékek a következő lépésekben lesznek felhasználva

  2. Használja az appId előző parancs kimenetét az id új szolgáltatásnév lekéréséhez:

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

    Ennek a parancsnak a kimenete az objectIdalábbi Azure Resource Manager-sablonban lesz használva

  3. Hozza létre az Azure Resource Manager-sablon későbbi üzembe helyezéséhez használt paraméterfájlt.

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

    Kubernetes RBAC-kompatibilis fürt üzembe helyezéséhez állítsa a mezőt a aksEnableRBAC következőre:true

Összetevők üzembe helyezése

Ez a lépés a következő összetevőket adja hozzá az előfizetéshez:

  1. Töltse le az Azure Resource Manager-sablont, és szükség szerint módosítsa a sablont.

    wget https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/deploy/azuredeploy.json -O template.json
    
  2. Az Azure Resource Manager-sablon üzembe helyezése az Azure CLI használatával. Az üzembe helyezés akár 5 percet is igénybe vehet.

    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. Miután az üzembe helyezés befejeződött, töltse le az üzembe helyezés kimenetét egy nevű deployment-outputs.jsonfájlba.

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

Az Application Gateway bejövőforgalom-vezérlőjének beállítása

Az előző szakaszban ismertetett utasítások alapján létrehoztunk és konfiguráltunk egy új AKS-fürtöt és egy Application Gatewayt. Most már készen állunk egy mintaalkalmazás és egy bejövőforgalom-vezérlő üzembe helyezésére az új Kubernetes-infrastruktúrában.

A Kubernetes hitelesítő adatainak beállítása

A következő lépésekhez be kell állítani a Kubectl-parancsot , amelyet az új Kubernetes-fürthöz való csatlakozáshoz fogunk használni. A Cloud Shell már telepítve van kubectl . A parancssori felület használatával az szerezzük be a Kubernetes hitelesítő adatait.

Hitelesítő adatok lekérése az újonnan üzembe helyezett AKS-hez (további információ):

# 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

A Microsoft Entra Pod Identity telepítése

A Microsoft Entra Pod Identity jogkivonatalapú hozzáférést biztosít az Azure Resource Managerhez (ARM).

A Microsoft Entra Pod Identity a következő összetevőket adja hozzá a Kubernetes-fürthöz:

A Microsoft Entra Pod Identity telepítése a fürtre:

  • Kubernetes RBAC-kompatibilis AKS-fürt

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

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

A Helm telepítése

A Helm a Kubernetes csomagkezelője. Ezzel telepítjük a application-gateway-kubernetes-ingress csomagot.

Feljegyzés

A Cloud Shell használata esetén nem kell telepítenie a Helmt. Az Azure Cloud Shell a Helm 3-at használja. Hagyja ki az első lépést, és csak adja hozzá az AGIC Helm-adattárat.

  1. Telepítse a Helmt , és futtassa a következőket a Helm-csomag hozzáadásához application-gateway-kubernetes-ingress :

    • Kubernetes RBAC-kompatibilis AKS-fürt

      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 letiltott AKS-fürt

      helm init
      
  2. Adja hozzá az AGIC Helm-adattárat:

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

Bejövőforgalom-vezérlő Helm-diagram telepítése

  1. Használja a deployment-outputs.json fent létrehozott fájlt, és hozza létre a következő változókat.

    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. Töltse le a helm-config.yaml fájlt, amely konfigurálja az AGIC-t:

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

    Vagy másolja az alábbi YAML-fájlt:

    # 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. Szerkessze az újonnan letöltött helm-config.yaml fájlt, és töltse ki a szakaszokat és armAutha .appgw

    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
    

    Feljegyzés

    A szuverén felhőkben (például az Azure Governmentben) történő üzembe helyezéshez a appgw.environment konfigurációs paramétert hozzá kell adni, és be kell állítani a megfelelő értékre az alább dokumentált módon.

    Értékek:

    • verbosityLevel: Beállítja az AGIC naplózási infrastruktúra részletességi szintjét. A lehetséges értékek naplózási szintjei című témakörben talál további információt.
    • appgw.environment: Beállítja a felhőkörnyezetet. Lehetséges értékek: AZURECHINACLOUD, AZUREGERMANCLOUD, , AZUREPUBLICCLOUDAZUREUSGOVERNMENTCLOUD
    • appgw.subscriptionId: Az Az Azure-előfizetés azonosítója, amelyben az Application Gateway található. Példa: a123b234-a3b4-557d-b2df-a0bc12de1234
    • appgw.resourceGroup: Annak az Azure-erőforráscsoportnak a neve, amelyben az Application Gateway létrejött. Példa: app-gw-resource-group
    • appgw.name: Az Application Gateway neve. Példa: applicationgatewayd0f0
    • appgw.shared: Ennek a logikai jelölőnek alapértelmezés szerint a falsekövetkezőnek kell lennie: . Állítsa be, true ha megosztott application Gatewayre van szüksége.
    • kubernetes.watchNamespace: Adja meg azt a névteret, amelyet az AGIC-nek figyelnie kell. A névtér értéke lehet egyetlen sztringérték, vagy a névterek vesszővel tagolt listája.
    • armAuth.type: lehet aadPodIdentity vagy servicePrincipal
    • armAuth.identityResourceID: Az Azure Managed Identity erőforrás-azonosítója
    • armAuth.identityClientID: Az identitás ügyfélazonosítója. Az identityClientID-ről az alábbiakban talál további információt.
    • armAuth.secretJSON: Csak akkor szükséges, ha a Szolgáltatásnév titkos kód típusa van kiválasztva (amikor armAuth.type a rendszer a következőre servicePrincipalvan állítva)

    Feljegyzés

    Az identityResourceID összetevők üzembe helyezése lépések során létrehozott és identityClientID létrehozott értékek, amelyeket a következő paranccsal lehet ismét beszerezni:

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

    <resource-group> a fenti parancs az Application Gateway erőforráscsoportja. <identity-name> a létrehozott identitás neve. Egy adott előfizetés összes identitása a következő használatával listázható: az identity list

  4. Telepítse az Application Gateway bejövőforgalom-vezérlőcsomagot:

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

Mintaalkalmazás telepítése

Most, hogy telepítettük az Application Gatewayt, az AKS-t és az AGIC-t, telepíthetünk egy mintaalkalmazást az Azure Cloud Shellen keresztül:

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

Másik lehetőségként a következő lehetőségeket is választhatja:

  • Töltse le a fenti YAML-fájlt:

    curl https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/docs/examples/aspnetapp.yaml -o aspnetapp.yaml
    
  • Alkalmazza a YAML-fájlt:

    kubectl apply -f aspnetapp.yaml
    

Egyéb példák

Ez az útmutató további példákat tartalmaz arra, hogyan teheti elérhetővé az AKS-szolgáltatást HTTP-n vagy HTTPS-en keresztül az internetre az Application Gateway használatával.