Postup instalace kontroleru příchozího přenosu dat služby Application Gateway (AGIC) pomocí nové služby Application Gateway
Následující pokyny předpokládají, že se kontroler příchozího přenosu dat služby Application Gateway (AGIC) nainstaluje v prostředí bez existujících komponent.
Tip
Podívejte se také na téma Co je Application Gateway pro kontejnery.
Požadované nástroje příkazového řádku
Pro všechny níže uvedené operace příkazového řádku doporučujeme používat Azure Cloud Shell . Spusťte prostředí z shell.azure.com nebo kliknutím na odkaz:
Případně spusťte Cloud Shell z webu Azure Portal pomocí následující ikony:
Azure Cloud Shell 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 instalacikubectl
– Nástroj příkazového řádku Kubernetes: pokyny k instalacihelm
– Správce balíčků Kubernetes: pokyny k instalacijq
– procesor JSON příkazového řádku: pokyny k instalaci
Vytvoření identity
Pomocí následujícího postupu vytvořte objekt instančního objektu Microsoft Entra. Poznamenejte si appId
hodnoty , password
a objectId
hodnoty – tyto hodnoty se použijí v následujících krocích.
Vytvoření instančního objektu AD (další informace o Azure RBAC):
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)
Hodnoty
appId
apassword
hodnoty z výstupu JSON se použijí v následujících krocích.appId
Pomocí výstupu předchozího příkazu získejteid
nový instanční objekt:objectId=$(az ad sp show --id $appId --query "id" -o tsv)
Výstupem tohoto příkazu je
objectId
, který se použije v následující šabloně Azure Resource Manageru.Vytvořte soubor parametrů, který se použije v nasazení šablony Azure Resource Manageru později.
cat <<EOF > parameters.json { "aksServicePrincipalAppId": { "value": "$appId" }, "aksServicePrincipalClientSecret": { "value": "$password" }, "aksServicePrincipalObjectId": { "value": "$objectId" }, "aksEnableRBAC": { "value": false } } EOF
Pokud chcete nasadit cluster s podporou RBAC Kubernetes, nastavte pole na
aksEnableRBAC
true
Nasazení komponent
Tento krok přidá do vašeho předplatného následující komponenty:
- Azure Kubernetes Service
- Application Gateway v2
- Virtuální síť se dvěma podsítěmi
- Veřejná IP adresa
- Spravovaná identita, kterou bude používat identita podu Microsoft Entra
Stáhněte si šablonu Azure Resource Manageru a podle potřeby ji upravte.
wget https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/deploy/azuredeploy.json -O template.json
Nasaďte šablonu Azure Resource Manageru pomocí Azure CLI. 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.json
Po 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í kontroleru příchozího přenosu dat služby Application Gateway
S pokyny v předchozí části jsme vytvořili a nakonfigurovali nový cluster AKS a službu Application Gateway. Teď jsme 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
Pro následující kroky potřebujeme nastavit příkaz kubectl , který použijeme 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žijeme az
rozhraní příkazového řádku.
Získejte přihlašovací údaje pro nově nasazenou službu AKS (další informace):
# use the deployment-outputs.json 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 identity podu Microsoft Entra
Identita podu Microsoft Entra poskytuje přístup na základě tokenů k Azure Resource Manageru (ARM).
Identita podu Microsoft Entra přidá do clusteru Kubernetes následující komponenty:
- Kubernetes CRDs:
AzureIdentity
,AzureAssignedIdentity
AzureIdentityBinding
- Komponenta spravovaného kontroleru identit (MIC)
- Komponenta NMI (Node Managed Identity)
Instalace identity podu Microsoft Entra do clusteru:
Cluster AKS s podporou RBAC Kubernetes
kubectl create -f https://raw.githubusercontent.com/Azure/aad-pod-identity/master/deploy/infra/deployment-rbac.yaml
Cluster AKS zakázání RBAC Kubernetes
kubectl create -f https://raw.githubusercontent.com/Azure/aad-pod-identity/master/deploy/infra/deployment.yaml
Instalace nástroje Helm
Helm je správce balíčků pro Kubernetes. Použijeme ho application-gateway-kubernetes-ingress
k instalaci 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
Cluster AKS zakázání RBAC Kubernetes
helm init
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
Install Ingress Controller Helm Chart
deployment-outputs.json
Použijte soubor vytvořený výše a 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ý nakonfiguruje 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 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 acessible 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.yaml a vyplňte oddíly
appgw
aarmAuth
.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.yaml
Poznámka:
Pro nasazení do suverénních cloudů (např. Azure Government)
appgw.environment
musí být parametr konfigurace přidán a nastaven na odpovídající hodnotu, jak je uvedeno níže.Hodnoty:
verbosityLevel
: Nastaví úroveň podrobností infrastruktury protokolování AGIC. Informace o možných hodnotách najdete v části Ú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:a123b234-a3b4-557d-b2df-a0bc12de1234
appgw.resourceGroup
: Název skupiny prostředků Azure, ve které byla služba Application Gateway vytvořena. Příklad:app-gw-resource-group
appgw.name
: Název služby Application Gateway. Příklad:applicationgatewayd0f0
appgw.shared
: Tento logický příznak by měl být ve výchozím nastavení nastaven nafalse
. Nastavte natrue
to, abyste potřebovali sdílenou službu Application Gateway.kubernetes.watchNamespace
: Zadejte 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ýtaadPodIdentity
neboservicePrincipal
armAuth.identityResourceID
: ID prostředku spravované identity AzurearmAuth.identityClientID
: ID klienta identity. Další informace o identityClientID najdete níže.armAuth.secretJSON
: Vyžaduje se pouze v případě, že je vybraný typ tajného klíče instančního objektu (pokudarmAuth.type
je nastaven naservicePrincipal
hodnotu ).
Poznámka:
identityClientID
Jedná se oidentityResourceID
hodnoty, které byly vytvořeny během kroků Nasazení komponent, a lze je získat znovu pomocí následujícího příkazu:az identity show -g <resource-group> -n <identity-name>
<resource-group>
ve výše uvedeném příkazu je skupina prostředků vaší služby Application Gateway.<identity-name>
je název vytvořené identity. Všechny identity pro dané předplatné je možné uvést pomocí:az identity list
Nainstalujte balíček kontroleru příchozího přenosu dat služby Application Gateway:
helm install -f helm-config.yaml --generate-name application-gateway-kubernetes-ingress/ingress-azure
Instalace ukázkové aplikace
Teď, když máme nainstalovanou službu Application Gateway, AKS a AGIC, můžeme nainstalovat ukázkovou aplikaci 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
Alternativně můžete:
Stáhněte si výše uvedený soubor YAML:
curl https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/docs/examples/aspnetapp.yaml -o aspnetapp.yaml
Použijte soubor YAML:
kubectl apply -f aspnetapp.yaml
Další příklady
Tento průvodce postupy obsahuje další příklady, jak zpřístupnit službu AKS prostřednictvím protokolu HTTP nebo HTTPS pro internet se službou Application Gateway.