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:
- Cluster AKS se službou Azure Container Networking Interface (CNI)
- Application Gateway v2 ve stejné virtuální síti jako cluster AKS.
- ID úloh Microsoft Entra nakonfigurované pro váš cluster AKS.
- Azure Cloud Shell jako prostředí Azure Shell , které má
az
(Azure CLI)kubectl
ahelm
nainstalované. Tyto nástroje jsou vyžadovány pro příkazy, které podporují konfiguraci tohoto nasazení.
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:
- Na webu Azure Portal přejděte do nasazení služby Application Gateway.
- 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.
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"
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
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
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ímaz 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:
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
Přidejte do
helm-config.yaml
souboru objekt blob JSON kódovaný s kódováním Base64. Souborhelm-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:
Proveďte aktualizaci Helmu:
helm repo update
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>
Upravte
helm-config.yaml
a vyplňte hodnoty proappgw
aarmAuth
.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.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
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:
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
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:
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
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:
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
Zobrazení nově vytvořeného objektu:
kubectl get AzureIngressProhibitedTargets
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í sstaging.contoso.com
.