Sdílet prostřednictvím


Instalace AGIC pomocí nového nasazení služby Application Gateway

Pokyny v tomto článku předpokládají, že chcete nainstalovat kontroler příchozího přenosu dat služby Application Gateway (AGIC) v prostředí, které nemá žádné existující komponenty.

Tip

Zvažte službu Application Gateway pro kontejnery pro vaše řešení příchozího přenosu dat Kubernetes. Další informace najdete v tématu Rychlý start: Nasazení služby Application Gateway pro kontejnery ALB Controller.

Instalace požadovaných nástrojů příkazového řádku

Pro všechny operace příkazového řádku v tomto článku doporučujeme používat Azure Cloud Shell . Cloud Shell můžete otevřít výběrem tlačítka Spustit Cloud Shell .

Případně můžete cloud Shell otevřít na webu Azure Portal výběrem jeho ikony.

Ikona Azure PowerShellu na portálu

Vaše instance Cloud Shellu už má všechny potřebné nástroje. Pokud se rozhodnete použít jiné prostředí, ujistěte se, že jsou nainstalované následující nástroje příkazového řádku:

  • az: Azure CLI (pokyny k instalaci)
  • kubectl: Nástroj příkazového řádku Kubernetes (pokyny k instalaci)
  • helm: Správce balíčků Kubernetes (pokyny k instalaci)
  • jq: Procesor JSON příkazového řádku (pokyny k instalaci)

Vytvoření identity

Pomocí následujícího postupu vytvořte objekt instančního objektu Microsoft Entra.

  1. Vytvořte instanční objekt Active Directory, který zahrnuje roli řízení přístupu na základě role (RBAC) 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)
    

    Zaznamenejte appId hodnoty a password hodnoty z výstupu JSON. Budete je používat v dalších krocích.

  2. appId K získání id nového instančního objektu použijte hodnotu z výstupu předchozího příkazu:

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

    Výstupem tohoto příkazu je objectId. Tuto hodnotu si poznamenejte, protože ji použijete v dalším kroku.

  3. Vytvořte soubor parametrů, který použijete v nasazení šablony Azure Resource Manageru (šablona ARM):

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

    Pokud chcete nasadit cluster s podporou RBAC Kubernetes, nastavte aksEnableRBAC na truehodnotu .

Nasazení komponent

Následující postup přidá tyto komponenty do vašeho předplatného:

Nasazení komponent:

  1. Stáhněte si šablonu ARM:

    wget https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/deploy/azuredeploy.json -O template.json
    
  2. Nasaďte šablonu ARM pomocí Azure CLI a podle potřeby ji upravte. Nasazení může trvat až 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 dokončení nasazení stáhněte výstup nasazení do souboru s názvem deployment-outputs.json:

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

Nastavení AGIC

Podle pokynů v předchozí části jste vytvořili a nakonfigurovali nový cluster AKS a nasazení služby Application Gateway. Teď jste připraveni nasadit ukázkovou aplikaci a kontroler příchozího přenosu dat do nové infrastruktury Kubernetes.

Nastavení přihlašovacích údajů Kubernetes

V následujících krocích je potřeba nastavit příkaz kubectl , který použijete pro připojení k novému clusteru Kubernetes. Cloud Shell už je kubectl nainstalovaný. K získání přihlašovacích údajů pro Kubernetes použijete az (Azure CLI).

Získejte přihlašovací údaje pro nově nasazenou instanci AKS. Další informace o následujícíchpříkazch

# 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

Instalace identity podu Microsoft Entra

Identita podu Microsoft Entra poskytuje přístup na základě tokenů k Azure Resource Manageru.

Identita podu Microsoft Entra přidá do clusteru Kubernetes následující komponenty:

Pokud chcete do clusteru nainstalovat identitu podu Microsoft Entra, použijte jeden z následujících příkazů:

  • Cluster AKS s podporou RBAC Kubernetes:

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

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

Přidání úložiště Helm

