Instalace kontroleru příchozího přenosu dat služby Application Gateway (AGIC) pomocí existující 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 a vytváří a používá konfiguraci služby Application Gateway na základě stavu clusteru Kubernetes.
Tip
Podívejte se také na téma Co je Application Gateway pro kontejnery.
Obrys
- Požadavky
- Ověřování Azure Resource Manageru (ARM)
- Možnost 1: Nastavení ID úloh Microsoft Entra a vytvoření identity Azure v ARMs
- Možnost 2: Nastavení instančního objektu
- Instalace kontroleru příchozího přenosu dat pomocí Nástroje Helm
- Sdílená služba Application Gateway: Nainstalujte AGIC v prostředí, kde je služba Application Gateway sdílená mezi jedním clusterem AKS a/nebo jinými komponentami Azure.
Požadavky
Tento dokument předpokládá, že už máte nainstalované 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 cluster AKS
- Cloud Shell je prostředí Azure Shell , které má
az
rozhraní příkazového řádkukubectl
ahelm
nainstalované. Tyto nástroje jsou vyžadovány pro příkazy používané k podpoře konfigurace tohoto nasazení.
Před instalací AGIC zálohujte konfiguraci služby Application Gateway:
- Na webu Azure Portal přejděte k vaší instanci služby Application Gateway.
- V části Automatizace vyberte Exportovat šablonu a pak vyberte Stáhnout.
Stažený soubor ZIP obsahuje šablony JSON, Bash a powershellové skripty, které byste mohli použít k obnovení služby App Gateway v případě potřeby.
Instalace nástroje Helm
Helm je správce balíčků pro Kubernetes, který se používá k instalaci application-gateway-kubernetes-ingress
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.
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
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
Ověřování Azure 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.
Nastavení ID úloh Microsoft Entra
ID úloh Microsoft Entra je identita, kterou přiřadíte k softwarové úloze, k ověřování a přístupu k dalším službám a prostředkům. Tato identita umožňuje podu AKS používat tuto identitu a ověřovat ji s jinými prostředky Azure. Pro tuto konfiguraci potřebujeme autorizaci podu AGIC k provádění požadavků HTTP na ARM.
Pomocí příkazu az account set v Azure CLI nastavte konkrétní předplatné, které bude aktuálním aktivním předplatným. Pak pomocí příkazu az identity create vytvořte spravovanou identitu. Identitu je potřeba vytvořit 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 account set --subscription "subscriptionID"
az identity create --name "userAssignedIdentityName" --resource-group "resourceGroupName" --location "location" --subscription "subscriptionID"
Pro přiřazení role spusťte následující příkaz, který identifikuje nově vytvořenou
principalId
identitu:$resourceGroup="resource-group-name" $identityName="identity-name" az identity list -g $resourceGroup --query "[?name == '$identityName'].principalId | [0]" -o tsv
Udělte přispěvateli identity přístup ke službě Application Gateway. Potřebujete ID 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 pomocí:az group list --query '[].id'
$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 s tímto oprávněním není definovaná vlastní role, můžete použít předdefinované role Přispěvatel sítě, která obsahuje oprávnění Microsoft.Network/virtualNetworks/subnets/join/action .
Použití instančního objektu
K ARM je také možné poskytnout přístup AGIC pomocí tajného kódu Kubernetes.
Vytvořte instanční objekt služby Active Directory a kó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. Další informacehelm-config.yaml
najdete v další části.armAuth: type: servicePrincipal secretJSON: <Base64-Encoded-Credentials>
Nasazení doplňku kontroleru příchozího přenosu dat brány Aplikace Azure
Vytvoření manifestu nasazení kontroleru příchozího přenosu dat
---
# file: pet-supplies-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: pet-supplies-ingress
annotations:
kubernetes.io/ingress.class: azure/application-gateway
spec:
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
V několika prvních krocích nainstalujeme Helm tiller do clusteru Kubernetes. Pomocí Cloud Shellu nainstalujte balíček AGIC Helm:
application-gateway-kubernetes-ingress
Přidání úložiště Helm a provedení aktualizace helmuhelm repo add application-gateway-kubernetes-ingress https://appgwingress.blob.core.windows.net/ingress-azure-helm-package/ helm repo update
Stáhněte si 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 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 pro
appgw
aarmAuth
.Poznámka:
Jedná se
<identity-client-id>
o vlastnost ID úloh Microsoft Entra, 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>
, kde<resourcegroup>
je skupina prostředků hostující prostředky infrastruktury související s clusterem AKS, službou Application Gateway a spravovanou identitou.Instalace chartu
application-gateway-kubernetes-ingress
helm-config.yaml
Helm s konfigurací z předchozího krokuhelm install -f <helm-config.yaml> application-gateway-kubernetes-ingress/ingress-azure
Případně můžete příkaz
helm-config.yaml
Helm zkombinovat v jednom kroku:helm install ./helm/ingress-azure \ --name ingress-azure \ --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, jestli se správně spustil.
V tomto průvodci návodem se dozvíte, jak můžete službu AKS zveřejnit prostřednictvím protokolu HTTP nebo HTTPS na internetu pomocí brány Aplikace Azure.
Sdílená služba Application Gateway
Ve výchozím nastavení AGIC předpokládá úplné vlastnictví služby Application Gateway, se kterou je propojená. AGIC verze 0.8.0 a novější můžou sdílet jednu službu Application Gateway s dalšími komponentami Azure. Mohli bychom například použít stejnou službu Application Gateway pro aplikaci hostované ve škálovací sadě virtuálních počítačů a clusteru AKS.
Před povolením tohoto nastavení zálohujte konfiguraci služby Application Gateway:
- Na webu Azure Portal přejděte do vaší
Application Gateway
instance. - V části Automatizace vyberte Exportovat šablonu a pak vyberte Stáhnout.
Stažený soubor ZIP obsahuje šablony JSON, Bash a powershellové skripty, které můžete použít k obnovení služby Application Gateway.
Ukázkový scénář
Podívejme se na imaginární službu Application Gateway, která spravuje provoz pro dva weby:
dev.contoso.com
– hostované v novém clusteru AKS s využitím služby Application Gateway a AGICprod.contoso.com
– hostovaná ve škálovací sadě virtuálních počítačů Azure
Ve výchozím nastavení předpokládá AGIC 100% vlastnictví služby Application Gateway, na kterou odkazuje. AGIC přepíše veškerou konfiguraci služby App Gateway. Pokud ručně vytvoříte naslouchací proces pro prod.contoso.com
(ve službě Application Gateway), aniž byste ho definovali v příchozím přenosu dat Kubernetes, AGIC odstraní prod.contoso.com
konfiguraci během několika sekund.
Abychom mohli nainstalovat AGIC a také obsluhovat prod.contoso.com
počítače škálovací sady virtuálních počítačů, musíme AGIC omezit pouze na konfiguraci dev.contoso.com
. To se usnadňuje vytvořením instance následujícího 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
Výše uvedený příkaz vytvoří AzureIngressProhibitedTarget
objekt. Díky tomu může AGIC (verze 0.8.0 a novější) vědět o existenci konfigurace prod.contoso.com
služby Application Gateway a explicitně ji instruuje, aby se zabránilo změně jakékoli konfigurace související s tímto názvem hostitele.
Povolení s novou instalací 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 je CRD
AzureIngressProhibitedTarget
nainstalovaný s: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 \ ingress-azure application-gateway-kubernetes-ingress/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
prohibit-all-targets
Objekt , jak název napovídá, zakáže AGIC měnit konfiguraci pro libovolného hostitele a cestu.
Instalace Helmu 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, rozšiřte 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
Až po vytvoření vlastního zákazu můžete výchozí zákaz odstranit, což je příliš široké:
kubectl delete AzureIngressProhibitedTarget prohibit-all-targets
Povolení existující instalace AGIC
Předpokládejme, že už máme funkční cluster AKS, Službu Application Gateway a nakonfigurovanou AGIC v našem clusteru. Máme příchozí přenos dat a prod.contoso.com
úspěšně obsluhujeme provoz z clusteru. Chceme přidat staging.contoso.com
do stávající služby Application Gateway, ale musíme ji hostovat na virtuálním počítači. Znovu použijeme stávající službu Application Gateway a ručně nakonfigurujeme naslouchací proces a back-endové fondy pro staging.contoso.com
. Ruční úprava konfigurace služby Application Gateway (pomocí portálu, rozhraní API ARM nebo Terraformu) by ale byla v konfliktu s předpoklady plného vlastnictví AGIC. Krátce po použití změn je AGIC přepíše nebo odstraní.
AGIC můžeme zakázat provádění změn v podmnožině konfigurace.
Vytvořte nový soubor YAML s názvem
AzureIngressProhibitedTarget
s následujícím fragmentem kódu: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 – přidejte naslouchací procesy, pravidla směrování, back-endy atd. Nový objekt, který jsme vytvořili (
manually-configured-staging-environment
), zakazuje AGIC přepisovat konfiguraci služby Application Gateway související sstaging.contoso.com
.