Postup instalace kontroleru příchozího přenosu dat služby Application Gateway (AGIC) pomocí nové služby Application Gateway

Následující pokyny předpokládají, že se kontroler příchozího přenosu dat služby Application Gateway (AGIC) nainstaluje v prostředí bez existujících komponent.

Tip

Podívejte se také na téma Co je Application Gateway pro kontejnery.

Požadované nástroje příkazového řádku

Pro všechny níže uvedené operace příkazového řádku doporučujeme používat Azure Cloud Shell . Spusťte prostředí z shell.azure.com nebo kliknutím na odkaz:

Případně spusťte Cloud Shell z webu Azure Portal pomocí následující ikony:

Portal launch

Azure Cloud Shell 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:

Vytvoření identity

Pomocí následujícího postupu vytvořte objekt instančního objektu Microsoft Entra. Poznamenejte si appIdhodnoty , passworda objectId hodnoty – tyto hodnoty se použijí v následujících krocích.

  1. Vytvoření instančního objektu AD (další informace o 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)
    

    Hodnoty appId a password hodnoty z výstupu JSON se použijí v následujících krocích.

  2. appId Pomocí výstupu předchozího příkazu získejte id nový instanční objekt:

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

    Výstupem tohoto příkazu je objectId, který se použije v následující šabloně Azure Resource Manageru.

  3. Vytvořte soubor parametrů, který se použije v nasazení šablony Azure Resource Manageru později.

    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 pole na aksEnableRBACtrue

Nasazení komponent

Tento krok přidá do vašeho předplatného následující komponenty:

  1. Stáhněte si šablonu Azure Resource Manageru a podle potřeby ji upravte.

    wget https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/deploy/azuredeploy.json -O template.json
    
  2. Nasaďte šablonu Azure Resource Manageru pomocí Azure CLI. 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í kontroleru příchozího přenosu dat služby Application Gateway

S pokyny v předchozí části jsme vytvořili a nakonfigurovali nový cluster AKS a službu Application Gateway. Teď jsme 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

Pro následující kroky potřebujeme nastavit příkaz kubectl , který použijeme 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žijeme az rozhraní příkazového řádku.

Získejte přihlašovací údaje pro nově nasazenou službu AKS (další informace):

# 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

Instalace identity podu Microsoft Entra

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

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

Instalace identity podu Microsoft Entra do clusteru:

  • 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 zakázání RBAC Kubernetes

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

Instalace nástroje Helm

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

Poznámka:

Pokud používáte Cloud Shell, nemusíte instalovat Helm. Azure Cloud Shell se dodává s Helmem verze 3. Přeskočte první krok a stačí přidat úložiště AGIC Helm.

  1. Nainstalujte Helm a spuštěním následujícího příkazu přidejte application-gateway-kubernetes-ingress balíček 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 zakázání RBAC Kubernetes

      helm init
      
  2. Přidejte úložiště AGIC Helm:

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

Install Ingress Controller Helm Chart

  1. deployment-outputs.json Použijte soubor vytvořený výše a 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áhněte si helm-config.yaml, který nakonfiguruje 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 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. Upravte nově stažené helm-config.yaml a vyplňte oddíly 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:

    Pro nasazení do suverénních cloudů (např. Azure Government)appgw.environment musí být parametr konfigurace přidán a nastaven na odpovídající hodnotu, jak je uvedeno níže.

    Hodnoty:

    • verbosityLevel: Nastaví úroveň podrobností infrastruktury protokolování AGIC. Informace o možných hodnotách najdete v části Ú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: a123b234-a3b4-557d-b2df-a0bc12de1234
    • appgw.resourceGroup: Název skupiny prostředků Azure, ve které byla služba Application Gateway vytvořena. Příklad: app-gw-resource-group
    • appgw.name: Název služby Application Gateway. Příklad: applicationgatewayd0f0
    • appgw.shared: Tento logický příznak by měl být ve výchozím nastavení nastaven na false. Nastavte na true to, abyste potřebovali sdílenou službu Application Gateway.
    • kubernetes.watchNamespace: Zadejte 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. Další informace o identityClientID najdete níže.
    • armAuth.secretJSON: Vyžaduje se pouze v případě, že je vybraný typ tajného klíče instančního objektu (pokud armAuth.type je nastaven na servicePrincipalhodnotu ).

    Poznámka:

    identityClientID Jedná se o identityResourceID hodnoty, které byly vytvořeny během kroků Nasazení komponent, a lze je získat znovu pomocí následujícího příkazu:

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

    <resource-group> ve výše uvedeném příkazu je skupina prostředků vaší služby Application Gateway. <identity-name> je název vytvořené identity. Všechny identity pro dané předplatné je možné uvést pomocí: az identity list

  4. Nainstalujte balíček kontroleru příchozího přenosu dat služby Application Gateway:

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

Instalace ukázkové aplikace

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

Alternativně můžete:

  • Stáhněte si výše uvedený 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

Tento průvodce postupy obsahuje další příklady, jak zpřístupnit službu AKS prostřednictvím protokolu HTTP nebo HTTPS pro internet se službou Application Gateway.