Sdílet prostřednictvím


Instalace AGIC pomocí existujícího nasazení služby Application Gateway

Kontroler příchozího přenosu dat služby Application Gateway (AGIC) je pod v rámci clusteru Azure Kubernetes Service (AKS). AGIC monitoruje prostředky příchozího přenosu dat Kubernetes. Vytvoří a použije konfiguraci Aplikace Azure lication Gateway na základě stavu clusteru Kubernetes.

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.

Požadavky

Tento článek předpokládá, že jste už nainstalovali následující nástroje a infrastrukturu:

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 následujících příkazů přidejte úložiště AGIC Helm pro cluster AKS, který je povolený pomocí řízení přístupu na základě role 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

Zálohování nasazení služby Application Gateway

Před instalací AGIC zálohujte konfiguraci nasazení služby Application Gateway:

  1. Na webu Azure Portal přejděte do nasazení služby Application Gateway.
  2. V části Automatizace vyberte Exportovat šablonu a pak vyberte Stáhnout.

Stažený soubor .zip obsahuje šablony JSON, skripty Bash a skripty PowerShellu, které můžete použít k obnovení služby Application Gateway, pokud je to nutné.

Nastavení identity pro ověřování Resource Manageru

AGIC komunikuje se serverem rozhraní API Kubernetes a Azure Resource Managerem. Vyžaduje identitu pro přístup k těmto rozhraním API. Můžete použít ID úloh Microsoft Entra nebo instanční objekt.

Nastavení ID úloh Microsoft Entra

ID úloh Microsoft Entra je identita, kterou přiřadíte k softwarové úloze. Tato identita umožňuje, aby se pod AKS ověřil s jinými prostředky Azure.

Pro tuto konfiguraci potřebujete autorizaci podu AGIC, abyste mohli provádět požadavky HTTP na Azure Resource Manager.

  1. Pomocí příkazu az account set v Azure CLI nastavte konkrétní předplatné jako aktuální aktivní předplatné:

    az account set --subscription "subscriptionID"
    

    Pak pomocí příkazu az identity create vytvořte spravovanou identitu. Musíte vytvořit identitu ve skupině prostředků uzlu. Skupina prostředků uzlu má ve výchozím nastavení přiřazený název, například MC_myResourceGroup_myAKSCluster_eastus.

    az identity create --name "userAssignedIdentityName" --resource-group "resourceGroupName" --location "location" --subscription "subscriptionID"
    
  2. Spuštěním následujícího příkazu pro přiřazení role identifikujte principalId hodnotu nově vytvořené identity:

    $resourceGroup="resource-group-name"
    $identityName="identity-name"
    az identity list -g $resourceGroup --query "[?name == '$identityName'].principalId | [0]" -o tsv
    
  3. Udělte přispěvateli identit přístup k nasazení služby Application Gateway. Potřebujete ID nasazení služby Application Gateway, které vypadá takto /subscriptions/A/resourceGroups/B/providers/Microsoft.Network/applicationGateways/C.

    Nejprve získejte seznam ID služby Application Gateway ve vašem předplatném spuštěním následujícího příkazu:

    az network application-gateway list --query '[].id'
    

    Pokud chcete přiřadit přístup přispěvatele identity, spusťte následující příkaz:

    $resourceGroup="resource-group-name"
    $identityName="identity-Name"
    # Get the Application Gateway ID
    $AppGatewayID=$(az network application-gateway list --query '[].id' -o tsv)
    $role="contributor"
    # Get the principal ID for the user-assigned identity
    $principalId=$(az identity list -g $resourceGroup --query "[?name == '$identityName'].principalId | [0]" -o tsv)
    az role assignment create --assignee $principalId --role $role --scope $AppGatewayID
    
  4. Udělte čtenáři identity přístup ke skupině prostředků služby Application Gateway. ID skupiny prostředků vypadá takto /subscriptions/A/resourceGroups/B. Všechny skupiny prostředků můžete získat spuštěním az group list --query '[].id'příkazu .

    $resourceGroup="resource-group-name"
    $identityName="identity-Name"
    # Get the Application Gateway resource group
    $AppGatewayResourceGroup=$(az network application-gateway list --query '[].resourceGroup' -o tsv)
    # Get the Application Gateway resource group ID
    $AppGatewayResourceGroupID=$(az group show --name $AppGatewayResourceGroup --query id -o tsv)
    $role="Reader"
    # Get the principal ID for the user-assigned identity
    $principalId=$(az identity list -g $resourceGroup --query "[?name == '$identityName'].principalId | [0]" -o tsv)
    # Assign the Reader role to the user-assigned identity at the resource group scope
    az role assignment create --role $role --assignee $principalId  --scope $AppGatewayResourceGroupID
    

