Установка AGIC с помощью нового развертывания Шлюз приложений
Инструкции в этой статье предполагают, что вы хотите установить контроллер входящего трафика Шлюз приложений (AGIC) в среде, которая не имеет предварительно созданных компонентов.
Совет
Рассмотрите возможность Шлюз приложений для контейнеров для решения входящего трафика Kubernetes. Дополнительные сведения см. в кратком руководстве по развертыванию Шлюз приложений контроллера ALB контейнеров.
Установка необходимых средств командной строки
Мы рекомендуем использовать Azure Cloud Shell для всех операций командной строки в этой статье. Чтобы открыть Cloud Shell, нажмите кнопку "Запустить Cloud Shell ".
Кроме того, откройте Cloud Shell из портал Azure, выбрав его значок.
У экземпляра Cloud Shell уже есть все необходимые средства. Если вы решили использовать другую среду, убедитесь, что установлены следующие средства командной строки:
az
: Azure CLI (инструкции по установке)kubectl
: средство командной строки Kubernetes (инструкции по установке)helm
: диспетчер пакетов Kubernetes (инструкции по установке)jq
: обработчик JSON командной строки (инструкции по установке)
Создание удостоверения
Чтобы создать объект субъекта-службы Microsoft Entra, выполните следующие действия.
Создайте субъект-службу Active Directory, который включает роль управления доступом на основе ролей 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)
appId
Запишите иpassword
значения из выходных данных JSON. Вы будете использовать их в следующих шагах.appId
Используйте значение из выходных данных предыдущей команды, чтобы получитьid
новый субъект-службу:objectId=$(az ad sp show --id $appId --query "id" -o tsv)
Выходные данные этой команды.
objectId
Запишите это значение, так как вы будете использовать его на следующем шаге.Создайте файл параметров, который будет использоваться в развертывании шаблона Azure Resource Manager (шаблон ARM):
cat <<EOF > parameters.json { "aksServicePrincipalAppId": { "value": "$appId" }, "aksServicePrincipalClientSecret": { "value": "$password" }, "aksServicePrincipalObjectId": { "value": "$objectId" }, "aksEnableRBAC": { "value": false } } EOF
Чтобы развернуть кластер с поддержкой Kubernetes RBAC, установите значение
aksEnableRBAC
true
.
Развертывать компоненты.
Следующая процедура добавляет эти компоненты в подписку:
- Служба Azure Kubernetes (AKS)
- Шлюз приложений Azure версии 2
- Azure виртуальная сеть с двумя подсетями
- Общедоступный IP-адрес
- Управляемое удостоверение, которое будет использовать удостоверение Microsoft Entra Pod.
Чтобы развернуть компоненты, выполните следующие действия.
Скачайте шаблон ARM:
wget https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/deploy/azuredeploy.json -O template.json
Разверните шаблон ARM с помощью Azure CLI и измените его по мере необходимости. Развертывание может занять до 5 минут.
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
После завершения развертывания скачайте выходные данные развертывания в файл с именем
deployment-outputs.json
:az deployment group show -g $resourceGroupName -n $deploymentName --query "properties.outputs" -o json > deployment-outputs.json
Настройка AGIC
Инструкции, описанные в предыдущем разделе, вы создали и настроили новый кластер AKS и развертывание Шлюз приложений. Теперь вы готовы развернуть пример приложения и контроллер входящего трафика в новую инфраструктуру Kubernetes.
Настройка учетных данных Kubernetes
Для выполнения следующих действий необходимо настроить команду kubectl , которая будет использоваться для подключения к новому кластеру Kubernetes. В Cloud Shell уже установлен компонент kubectl
. Вы будете использовать az
(Azure CLI) для получения учетных данных для Kubernetes.
Получите учетные данные для только что развернутого экземпляра AKS. Дополнительные сведения о следующих командах см. в статье "Использование Azure RBAC для авторизации Kubernetes с 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
Установка удостоверений Pod Microsoft Entra
Microsoft Entra Pod Identity предоставляет доступ на основе маркеров к Azure Resource Manager.
Microsoft Entra Pod Identity добавляет следующие компоненты в кластер Kubernetes:
- Пользовательские определения ресурсов Kubernetes (CRD):
AzureIdentity
,AzureAssignedIdentity
AzureIdentityBinding
- компонент Контроллер управляемых удостоверений (MIC);
- компонент Node Managed Identity (NMI).
Чтобы установить удостоверение Microsoft Entra Pod в кластер, используйте одну из следующих команд:
Кластер AKS с поддержкой Kubernetes с поддержкой RBAC:
kubectl create -f https://raw.githubusercontent.com/Azure/aad-pod-identity/master/deploy/infra/deployment-rbac.yaml
Кластер AKS, отключенный kubernetes RBAC:
kubectl create -f https://raw.githubusercontent.com/Azure/aad-pod-identity/master/deploy/infra/deployment.yaml
Добавьте репозиторий Helm.
Helm — это менеджер пакетов для Kubernetes. Он используется для установки application-gateway-kubernetes-ingress
пакета.
Если вы используете Cloud Shell, вам не нужно устанавливать Helm. Cloud Shell поставляется с Helm версии 3. Выполните одну из следующих команд, чтобы добавить репозиторий AGIC Helm:
Кластер AKS с поддержкой 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
Кластер AKS, отключенный kubernetes RBAC:
helm init
Установка диаграммы Helm контроллера входящего трафика
deployment-outputs.json
Используйте созданный ранее файл, чтобы создать следующие переменные: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)
Скачивание
helm-config.yaml
, которое настраивает AGIC:wget https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/docs/examples/sample-helm-config.yaml -O helm-config.yaml
Или скопируйте следующий 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>
Измените только что скачанный
helm-config.yaml
файл и заполните разделы дляappgw
иarmAuth
: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
Примечание.
Если вы развертываете в суверенном облаке (например, Azure для государственных организаций), необходимо добавить
appgw.environment
параметр конфигурации и задать его соответствующим значением.Возможные значения :
verbosityLevel
: задает уровень детализации инфраструктуры ведения журнала AGIC. Возможные значения см. в разделе "Уровни ведения журнала".appgw.environment
: задает облачную среду. Возможные значения:AZURECHINACLOUD
, ,AZUREUSGOVERNMENTCLOUD
AZUREGERMANCLOUD
AZUREPUBLICCLOUD
.appgw.subscriptionId
: идентификатор подписки Azure, в которой находится Шлюз приложений. Пример:aaaa0000-bb11-2222-33cc-444444dddddd
.appgw.resourceGroup
: имя группы ресурсов Azure, в которой вы создали развертывание Шлюз приложений. Пример:app-gw-resource-group
.appgw.name
: имя развертывания Шлюз приложений. Пример:applicationgatewayd0f0
.appgw.shared
: логический флаг, который по умолчанию используетсяfalse
. Задайте для негоtrue
значение, если требуется общее Шлюз приложений развертывание.kubernetes.watchNamespace
: указывает пространство имен, которое должен отслеживать AGIC. Значение пространства имен может быть одним строковым значением или разделенным запятыми списком пространств имен.armAuth.type
: может бытьaadPodIdentity
илиservicePrincipal
.armAuth.identityResourceID
: идентификатор ресурса управляемого удостоверения Azure.armAuth.identityClientID
: идентификатор клиента удостоверения.armAuth.secretJSON
: требуется только при выборе субъекта-службы в качестве типа секрета (то есть при настройке).armAuth.type
servicePrincipal
Примечание.
Вы создали
identityResourceID
иidentityClientID
значения во время предыдущих шагов для развертывания компонентов. Их можно получить еще раз с помощью следующей команды:az identity show -g <resource-group> -n <identity-name>
В команде
<resource-group>
— это группа ресурсов Шлюз приложений развертывания. Заполнитель<identity-name>
— это имя созданного удостоверения. Вы можете перечислить все удостоверения для определенной подписки с помощьюaz identity list
.Установите пакет AGIC:
helm install agic-controller oci://mcr.microsoft.com/azure-application-gateway/charts/ingress-azure --version 1.7.5 -f helm-config.yaml
Установка примера приложения
Теперь, когда вы установили Шлюз приложений, AKS и AGIC, можно установить пример приложения с помощью 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
Кроме того, можно следующее.
Скачайте предыдущий ФАЙЛ YAML:
curl https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/docs/examples/aspnetapp.yaml -o aspnetapp.yaml
Примените файл YAML:
kubectl apply -f aspnetapp.yaml
Связанный контент
- Дополнительные примеры предоставления службы AKS в Интернете через HTTP или HTTPS с помощью Шлюз приложений см. в этом руководстве.
- Сведения о Шлюз приложений для контейнеров см. в этой обзорной статье.