Поделиться через


Настройка контроллера входящего трафика NGINX для поддержки частной зоны DNS Azure с надстройкой маршрутизации приложений

В этой статье показано, как настроить контроллер входящего трафика NGINX для работы с внутренней подсистемой балансировки нагрузки Azure. В нем также объясняется, как настроить частную зону Azure DNS, чтобы разрешить разрешение DNS для частных конечных точек для разрешения определенных доменов.

До начала работы

Подключение к кластеру 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 см. в разделе Сводка об управляемых удостоверениях.

  1. Получите идентификатор ресурса для зоны 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)
    
  2. Обновите надстройку, чтобы включить интеграцию с 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-адресом.

  1. Скопируйте следующий манифест 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"
    
  2. Создайте ресурсы контроллера входящего трафика NGINX с помощью kubectl apply команды.

    kubectl apply -f nginx-internal-controller.yaml
    

    В следующем примере выходных данных показан созданный ресурс:

    nginxingresscontroller.approuting.kubernetes.azure.com/nginx-internal created
    
  3. Убедитесь, что контроллер входящего трафика был создан

    Состояние контроллера входящего трафика 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 для создания соответствующих ресурсов.

  1. Создайте пространство имен приложения под названием aks-store для запуска примерных pod-ов с помощью команды kubectl create namespace.

    kubectl create namespace aks-store
    
  2. Разверните приложение хранилища 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.

  1. Скопируйте следующий манифест 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
    
  2. Создайте ресурс входящего трафика, используя команду 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 и конфигурация дополнительных модулей маршрутизации приложений.