Poznámka:

Ujistěte se, že identita, kterou AGIC používá, má delegovaná oprávnění Microsoft.Network/virtualNetworks/subnets/join/action do podsítě, ve které je nasazená služba Application Gateway. Pokud jste nedefinovali vlastní roli, která má toto oprávnění, můžete použít předdefinované role Přispěvatel sítě.

Nastavení instančního objektu

Pomocí tajného kódu Kubernetes je také možné poskytnout přístup AGIC k Azure Resource Manageru:

  1. Vytvořte instanční objekt služby Active Directory a zakódujte ho pomocí Base64. Kódování Base64 se vyžaduje pro uložení objektu blob JSON do Kubernetes.

    az ad sp create-for-rbac --role Contributor --sdk-auth | base64 -w0
    
  2. Přidejte do helm-config.yaml souboru objekt blob JSON kódovaný s kódováním Base64. Soubor helm-config.yaml nakonfiguruje AGIC.

    armAuth:
        type: servicePrincipal
        secretJSON: <Base64-Encoded-Credentials>
    

Nasazení doplňku AGIC

Vytvoření manifestu nasazení pro kontroler příchozího přenosu dat

---
# file: pet-supplies-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: pet-supplies-ingress
spec:
  ingressClassName: azure-application-gateway
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: store-front
            port:
              number: 80
      - path: /order-service
        pathType: Prefix
        backend:
          service:
            name: order-service
            port:
              number: 3000
      - path: /product-service
        pathType: Prefix
        backend:
          service:
            name: product-service
            port:
              number: 3002

Nasazení kontroleru příchozího přenosu dat

$namespace="namespace"
$file="pet-supplies-ingress.yaml"
kubectl apply -f $file -n $namespace

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

Pomocí Cloud Shellu nainstalujte balíček AGIC Helm:

  1. Proveďte aktualizaci Helmu:

    helm repo update
    
  2. Stáhnout helm-config.yaml:

    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 must manage
    #
    appgw:
        subscriptionId: <subscriptionId>
        resourceGroup: <resourceGroupName>
        name: <applicationGatewayName>
    
        # Setting appgw.shared to "true" creates 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 must 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: Azure-AD-workload-identity
    armAuth:
        type: workloadIdentity
        identityClientID:  <identityClientId>
    
    ## Alternatively you can use Service Principal credentials
    # armAuth:
    #    type: servicePrincipal
    #    secretJSON: <<Generate this value with: "az ad sp create-for-rbac --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 helm-config.yaml a vyplňte hodnoty pro appgw a armAuth.

    Poznámka:

    <identity-client-id>je vlastnost ID úloh Microsoft Entra hodnoty, kterou jste nastavili v předchozí části. Tyto informace můžete načíst spuštěním následujícího příkazu: az identity show -g <resourcegroup> -n <identity-name>. V takovém příkazu je skupina prostředků, <resourcegroup> která hostuje prostředky infrastruktury související s clusterem AKS, službou Application Gateway a spravovanou identitou.

  4. Nainstalujte chart Helm s helm-config.yaml konfigurací z předchozího kroku:

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

    Případně můžete příkaz Helm zkombinovat helm-config.yaml v jednom kroku:

    helm install oci://mcr.microsoft.com/azure-application-gateway/charts/ingress-azure \
         --name agic-controller \
         --version 1.7.5 \
         --namespace default \
         --debug \
         --set appgw.name=applicationgatewayABCD \
         --set appgw.resourceGroup=your-resource-group \
         --set appgw.subscriptionId=subscription-uuid \
         --set appgw.shared=false \
         --set armAuth.type=servicePrincipal \
         --set armAuth.secretJSON=$(az ad sp create-for-rbac --role Contributor --sdk-auth | base64 -w0) \
         --set rbac.enabled=true \
         --set verbosityLevel=3 \
         --set kubernetes.watchNamespace=default \
         --set aksClusterConfiguration.apiServerAddress=aks-abcdefg.hcp.westus2.azmk8s.io
    
  5. Zkontrolujte protokol nově vytvořeného podu a ověřte, že se správně spustil.

