Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье показано, как настроить контроллер входящего трафика NGINX для работы с внутренней подсистемой балансировки нагрузки Azure. В нем также объясняется, как настроить частную зону Azure DNS, чтобы разрешить разрешение DNS для частных конечных точек для разрешения определенных доменов.
До начала работы
Кластер AKS с надстройкой маршрутизации приложений.
Чтобы подключить частную зону DNS Azure, вам потребуется роль владельца, администратора учетной записи Azure или соадминистратора Azure в подписке Azure.
Подключение к кластеру AKS
Чтобы подключиться к кластеру Kubernetes с локального компьютера, используйте kubectlклиент командной строки Kubernetes. Ее можно установить локально с помощью команды az aks install-cli . Если вы используете Azure Cloud Shell, kubectl уже установлен.
В следующем примере настраивается подключение к кластеру с именем aks-cluster в test-rg с помощью команды az aks get-credentials.
az aks get-credentials \
--resource-group test-rg \
--name aks-cluster
Создание виртуальной сети
Чтобы опубликовать частную зону DNS в виртуальной сети, укажите список виртуальных сетей, разрешенных для разрешения записей в зоне с помощью каналов виртуальной сети.
В следующем примере создается виртуальная сеть с именем vnet-1 в группе ресурсов test-rg и одна подсеть с именем subnet-1 для создания в виртуальной сети с определенным префиксом адреса.
az network vnet create \
--name vnet-1 \
--resource-group test-rg \
--location eastus \
--address-prefix 10.2.0.0/16 \
--subnet-name subnet-1 \
--subnet-prefixes 10.2.0.0/24
Создание частной зоны DNS Azure
Примечание.
Надстройку маршрутизации приложений можно настроить для автоматического создания записей в одной или нескольких глобальных и частных зонах DNS Azure для узлов, определенных в ресурсах входящего трафика. Все глобальные зоны Azure DNS и все частные зоны Azure DNS должны находиться в одной группе ресурсов.
Создайте зону DNS с помощью команды создания зоны az network private-dns , указав имя зоны и группы ресурсов, в которой он будет создан. В следующем примере создается зона DNS с именем private.contoso.com в группе ресурсов test-rg .
az network private-dns zone create \
--resource-group test-rg \
--name private.contoso.com
Вы создаете ссылку виртуальной сети на зону DNS, созданную ранее с помощью команды az network private-dns link vnet create . В следующем примере создается ссылка с именем DNS-link к зоне private.contoso.com для виртуальной сети vnet-1. Включите параметр --registration-enabled, чтобы указать, что ссылка не поддерживает регистрацию.
az network private-dns link vnet create \
--resource-group test-rg \
--name dns-link \
--zone-name private.contoso.com \
--virtual-network vnet-1 \
--registration-enabled false
Функция автоматической регистрации частной зоны Azure DNS управляет записями DNS для виртуальных машин, развернутых в виртуальной сети. При связывании виртуальной сети с частной зоной DNS с включенным параметром запись DNS создается для каждой виртуальной машины Azure для узла AKS, развернутого в виртуальной сети.
Присоединение частной зоны DNS Azure к надстройке маршрутизации приложений
Примечание.
Команда az aks approuting zone add использует разрешения пользователя, выполняющего команду, для создания назначения роли для зоны DNS в Azure. Роль вкладчика частной зоны DNS является встроенной ролью для управления частными ресурсами DNS и назначается управляемому удостоверению надстройки. Дополнительные сведения об управляемых удостоверениях AKS см. в разделе Сводка об управляемых удостоверениях.
Получите идентификатор ресурса для зоны DNS с помощью
az network dns zone showкоманды и задайте выходные данные переменной с именемZONEID. В следующем примере выполняется запрос зоны private.contoso.com в группе ресурсов test-rg.ZONEID=$(az network private-dns zone show \ --resource-group test-rg \ --name private.contoso.com \ --query "id" \ --output tsv)Обновите надстройку, чтобы включить интеграцию с Azure DNS с помощью
az aks approuting zoneкоманды. Вы можете передать разделенный запятыми список идентификаторов ресурсов зоны DNS. В следующем примере обновляется кластер AKS aks-cluster в группе ресурсов test-rg.az aks approuting zone add \ --resource-group test-rg \ --name aks-cluster \ --ids=${ZONEID} \ --attach-zones
Создание контроллера входящего трафика NGINX с частным IP-адресом и внутренней подсистемой балансировки нагрузки
Надстройка маршрутизации приложений использует пользовательское определение ресурсов Kubernetes (CRD), вызываемое NginxIngressController для настройки контроллеров входящего трафика NGINX. Можно создать дополнительные контроллеры входящего трафика или изменить существующую конфигурацию.
NginxIngressController CRD имеет loadBalancerAnnotations поле для управления поведением службы NGINX ingress-контроллера путем установки аннотаций балансировщика нагрузки. Дополнительные сведения о аннотациях балансировщика нагрузки см. в разделе "Настройка с помощью аннотаций Kubernetes".
Выполните следующие действия, чтобы создать контроллер входящего трафика NGINX с Azure Load Balancer внутреннего типа с частным IP-адресом.
Скопируйте следующий манифест YAML в новый файл с именем nginx-internal-controller.yaml и сохраните файл на локальном компьютере.
apiVersion: approuting.kubernetes.azure.com/v1alpha1 kind: NginxIngressController metadata: name: nginx-internal spec: ingressClassName: nginx-internal controllerNamePrefix: nginx-internal loadBalancerAnnotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true"Создайте ресурсы контроллера входящего трафика NGINX с помощью
kubectl applyкоманды.kubectl apply -f nginx-internal-controller.yamlВ следующем примере выходных данных показан созданный ресурс:
nginxingresscontroller.approuting.kubernetes.azure.com/nginx-internal createdУбедитесь, что контроллер входящего трафика был создан
Состояние контроллера входящего трафика NGINX можно проверить с помощью
kubectl get nginxingresscontrollerкоманды.kubectl get nginxingresscontrollerВ следующем примере выходных данных показан созданный ресурс. Для доступности контроллера может потребоваться несколько минут:
NAME INGRESSCLASS CONTROLLERNAMEPREFIX AVAILABLE default webapprouting.kubernetes.azure.com nginx True nginx-internal nginx-internal nginx-internal True
Развертывание приложения
Надстройка маршрутизации приложений использует аннотации в объектах Ingress Kubernetes для создания соответствующих ресурсов.
Создайте пространство имен приложения под названием
aks-storeдля запуска примерных pod-ов с помощью командыkubectl create namespace.kubectl create namespace aks-storeРазверните приложение хранилища AKS с помощью следующего файла манифеста YAML:
kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/aks-store-demo/main/sample-manifests/docs/app-routing/aks-store-deployments-and-services.yaml -n aks-store
Этот манифест создает необходимые развертывания и службы для приложения AKS Store.
Создайте ресурс Ingress, использующий имя узла в частной зоне DNS Azure и частный IP-адрес.
Обновите host на имя вашего DNS-хоста, например, store-front.private.contoso.com. Убедитесь, что вы указываете nginx-internal для ingressClassName.
Скопируйте следующий манифест YAML в новый файл с именем ingress.yaml и сохраните его на локальном компьютере.
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: store-front namespace: aks-store spec: ingressClassName: nginx-internal rules: - host: store-front.private.contoso.com http: paths: - backend: service: name: store-front port: number: 80 path: / pathType: PrefixСоздайте ресурс входящего трафика, используя команду
kubectl apply.kubectl apply -f ingress.yaml -n aks-storeВ следующем примере выходных данных показан созданный ресурс:
ingress.networking.k8s.io/store-front created
Проверка создания управляемого входящего трафика
Вы можете проверить, создан ли управляемый входящий трафик с помощью kubectl get ingress команды.
kubectl get ingress -n aks-store
В следующем примере выходных данных показан созданный управляемый Ingress:
NAME CLASS HOSTS ADDRESS PORTS AGE
store-front nginx-internal store-front.private.contoso.com 80 10s
Убедитесь, что частная зона DNS Azure была обновлена
Через несколько минут выполните команду az network private-dns record-set a list , чтобы просмотреть записи A для частной зоны DNS Azure. Укажите имя группы ресурсов и имя зоны DNS. В этом примере группа ресурсов — test-rg , а зона DNS — private.contoso.com.
az network private-dns record-set a list \
--resource-group test-rg \
--zone-name private.contoso.com
В следующем примере выходных данных показана созданная запись:
[
{
"aRecords": [
{
"ipv4Address": "10.224.0.7"
}
],
"etag": "ecc303c5-4577-4ca2-b545-d34e160d1c2d",
"fqdn": "store-front.private.contoso.com.",
"id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/test-rg/providers/Microsoft.Network/privateDnsZones/private.contoso.com/A/store-front",
"isAutoRegistered": false,
"name": "store-front",
"resourceGroup": "test-rg",
"ttl": 300,
"type": "Microsoft.Network/privateDnsZones/A"
}
]
Следующие шаги
Дополнительные сведения о конфигурации, связанные с шифрованием SSL, другими параметрами расширенной конфигурации контроллера NGINX для входящего трафика и ресурсами входящего трафика, смотрите в разделе конфигурация DNS и SSL и конфигурация дополнительных модулей маршрутизации приложений.
Azure Kubernetes Service