Application Gateway bejövőforgalom-vezérlő (AGIC) telepítése meglévő Application Gateway használatával
Az Application Gateway bejövőforgalom-vezérlője (AGIC) egy pod az Azure Kubernetes Service (AKS) fürtben. Az AGIC figyeli a Kubernetes bejövő erőforrásait, és létrehozza és alkalmazza az Application Gateway konfigurációját a Kubernetes-fürt állapota alapján.
Tipp.
Körvonal
- Előfeltételek
- Azure Resource Manager-hitelesítés (ARM)
- 1. lehetőség: Microsoft Entra Számítási feladat ID beállítása és Azure Identity létrehozása ARM-eken
- 2. lehetőség: Szolgáltatásnév beállítása
- Bejövőforgalom-vezérlő telepítése a Helm használatával
- Megosztott Application Gateway: Telepítse az AGIC-t olyan környezetben, ahol az Application Gateway meg van osztva egy AKS-fürt és/vagy más Azure-összetevő között.
Előfeltételek
Ez a dokumentum feltételezi, hogy már telepítve vannak a következő eszközök és infrastruktúra:
- AKS-fürt az Azure Container Networking Interface (CNI) használatával
- Application Gateway v2 ugyanabban a virtuális hálózaton, mint az AKS-fürt
- Microsoft Entra Számítási feladat ID konfigurálva az AKS-fürthöz
- A Cloud Shell az Azure Shell-környezet, amely parancssori felülettel rendelkezik,
kubectl
éshelm
telepítve vanaz
. Ezek az eszközök szükségesek az üzemelő példány konfigurálásához használt parancsokhoz.
Az AGIC telepítése előtt készítsen biztonsági másolatot az Application Gateway konfigurációjáról :
- Az Azure Portalon lépjen az Application Gateway-példányra.
- Az Automation szakaszban válassza az Exportálás sablon, majd a Letöltés lehetőséget.
A letöltött zip-fájl JSON-sablonokat, bash- és PowerShell-szkripteket tartalmaz, amelyeket az App Gateway visszaállításához használhat, ha az szükséges lesz
A Helm telepítése
A Helm a Kubernetes csomagkezelője, amelyet a application-gateway-kubernetes-ingress
csomag telepítéséhez használnak.
Feljegyzés
A Cloud Shell használata esetén nem kell telepítenie a Helmt. Az Azure Cloud Shell a Helm 3-at használja. Hagyja ki az első lépést, és csak adja hozzá az AGIC Helm-adattárat.
Telepítse a Helmt , és futtassa a következőket a Helm-csomag hozzáadásához
application-gateway-kubernetes-ingress
:- Kubernetes RBAC-kompatibilis AKS-fürt
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
Adja hozzá az AGIC Helm-adattárat:
helm repo add application-gateway-kubernetes-ingress https://appgwingress.blob.core.windows.net/ingress-azure-helm-package/ helm repo update
Azure Resource Manager-hitelesítés
Az AGIC kommunikál a Kubernetes API-kiszolgálóval és az Azure Resource Managerrel. Ehhez identitásra van szükség ezeknek az API-knak a eléréséhez.
Microsoft Entra Számítási feladat ID beállítása
Microsoft Entra Számítási feladat ID egy szoftveres számítási feladathoz hozzárendelt identitás, amely más szolgáltatások és erőforrások hitelesítéséhez és eléréséhez szükséges. Ez az identitás lehetővé teszi, hogy az AKS-pod használja ezt az identitást, és hitelesítést végezzen más Azure-erőforrásokkal. Ehhez a konfigurációhoz az AGIC-pod engedélyezésére van szükség, hogy HTTP-kéréseket küldhessenek az ARM-nek.
Az Azure CLI az account set parancsával beállíthatja, hogy egy adott előfizetés legyen az aktuális aktív előfizetés. Ezután az az identity create paranccsal hozzon létre egy felügyelt identitást. Az identitást a csomópont erőforráscsoportjában kell létrehozni. A csomópont erőforráscsoportja alapértelmezés szerint egy névhez van hozzárendelve, például MC_myResourceGroup_myAKSCluster_eastus.
az account set --subscription "subscriptionID"
az identity create --name "userAssignedIdentityName" --resource-group "resourceGroupName" --location "location" --subscription "subscriptionID"
A szerepkör-hozzárendeléshez futtassa a következő parancsot az
principalId
újonnan létrehozott identitás azonosításához:$resourceGroup="resource-group-name" $identityName="identity-name" az identity list -g $resourceGroup --query "[?name == '$identityName'].principalId | [0]" -o tsv
Adjon hozzáférést az identitásszolgáltatónak az Application Gatewayhez. Szüksége van az Application Gateway azonosítójára, amely a következőképpen néz ki:
/subscriptions/A/resourceGroups/B/providers/Microsoft.Network/applicationGateways/C
. Először kérje le az Application Gateway-azonosítók listáját az előfizetésében az alábbi parancs futtatásával:az network application-gateway list --query '[].id'
Az identitás-közreműködői hozzáférés hozzárendeléséhez futtassa a következő parancsot:
$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
Adjon hozzáférést az identitásolvasónak az Application Gateway erőforráscsoporthoz. Az erőforráscsoport azonosítója a következőképpen néz ki:
/subscriptions/A/resourceGroups/B
. Az összes erőforráscsoportot a következőkkel szerezheti be: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
Feljegyzés
Győződjön meg arról, hogy az AGIC által használt identitás rendelkezik a Microsoft.Network/virtualNetworks/subnets/join/action engedéllyel ahhoz az alhálózathoz, ahol az Application Gateway telepítve van. Ha egy egyéni szerepkör nincs meghatározva ezzel az engedéllyel, használhatja a beépített hálózati közreműködői szerepkört, amely a Microsoft.Network/virtualNetworks/alhálózatok/csatlakozás/művelet engedélyét tartalmazza.
Szolgáltatásnév használata
A Kubernetes-titkos kóddal AGIC-hozzáférést is biztosíthat az ARM-hez.
Hozzon létre egy Active Directory-szolgáltatásnevet, és kódolja a base64-et. A JSON-blob Kubernetesbe való mentéséhez a base64 kódolás szükséges.
az ad sp create-for-rbac --role Contributor --sdk-auth | base64 -w0
Adja hozzá a base64 kódolású JSON-blobot a
helm-config.yaml
fájlhoz. További információhelm-config.yaml
a következő szakaszban található.armAuth: type: servicePrincipal secretJSON: <Base64-Encoded-Credentials>
Az Azure-alkalmazás Átjáró bejövőforgalom-vezérlő bővítményének üzembe helyezése
Bejövőforgalom-vezérlő üzembehelyezési jegyzékének létrehozása
---
# 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
Bejövőforgalom-vezérlő üzembe helyezése
$namespace="namespace"
$file="pet-supplies-ingress.yaml"
kubectl apply -f $file -n $namespace
Bejövőforgalom-vezérlő telepítése Helm-diagramként
Az első néhány lépésben a Helm Tillert telepítjük a Kubernetes-fürtre. Az AGIC Helm-csomag telepítése a Cloud Shell használatával:
Adja hozzá a helm-adattárat
application-gateway-kubernetes-ingress
, és végezzen helm-frissítésthelm repo add application-gateway-kubernetes-ingress https://appgwingress.blob.core.windows.net/ingress-azure-helm-package/ helm repo update
Töltse le az AGIC-t konfiguráló helm-config.yaml fájlt:
wget https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/docs/examples/sample-helm-config.yaml -O helm-config.yaml
Vagy másolja a következő YAML-fájlt:
# 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>
Szerkessze a helm-config.yaml fájlt, és töltse ki az és
appgw
armAuth
a .Feljegyzés
Az
<identity-client-id>
előző szakaszban beállított Microsoft Entra Számítási feladat ID tulajdonsága. Ezeket az információkat a következő parancs futtatásával kérdezheti le:az identity show -g <resourcegroup> -n <identity-name>
hol található az az erőforráscsoport, amely<resourcegroup>
az AKS-fürthöz, az Application Gatewayhez és a felügyelt identitáshoz kapcsolódó infrastruktúra-erőforrásokat üzemelteti.Helm-diagram
application-gateway-kubernetes-ingress
telepítése azhelm-config.yaml
előző lépés konfigurációjávalhelm install -f <helm-config.yaml> application-gateway-kubernetes-ingress/ingress-azure
Egy lépésben kombinálhatja a Helm és a
helm-config.yaml
Helm parancsot is: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
Ellenőrizze az újonnan létrehozott pod naplóját annak ellenőrzéséhez, hogy megfelelően indult-e
Ebből az útmutatóból megtudhatja, hogyan tehet közzé egy AKS-szolgáltatást HTTP vagy HTTPS használatával az interneten egy Azure-alkalmazás-átjáró használatával.
Megosztott application Gateway
Alapértelmezés szerint az AGIC teljes tulajdonjogot feltételez az Application Gatewayhez, amelyhez kapcsolódik. Az AGIC 0.8.0-s és újabb verziói egyetlen Application Gatewayt oszthatnak meg más Azure-összetevőkkel. Használhatjuk például ugyanazt az Application Gatewayt egy virtuálisgép-méretezési csoportban és egy AKS-fürtön üzemeltetett alkalmazáshoz.
A beállítás engedélyezése előtt készítsen biztonsági másolatot az Application Gateway konfigurációjáról :
- Az Azure Portalon lépjen a példányra
Application Gateway
- Az Automation szakaszban válassza az Exportálás sablon, majd a Letöltés lehetőséget.
A letöltött zip-fájl JSON-sablonokat, bash- és PowerShell-szkripteket tartalmaz, a segítségével visszaállíthatja az Application Gatewayt
Példaforgatókönyv
Tekintsünk meg egy képzeletbeli Application Gatewayt, amely két webhely forgalmát kezeli:
dev.contoso.com
- új AKS-fürtön üzemeltetve az Application Gateway és az AGIC használatávalprod.contoso.com
- Azure-beli virtuálisgép-méretezési csoportban üzemeltetve
Az alapértelmezett beállításokkal az AGIC 100%-os tulajdonjogot feltételez a hivatkozott Application Gatewayben. Az AGIC felülírja az App Gateway összes konfigurációját. Ha manuálisan hoz létre figyelőt prod.contoso.com
(az Application Gatewayen) anélkül, hogy meghatározta volna a Kubernetes bejövőforgalomban, az AGIC másodperceken belül törli a prod.contoso.com
konfigurációt.
Az AGIC telepítéséhez és a virtuálisgép-méretezési csoport gépeiről való kiszolgáláshoz prod.contoso.com
az AGIC-t csak konfigurálásra dev.contoso.com
kell korlátoznunk. Ezt a következő CRD példányosításával lehet megkönnyíteni:
cat <<EOF | kubectl apply -f -
apiVersion: "appgw.ingress.k8s.io/v1"
kind: AzureIngressProhibitedTarget
metadata:
name: prod-contoso-com
spec:
hostname: prod.contoso.com
EOF
A fenti parancs létrehoz egy objektumot AzureIngressProhibitedTarget
. Így az AGIC (0.8.0-s és újabb verzió) tisztában van az Application Gateway konfigurációjának prod.contoso.com
meglétével, és kifejezetten arra utasítja, hogy ne módosítsa az adott gazdagépnévhez kapcsolódó konfigurációt.
Engedélyezés új AGIC-telepítéssel
Ha az AGIC-t (0.8.0-s és újabb verzió) az Application Gateway konfigurációjának egy részhalmazára szeretné korlátozni, módosítsa a sablont helm-config.yaml
.
A szakasz alatt adja hozzá shared
a appgw:
kulcsot, és állítsa be a következőretrue
: .
appgw:
subscriptionId: <subscriptionId> # existing field
resourceGroup: <resourceGroupName> # existing field
name: <applicationGatewayName> # existing field
shared: true # <<<<< Add this field to enable shared Application Gateway >>>>>
Alkalmazza a Helm-módosításokat:
Győződjön meg arról, hogy a
AzureIngressProhibitedTarget
CRD telepítve van a következőkkel:kubectl apply -f https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/7b55ad194e7582c47589eb9e78615042e00babf3/crds/AzureIngressProhibitedTarget-v1-CRD-v1.yaml
Helm frissítése:
helm upgrade \ --recreate-pods \ -f helm-config.yaml \ ingress-azure application-gateway-kubernetes-ingress/ingress-azure
Ennek eredményeképpen az AKS-fürt egy új, AzureIngressProhibitedTarget
úgynevezett :prohibit-all-targets
kubectl get AzureIngressProhibitedTargets prohibit-all-targets -o yaml
Az objektum prohibit-all-targets
– ahogy a neve is mutatja – megtiltja az AGIC-nek, hogy bármilyen gazdagéphez és elérési úthoz módosítsa a konfigurációt.
A Helm telepíti az appgw.shared=true
AGIC-t, de nem módosítja az Application Gatewayt.
Engedélyek bővítése
Mivel a Helm és appgw.shared=true
az alapértelmezett prohibit-all-targets
letiltja az AGIC-t egy konfiguráció alkalmazásában, szélesítse az AGIC-engedélyeket:
Hozzon létre egy új YAML-fájlt
AzureIngressProhibitedTarget
a megadott beállítást tartalmazó következő kódrészlettel: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
Csak a saját egyéni tiltás létrehozása után törölheti az alapértelmezettet, amely túl széles:
kubectl delete AzureIngressProhibitedTarget prohibit-all-targets
Meglévő AGIC-telepítés engedélyezése
Tegyük fel, hogy már van egy működő AKS-fürtünk, az Application Gateway és a konfigurált AGIC a fürtben. Rendelkezünk bejövő forgalommal prod.contoso.com
, és sikeresen kiszolgáljuk a fürtből érkező forgalmat. Szeretnénk hozzáadni staging.contoso.com
a meglévő Application Gatewayhez, de egy virtuális gépen kell üzemeltetni. Újra felhasználjuk a meglévő Application Gatewayt, és manuálisan konfigurálunk egy figyelőt és egy háttérkészletet.staging.contoso.com
Az Application Gateway konfigurációjának manuális finomhangolása (portál, ARM API-k vagy Terraform használatával) azonban ütközne az AGIC teljes tulajdonjogra vonatkozó feltételezéseivel. Röviddel a módosítások alkalmazása után az AGIC felülírja vagy törli őket.
Megtilthatjuk, hogy az AGIC módosításokat hajt végre a konfiguráció egy részhalmazán.
Hozzon létre egy új YAML-fájlt
AzureIngressProhibitedTarget
a következő kódrészlettel: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
Az újonnan létrehozott objektum megtekintése:
kubectl get AzureIngressProhibitedTargets
Az Application Gateway konfigurációjának módosítása az Azure Portalról – figyelők, útválasztási szabályok, háttérrendszerek stb. hozzáadása. A létrehozott új objektum (
manually-configured-staging-environment
) megtiltja az AGIC-nek, hogy felülírja a kapcsolódó Application Gateway-konfigurációtstaging.contoso.com
.