Pokud chcete zjistit, jak můžete službu AKS zveřejnit na internetu přes PROTOKOL HTTP nebo HTTPS pomocí nasazení brány Aplikace Azure lication, přečtěte si tento návod.

Nastavení sdíleného nasazení služby Application Gateway

AGIC ve výchozím nastavení předpokládá úplné vlastnictví nasazení služby Application Gateway, se kterým je propojeno. AGIC verze 0.8.0 a novější můžou sdílet jedno nasazení služby Application Gateway s dalšími komponentami Azure. Můžete například použít stejné nasazení služby Application Gateway pro aplikaci hostované ve škálovací sadě virtuálních počítačů Azure a clusteru AKS.

Ukázkový scénář

Podívejme se na imaginární nasazení služby Application Gateway, které spravuje provoz pro dva weby:

  • dev.contoso.com: Hostované v novém clusteru AKS pomocí služby Application Gateway a AGIC.
  • prod.contoso.com: Hostováno ve škálovací sadě virtuálních počítačů.

Ve výchozím nastavení předpokládá AGIC 100% vlastnictví nasazení služby Application Gateway, na které odkazuje. AGIC přepíše veškerou konfiguraci služby App Gateway. Pokud ručně vytvoříte naslouchací proces pro prod.contoso.com službu Application Gateway bez jeho definování v příchozím přenosu dat Kubernetes, AGIC odstraní prod.contoso.com konfiguraci během několika sekund.

Pokud chcete nainstalovat AGIC a obsluhovat prod.contoso.com je také z počítačů, které používají škálovací sadu virtuálních počítačů, musíte AGIC omezit pouze na konfiguraci dev.contoso.com . Toto omezení můžete usnadnit vytvořením instance následující definice vlastního prostředku (CRD):

cat <<EOF | kubectl apply -f -
apiVersion: "appgw.ingress.k8s.io/v1"
kind: AzureIngressProhibitedTarget
metadata:
  name: prod-contoso-com
spec:
  hostname: prod.contoso.com
EOF

Předchozí příkaz vytvoří AzureIngressProhibitedTarget objekt. Tento objekt zpřístupňuje AGIC (verze 0.8.0 a novější) povědomí o existenci konfigurace služby Application Gateway pro prod.contoso.com. Tento objekt také explicitně dává AGIC pokyn, aby se zabránilo změně jakékoli konfigurace související s tímto názvem hostitele.

Povolení sdíleného nasazení služby Application Gateway pomocí nové instalace AGIC

Pokud chcete AGIC (verze 0.8.0 a novější) omezit na podmnožinu konfigurace služby Application Gateway, upravte helm-config.yaml šablonu. appgw: V části přidejte shared klíč a nastavte ho na true:

