Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Pokyny v tomto článku předpokládají, že chcete nainstalovat kontroler příchozího přenosu dat služby Application Gateway (AGIC) v prostředí, které nemá žádné existující komponenty.
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.
Instalace požadovaných nástrojů příkazového řádku
Pro všechny operace příkazového řádku v tomto článku doporučujeme používat Azure Cloud Shell . Cloud Shell můžete otevřít výběrem tlačítka Spustit Cloud Shell .
Případně můžete cloud Shell otevřít na webu Azure Portal výběrem jeho ikony.
Vaše instance Cloud Shellu 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:
-
az: Azure CLI (pokyny k instalaci) -
kubectl: Nástroj příkazového řádku Kubernetes (pokyny k instalaci) -
helm: Správce balíčků Kubernetes (pokyny k instalaci) -
jq: Procesor JSON příkazového řádku (pokyny k instalaci)
Vytvoření identity
Pomocí následujícího postupu vytvořte objekt služby hlavního účtu Microsoft Entra.
Vytvořte instanční objekt Active Directory, který zahrnuje roli řízení přístupu na základě role (RBAC) Azure:
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)Zaznamenejte
appIdhodnoty apasswordhodnoty z výstupu JSON. Budete je používat v dalších krocích.appIdK získáníidnového instančního objektu použijte hodnotu z výstupu předchozího příkazu:objectId=$(az ad sp show --id $appId --query "id" -o tsv)Výstupem tohoto příkazu je
objectId. Tuto hodnotu si poznamenejte, protože ji použijete v dalším kroku.Vytvořte soubor parametrů, který použijete v nasazení šablony Azure Resource Manageru (šablona ARM):
cat <<EOF > parameters.json { "aksServicePrincipalAppId": { "value": "$appId" }, "aksServicePrincipalClientSecret": { "value": "$password" }, "aksServicePrincipalObjectId": { "value": "$objectId" }, "aksEnableRBAC": { "value": false } } EOFPokud chcete nasadit cluster Kubernetes s podporou RBAC, nastavte
aksEnableRBACna hodnotutrue.
Nasazení komponent
Následující postup přidá tyto komponenty do vašeho předplatného:
- Služba Azure Kubernetes (AKS)
- Azure Application Gateway v2
- Virtuální síť Azure se dvěma podsítěmi
- Veřejná IP adresa
- Spravovaná identita, kterou bude používat ID úlohy Microsoft Entra .
Nasazení komponent:
Stáhněte si šablonu ARM:
wget https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/deploy/azuredeploy.json -O template.jsonNasaďte šablonu ARM pomocí Azure CLI a podle potřeby ji upravte. 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.jsonPo 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í AGIC
Podle pokynů v předchozí části jste vytvořili a nakonfigurovali nový cluster AKS a nasazení služby Application Gateway. Teď jste 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
V následujících krocích je potřeba nastavit příkaz kubectl , který použijete 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žijete az (Azure CLI).
Získejte přihlašovací údaje pro nově nasazenou instanci AKS. Další informace o následujících příkazech najdete v Pomocí Azure RBAC pro autorizaci Kubernetes s kubectl.
# use the deployment-outputs.json file 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 ID úlohy Microsoft Entra
ID úlohy Microsoft Entra poskytuje přístup na základě tokenů k Azure Resource Manageru.
ID úlohy Microsoft Entra přidá do clusteru Kubernetes následující komponenty:
- Definice vlastních prostředků Kubernetes (CRDs):
AzureIdentity,AzureAssignedIdentity,AzureIdentityBinding - Komponenta spravovaného kontroleru identit (MIC)
- Komponenta NMI (Node Managed Identity)
Pokud chcete do clusteru nainstalovat ID úlohy Microsoft Entra, použijte jeden z následujících příkazů:
Cluster AKS s podporou RBAC Kubernetes:
kubectl create -f https://raw.githubusercontent.com/Azure/aad-pod-identity/master/deploy/infra/deployment-rbac.yamlCluster AKS bez podpory RBAC v Kubernetes:
kubectl create -f https://raw.githubusercontent.com/Azure/aad-pod-identity/master/deploy/infra/deployment.yaml
Přidání úložiště Helm
Helm je správce balíčků pro Kubernetes. Používá se k instalaci balíčku application-gateway-kubernetes-ingress.
Pokud používáte Cloud Shell, nemusíte instalovat Helm. Cloud Shell se dodává s Helmem verze 3. Spuštěním jednoho z následujících příkazů přidejte úložiště AGIC 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-saCluster AKS bez podpory RBAC v Kubernetes:
helm init
Instalace chartu Helm kontroleru příchozího přenosu dat
deployment-outputs.jsonPomocí souboru, který jste vytvořili dříve, 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)Stáhněte si
helm-config.yaml, který nastaví AGIC:wget https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/docs/examples/sample-helm-config.yaml -O helm-config.yamlNebo 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 accessible 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>Upravte nově stažený
helm-config.yamlsoubor a vyplňte oddíly proappgwaarmAuth: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.yamlPoznámka:
Pokud nasazujete do suverénního cloudu (například Azure Government), musíte přidat
appgw.environmentparametr konfigurace a nastavit ho na odpovídající hodnotu.Tady jsou hodnoty:
-
verbosityLevel: Nastaví úroveň podrobností infrastruktury protokolování AGIC. Možné hodnoty najdete v tématu Ú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:aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e. -
appgw.resourceGroup: Název skupiny prostředků Azure, ve které jste vytvořili nasazení služby Application Gateway. Příklad:app-gw-resource-group. -
appgw.name: Název nasazení služby Application Gateway. Příklad:applicationgatewayd0f0. -
appgw.shared: Logický příznak, který má výchozí hodnotufalse. Nastavte to natrue, pokud potřebujete sdílené nasazení služby Application Gateway. -
kubernetes.watchNamespace: Určuje 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ýtaadPodIdentityneboservicePrincipal. -
armAuth.identityResourceID: ID prostředku spravované identity v Azure. -
armAuth.identityClientID: Identifikátor klienta identity. -
armAuth.secretJSON: Potřebné pouze v případě, když jako typ tajemství zvolíte instanční objekt (to znamená, když nastavítearmAuth.typenaservicePrincipal).
Poznámka:
Během předchozích kroků jste vytvořili hodnoty
identityResourceIDaidentityClientIDpro nasazení komponent. Můžete je získat znovu pomocí následujícího příkazu:az identity show -g <resource-group> -n <identity-name>V příkazu
<resource-group>je skupina prostředků pro nasazení Application Gateway. Zástupný<identity-name>symbol je název vytvořené identity. Všechny identity pro konkrétní předplatné můžete vypsat pomocíaz identity list.-
Nainstalujte balíček AGIC:
helm install agic-controller oci://mcr.microsoft.com/azure-application-gateway/charts/ingress-azure --version 1.8.1 -f helm-config.yaml
Instalace ukázkové aplikace
Teď, když máte nainstalovanou službu Application Gateway, AKS a AGIC, můžete ukázkovou aplikaci nainstalovat 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
Jako další možnost můžete:
Stáhněte si předchozí soubor YAML:
curl https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/docs/examples/aspnetapp.yaml -o aspnetapp.yamlPoužijte soubor YAML:
kubectl apply -f aspnetapp.yaml
Související obsah
- Další příklady, jak zveřejnit službu AKS na internetu prostřednictvím protokolu HTTP nebo HTTPS pomocí služby Application Gateway, najdete v tomto návodu.
- Informace o službě Application Gateway pro kontejnery najdete v tomto článku s přehledem.