AGIC installeren met behulp van een nieuwe Application Gateway-implementatie
In de instructies in dit artikel wordt ervan uitgegaan dat u de Application Gateway-ingangscontroller (AGIC) wilt installeren in een omgeving die geen vooraf bestaande onderdelen bevat.
Tip
Overweeg Application Gateway for Containers voor uw Kubernetes-oplossing voor inkomend verkeer. Zie quickstart: Application Gateway for Containers ALB Controller implementeren voor meer informatie.
Vereiste opdrachtregelprogramma's installeren
We raden het gebruik van Azure Cloud Shell aan voor alle opdrachtregelbewerkingen in dit artikel. U kunt Cloud Shell openen door de knop Cloud Shell starten te selecteren.
U kunt Cloud Shell ook openen vanuit Azure Portal door het bijbehorende pictogram te selecteren.
Uw Cloud Shell-exemplaar beschikt al over alle benodigde hulpprogramma's. Als u ervoor kiest om een andere omgeving te gebruiken, controleert u of de volgende opdrachtregelprogramma's zijn geïnstalleerd:
az
: Azure CLI (installatie-instructies)kubectl
: Kubernetes-opdrachtregelprogramma (installatie-instructies)helm
: Kubernetes Package Manager (installatie-instructies)jq
: Opdrachtregel JSON-processor (installatie-instructies)
Een identiteit maken
Gebruik de volgende stappen om een Microsoft Entra-service-principalobject te maken.
Maak een Active Directory-service-principal, die een RBAC-rol (op rollen gebaseerd toegangsbeheer) van Azure bevat:
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)
Noteer de
appId
enpassword
waarden uit de JSON-uitvoer. U gebruikt deze in de volgende stappen.Gebruik de
appId
waarde uit de uitvoer van de vorige opdracht om deid
nieuwe service-principal op te halen:objectId=$(az ad sp show --id $appId --query "id" -o tsv)
De uitvoer van deze opdracht is
objectId
. Noteer deze waarde, omdat u deze in de volgende stap gaat gebruiken.Maak het parameterbestand dat u gaat gebruiken in de ARM-sjabloonimplementatie (Azure Resource Manager):
cat <<EOF > parameters.json { "aksServicePrincipalAppId": { "value": "$appId" }, "aksServicePrincipalClientSecret": { "value": "$password" }, "aksServicePrincipalObjectId": { "value": "$objectId" }, "aksEnableRBAC": { "value": false } } EOF
Als u een Kubernetes RBAC-cluster wilt implementeren, stelt u deze in
aksEnableRBAC
optrue
.
Onderdelen implementeren
Met de volgende procedure worden deze onderdelen aan uw abonnement toegevoegd:
- Azure Kubernetes Service (AKS)
- Azure-toepassing Gateway v2
- Azure Virtual Network met twee subnetten
- Openbaar IP-adres
- Beheerde identiteit, die door Microsoft Entra Pod Identity wordt gebruikt.
De onderdelen implementeren:
Download de ARM-sjabloon:
wget https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/deploy/azuredeploy.json -O template.json
Implementeer de ARM-sjabloon met behulp van de Azure CLI en wijzig deze indien nodig. De implementatie kan maximaal 5 minuten duren.
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
Nadat de implementatie is voltooid, downloadt u de uitvoer van de implementatie naar een bestand met de naam
deployment-outputs.json
:az deployment group show -g $resourceGroupName -n $deploymentName --query "properties.outputs" -o json > deployment-outputs.json
AGIC instellen
Met de instructies in de vorige sectie hebt u een nieuw AKS-cluster en een Application Gateway-implementatie gemaakt en geconfigureerd. U bent nu klaar om een voorbeeld-app en een toegangsbeheerobjectcontroller te implementeren in uw nieuwe Kubernetes-infrastructuur.
Kubernetes-referenties instellen
Voor de volgende stappen moet u de kubectl-opdracht instellen, die u gebruikt om verbinding te maken met uw nieuwe Kubernetes-cluster. Cloud Shell is kubectl
al geïnstalleerd. U gebruikt az
(Azure CLI) om referenties voor Kubernetes te verkrijgen.
Haal referenties op voor uw zojuist geïmplementeerde AKS-exemplaar. Zie Azure RBAC gebruiken voor Kubernetes-autorisatie met kubectl voor meer informatie over de volgende opdrachten.
# 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
Microsoft Entra Pod Identity installeren
Microsoft Entra Pod Identity biedt op tokens gebaseerde toegang tot Azure Resource Manager.
Microsoft Entra Pod Identity voegt de volgende onderdelen toe aan uw Kubernetes-cluster:
- Aangepaste Kubernetes-resourcedefinities (CRD's):
AzureIdentity
, ,AzureAssignedIdentity
AzureIdentityBinding
- MIC-onderdeel (Managed Identity Controller)
- NMI-onderdeel (Node Managed Identity)
Als u Microsoft Entra Pod Identity wilt installeren in uw cluster, gebruikt u een van de volgende opdrachten:
AKS-cluster met Kubernetes RBAC:
kubectl create -f https://raw.githubusercontent.com/Azure/aad-pod-identity/master/deploy/infra/deployment-rbac.yaml
Kubernetes RBAC-uitgeschakeld AKS-cluster:
kubectl create -f https://raw.githubusercontent.com/Azure/aad-pod-identity/master/deploy/infra/deployment.yaml
De Helm-opslagplaats toevoegen
Helm is een pakketbeheerder voor Kubernetes. U gebruikt het om het application-gateway-kubernetes-ingress
pakket te installeren.
Als u Cloud Shell gebruikt, hoeft u Helm niet te installeren. Cloud Shell wordt geleverd met Helm versie 3. Voer een van de volgende opdrachten uit om de AGIC Helm-opslagplaats toe te voegen:
AKS-cluster met 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
Kubernetes RBAC-uitgeschakeld AKS-cluster:
helm init
De Helm-grafiek van de ingangscontroller installeren
Gebruik het
deployment-outputs.json
bestand dat u eerder hebt gemaakt om de volgende variabelen te maken: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)
Downloaden
helm-config.yaml
, waarmee AGIC wordt geconfigureerd:wget https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/docs/examples/sample-helm-config.yaml -O helm-config.yaml
Of kopieer het volgende YAML-bestand:
# 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>
Bewerk het zojuist gedownloade
helm-config.yaml
bestand en vul de secties in voorappgw
enarmAuth
: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
Notitie
Als u implementeert in een onafhankelijke cloud (bijvoorbeeld Azure Government), moet u de
appgw.environment
configuratieparameter toevoegen en deze instellen op de juiste waarde.Dit zijn de waarden:
verbosityLevel
: Hiermee stelt u het uitgebreidheidsniveau van de AGIC-logboekregistratie-infrastructuur in. Zie Logboekregistratieniveaus voor mogelijke waarden.appgw.environment
: Hiermee stelt u de cloudomgeving in. Mogelijke waarden:AZURECHINACLOUD
,AZUREGERMANCLOUD
,AZUREPUBLICCLOUD
, .AZUREUSGOVERNMENTCLOUD
appgw.subscriptionId
: de Azure-abonnements-id waarin Application Gateway zich bevindt. Voorbeeld:aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e
.appgw.resourceGroup
: Naam van de Azure-resourcegroep waarin u de Application Gateway-implementatie hebt gemaakt. Voorbeeld:app-gw-resource-group
.appgw.name
: Naam van de implementatie van Application Gateway. Voorbeeld:applicationgatewayd0f0
.appgw.shared
: Booleaanse vlag die standaard wordt ingesteld opfalse
. Stel deze in optrue
als u een gedeelde Application Gateway-implementatie nodig hebt.kubernetes.watchNamespace
: Hiermee geeft u de naamruimte op die AGIC moet bekijken. De waarde van de naamruimte kan één tekenreekswaarde of een door komma's gescheiden lijst met naamruimten zijn.armAuth.type
: kan zijnaadPodIdentity
ofservicePrincipal
.armAuth.identityResourceID
: Resource-id van de beheerde Azure-identiteit.armAuth.identityClientID
: Client-id van de identiteit.armAuth.secretJSON
: Alleen nodig wanneer u een service-principal kiest als het geheime type (dat wil gezegd, wanneer u insteltarmAuth.type
opservicePrincipal
).
Notitie
U hebt de
identityResourceID
enidentityClientID
waarden gemaakt tijdens de eerdere stappen voor het implementeren van onderdelen. U kunt ze opnieuw verkrijgen met behulp van de volgende opdracht:az identity show -g <resource-group> -n <identity-name>
In de opdracht
<resource-group>
is de resourcegroep van uw Application Gateway-implementatie. De<identity-name>
tijdelijke aanduiding is de naam van de gemaakte identiteit. U kunt alle identiteiten voor een bepaald abonnement weergeven met behulp vanaz identity list
.Installeer het AGIC-pakket:
helm install agic-controller oci://mcr.microsoft.com/azure-application-gateway/charts/ingress-azure --version 1.7.5 -f helm-config.yaml
Een voorbeeld-app installeren
Nu u Application Gateway, AKS en AGIC hebt geïnstalleerd, kunt u een voorbeeld-app installeren via 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
U kunt ook:
Download het voorgaande YAML-bestand:
curl https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/docs/examples/aspnetapp.yaml -o aspnetapp.yaml
Pas het YAML-bestand toe:
kubectl apply -f aspnetapp.yaml
Gerelateerde inhoud
- Zie deze handleiding voor meer voorbeelden over het beschikbaar maken van een AKS-service op internet via HTTP of HTTPS met behulp van Application Gateway.
- Zie dit overzichtsartikel voor informatie over Application Gateway for Containers.