appgw:
    subscriptionId: <subscriptionId>    # existing field
    resourceGroup: <resourceGroupName>  # existing field
    name: <applicationGatewayName>      # existing field
    shared: true                        # Add this field to enable shared Application Gateway

Použijte změny Helmu:

  1. Ujistěte se, že AzureIngressProhibitedTarget je crD nainstalovaný:

    kubectl apply -f https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/7b55ad194e7582c47589eb9e78615042e00babf3/crds/AzureIngressProhibitedTarget-v1-CRD-v1.yaml
    
  2. Aktualizovat Helm:

    helm upgrade \
        --recreate-pods \
        -f helm-config.yaml \
        agic-controller
        oci://mcr.microsoft.com/azure-application-gateway/charts/ingress-azure
    

V důsledku toho má váš cluster AKS novou instanci AzureIngressProhibitedTarget s názvem prohibit-all-targets:

kubectl get AzureIngressProhibitedTargets prohibit-all-targets -o yaml

Objekt prohibit-all-targets zakazuje AGIC měnit konfiguraci pro libovolného hostitele a cestu. Helm nainstalovaný s nasazením appgw.shared=true AGIC, ale neprovádí žádné změny ve službě Application Gateway.

Rozšíření oprávnění

Vzhledem k tomu, že Helm s appgw.shared=true výchozím prohibit-all-targets nastavením blokuje použití konfigurace AGIC, musíte rozšířit oprávnění AGIC:

  1. Vytvořte nový soubor YAML s názvem AzureIngressProhibitedTarget s následujícím fragmentem kódu, který obsahuje vaše konkrétní nastavení:

    cat <<EOF | kubectl apply -f -
    apiVersion: "appgw.ingress.k8s.io/v1"
    kind: AzureIngressProhibitedTarget
    metadata:
      name: your-custom-prohibitions
    spec:
      hostname: your.own-hostname.com
    EOF
    
  2. Teď, když jste vytvořili vlastní zákaz, můžete výchozí zákaz odstranit, což je příliš široké:

    kubectl delete AzureIngressProhibitedTarget prohibit-all-targets
    

Povolení sdíleného nasazení služby Application Gateway pro existující instalaci AGIC

Předpokládejme, že už máte funkční cluster AKS a nasazení služby Application Gateway a v clusteru jste nakonfigurovali AGIC. Máte příchozí přenos dat prod.contoso.com a úspěšně obsluhujete provoz z clusteru.

Chcete přidat staging.contoso.com do stávajícího nasazení služby Application Gateway, ale musíte ho hostovat na virtuálním počítači. Znovu použijete stávající nasazení služby Application Gateway a ručně nakonfigurujete naslouchací proces a back-endové fondy pro staging.contoso.com. Ruční úprava konfigurace služby Application Gateway (pomocí webu Azure Portal, rozhraní API Resource Manageru nebo Terraformu) by ale byla v konfliktu s předpoklady úplné vlastnictví AGIC. Krátce po použití změn je AGIC přepíše nebo odstraní.

AGIC může zakázat provádění změn v podmnožině konfigurace:

  1. Pomocí následujícího fragmentu kódu vytvořte nový soubor YAML s názvem AzureIngressProhibitedTarget :

    cat <<EOF | kubectl apply -f -
    apiVersion: "appgw.ingress.k8s.io/v1"
    kind: AzureIngressProhibitedTarget
    metadata:
      name: manually-configured-staging-environment
    spec:
      hostname: staging.contoso.com
    EOF
    
  2. Zobrazení nově vytvořeného objektu:

    kubectl get AzureIngressProhibitedTargets
    
  3. Upravte konfiguraci služby Application Gateway z webu Azure Portal. Můžete například přidat naslouchací procesy, pravidla směrování a back-endy. Nový objekt, který jste vytvořili (manually-configured-staging-environment), zakáže AGIC přepisovat konfiguraci služby Application Gateway související s staging.contoso.com.