Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Инструкции в этой статье предполагают, что вы хотите установить контроллер доступа через шлюз приложений (AGIC) в среде, где отсутствуют ранее существовавшие компоненты.
Tip
Рассмотрите возможность использования Application Gateway for Containers в качестве решения для входящего трафика в Kubernetes. Для получения дополнительной информации см. Быстрый старт: Развертывание Application Gateway для контейнеров с контроллером 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 (шаблон ARM).
cat <<EOF > parameters.json { "aksServicePrincipalAppId": { "value": "$appId" }, "aksServicePrincipalClientSecret": { "value": "$password" }, "aksServicePrincipalObjectId": { "value": "$objectId" }, "aksEnableRBAC": { "value": false } } EOF
Чтобы развернуть кластер с поддержкой RBAC для Kubernetes, установите
aksEnableRBAC
наtrue
.
Развернуть компоненты
Указанная ниже процедура добавляет эти компоненты к вашей подписке:
- Служба Azure Kubernetes (AKS)
- Шлюз приложений Azure версии 2
- Azure Virtual Network с двумя подсетями
- Общедоступный IP-адрес
- Управляемое удостоверение, которое будет использоваться идентификатором рабочей нагрузки Microsoft Entra .
Для развертывания компонентов:
Скачать шаблон 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 и развертывание Application Gateway. Теперь вы готовы развернуть пример приложения и контроллер входящих подключений в вашей новой инфраструктуре 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
Установка идентификатора рабочей нагрузки Microsoft Entra
Идентификатор рабочей нагрузки Microsoft Entra предоставляет доступ на основе маркеров к Azure Resource Manager.
Идентификатор рабочей нагрузки Microsoft Entra добавляет следующие компоненты в кластер Kubernetes:
-
Пользовательские определения ресурсов Kubernetes (CRD):
AzureIdentity
,AzureAssignedIdentity
AzureIdentityBinding
- Managed Identity Controller (MIC) компонент
- Node Managed Identity (NMI) компонент
Чтобы установить идентификатор рабочей нагрузки Microsoft Entra в кластере, используйте одну из следующих команд:
Кластер 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
Note
Если вы развертываете в суверенном облаке (например, Azure для государственных организаций), необходимо добавить
appgw.environment
параметр конфигурации и задать его соответствующим значением.Вот значения:
-
verbosityLevel
: Устанавливает уровень детализации для инфраструктуры ведения журналов AGIC. Для возможных значений смотрите Уровни ведения журнала. -
appgw.environment
: задает облачную среду. Возможные значения:AZURECHINACLOUD
,AZUREGERMANCLOUD
,AZUREPUBLICCLOUD
,AZUREUSGOVERNMENTCLOUD
. -
appgw.subscriptionId
: Идентификатор подписки в Azure, в которой находится Application Gateway. Пример:aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e
. -
appgw.resourceGroup
: Название группы ресурсов Azure, в которой вы создали развертывание шлюза приложений. Пример:app-gw-resource-group
. -
appgw.name
: Название развертывания Application Gateway. Пример:applicationgatewayd0f0
. -
appgw.shared
: Булевый флаг, который по умолчанию принимает значениеfalse
. Установите это наtrue
, если вам требуется совместное развертывание Application Gateway. -
kubernetes.watchNamespace
: Указывает пространство имен, которое AGIC должен отслеживать. Значение пространства имен может быть одной строкой или списком пространств имен, разделенных запятыми. -
armAuth.type
: Может бытьaadPodIdentity
илиservicePrincipal
. -
armAuth.identityResourceID
: Идентификатор ресурса управляемой идентификации Azure. -
armAuth.identityClientID
: ID клиента идентификационной записи. -
armAuth.secretJSON
: Требуется только в случае, если вы выбираете Service Principal в качестве типа секрета (то есть, когда вы устанавливаетеarmAuth.type
наservicePrincipal
).
Note
Вы создали значения
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.8.1 -f helm-config.yaml
Установить примерное приложение
Теперь, когда у вас установлены Application Gateway, 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 с помощью Application Gateway, см. это руководство.
- Для получения информации о шлюзе приложений для контейнеров см. эту обзорную статью.