Helm je správce balíčků pro Kubernetes. Použijete ho application-gateway-kubernetes-ingress k instalaci balíčku.

Pokud používáte Cloud Shell, nemusíte instalovat Helm. Cloud Shell se dodává s Helmem verze 3. Spuštěním jednoho z následujících příkazů přidejte úložiště AGIC Helm:

  • Cluster AKS s podporou RBAC 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
    
  • Cluster AKS s podporou RBAC Kubernetes:

    helm init
    

Instalace chartu Helm kontroleru příchozího přenosu dat

  1. deployment-outputs.json Pomocí souboru, který jste vytvořili dříve, vytvořte následující proměnné:

    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. Stáhnout helm-config.yaml, který konfiguruje AGIC:

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

    Nebo zkopírujte následující soubor 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 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. Upravte nově stažený helm-config.yaml soubor a vyplňte oddíly pro appgw a 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
    

    Poznámka:

    Pokud nasazujete do suverénního cloudu (například Azure Government), musíte přidat appgw.environment parametr konfigurace a nastavit ho na odpovídající hodnotu.

    Tady jsou hodnoty:

    • verbosityLevel: Nastaví úroveň podrobností infrastruktury protokolování AGIC. Možné hodnoty najdete v tématu Úrovně protokolování.
    • appgw.environment: Nastaví cloudové prostředí. Možné hodnoty: AZURECHINACLOUD, AZUREGERMANCLOUD, AZUREPUBLICCLOUD, AZUREUSGOVERNMENTCLOUD.
    • appgw.subscriptionId: ID předplatného Azure, ve kterém se nachází služba Application Gateway. Příklad: aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e.
    • appgw.resourceGroup: Název skupiny prostředků Azure, ve které jste vytvořili nasazení služby Application Gateway. Příklad: app-gw-resource-group.
    • appgw.name: Název nasazení služby Application Gateway. Příklad: applicationgatewayd0f0.
    • appgw.shared: Logický příznak, který má výchozí hodnotu false. Nastavte ho, true pokud potřebujete sdílené nasazení služby Application Gateway.
    • kubernetes.watchNamespace: Určuje obor názvů, který má AGIC sledovat. Hodnota oboru názvů může být jedna řetězcová hodnota nebo seznam oborů názvů oddělených čárkami.
    • armAuth.type: Může být aadPodIdentity nebo servicePrincipal.
    • armAuth.identityResourceID: ID prostředku spravované identity Azure.
    • armAuth.identityClientID: ID klienta identity.
    • armAuth.secretJSON: Potřeba pouze v případě, že jako typ tajného kódu zvolíte instanční objekt (to znamená, že je nastaven na armAuth.type servicePrincipalhodnotu ).

    Poznámka:

    V předchozích krocích jste vytvořili identityResourceID hodnoty identityClientID pro nasazení komponent. Můžete je získat znovu pomocí následujícího příkazu:

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

    V příkazu <resource-group> je skupina prostředků vašeho nasazení služby Application Gateway. Zástupný <identity-name> symbol je název vytvořené identity. Všechny identity pro konkrétní předplatné můžete vypsat pomocí .az identity list

  4. Nainstalujte balíček AGIC:

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

Instalace ukázkové aplikace

Teď, když máte nainstalovanou službu Application Gateway, AKS a AGIC, můžete ukázkovou aplikaci nainstalovat přes 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

Jako další možnost můžete:

  • Stáhněte si předchozí soubor YAML:

    curl https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/docs/examples/aspnetapp.yaml -o aspnetapp.yaml
    
  • Použijte soubor YAML:

    kubectl apply -f aspnetapp.yaml
    
  • Další příklady, jak zveřejnit službu AKS na internetu prostřednictvím protokolu HTTP nebo HTTPS pomocí služby Application Gateway, najdete v tomto návodu.
  • Informace o službě Application Gateway pro kontejnery najdete v tomto článku s přehledem.