Настройка контроллера входящего трафика NGINX для поддержки частной зоны DNS Azure с надстройкой маршрутизации приложений
В этой статье показано, как настроить контроллер входящего трафика NGINX для работы с внутренней подсистемой балансировки нагрузки Azure и настроить частную зону Azure DNS, чтобы разрешить разрешение DNS для частных конечных точек для разрешения определенных доменов.
Подготовка к работе
- Кластер AKS с надстройкой маршрутизации приложений.
- Чтобы подключить частную зону DNS Azure, вам потребуется роль владельца, администратора учетной записи Azure или соадминистратора Azure в подписке Azure.
Подключение к кластеру AKS
Чтобы подключиться к кластеру Kubernetes с локального компьютера, используйте kubectl
клиент командной строки Kubernetes. Ее можно установить локально с помощью команды az aks install-cli . Если вы используете Azure Cloud Shell, kubectl
уже установлен.
В следующем примере настраивается подключение к кластеру с именем myAKSCluster в myResourceGroup с помощью az aks get-credentials
команды.
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Создание виртуальной сети
Чтобы опубликовать частную зону DNS в виртуальной сети, необходимо указать список виртуальных сетей, разрешенных для разрешения записей в пределах зоны. Они называются ссылками виртуальной сети.
В следующем примере создается виртуальная сеть с именем myAzureVNet в группе ресурсов myResourceGroup и одна подсеть с именем mySubnet для создания в виртуальной сети с определенным префиксом адреса.
az network vnet create \
--name myAzureVNet \
--resource-group myResourceGroup \
--location eastus \
--address-prefix 10.2.0.0/16 \
--subnet-name mysubnet \
--subnet-prefixes 10.2.0.0/24
Создание частной зоны DNS Azure
Примечание.
Вы можете настроить надстройку маршрутизации приложений для автоматического создания записей в одной или нескольких глобальных и частных зонах DNS Azure для узлов, определенных в ресурсах Ingress. Все глобальные зоны Azure DNS и все частные зоны Azure DNS должны находиться в одной группе ресурсов.
Вы создаете зону DNS с помощью команды create az network private-dns zone, указывая имя зоны и группу ресурсов, в которой он будет создан. В следующем примере создается зона DNS с именем private.contoso.com в группе ресурсов myResourceGroup .
az network private-dns zone create --resource-group myResourceGroup --name private.contoso.com
Вы создаете ссылку виртуальной сети на зону DNS, созданную ранее с помощью команды az network private-dns link vnet create . В следующем примере создается ссылка с именем myDNSLink к зоне private.contoso.com для виртуальной сети myAzureVNet. --registration-enabled
Включите параметр, чтобы указать ссылку, не включена регистрация.
az network private-dns link vnet create --resource-group myResourceGroup \
--name myDNSLink \
--zone-name private.contoso.com \
--virtual-network myAzureVNet \
--registration-enabled false
Функция автоматической регистрации частной зоны Azure DNS управляет записями DNS для виртуальных машин, развернутых в виртуальной сети. При связывании виртуальной сети с частной зоной DNS с включенным параметром запись DNS создается для каждой виртуальной машины Azure для узла AKS, развернутого в виртуальной сети.
Присоединение частной зоны DNS Azure к надстройке маршрутизации приложений
Примечание.
Команда az aks approuting zone add
использует разрешения пользователя, выполняющего команду, для создания назначения роли зоны Azure DNS. Роль участника Частная зона DNS зоны — это встроенная роль для управления частными ресурсами DNS и назначается управляемому удостоверению надстройки. Дополнительные сведения об управляемых удостоверениях AKS см. в сводке управляемых удостоверений.
Получите идентификатор ресурса для зоны DNS с помощью
az network dns zone show
команды и задайте выходные данные переменной с именемZONEID
. В следующем примере выполняется запрос зоны private.contoso.com в группе ресурсов myResourceGroup.ZONEID=$(az network private-dns zone show --resource-group myResourceGroup --name private.contoso.com --query "id" --output tsv)
Обновите надстройку, чтобы включить интеграцию с Azure DNS с помощью
az aks approuting zone
команды. Вы можете передать разделенный запятыми список идентификаторов ресурсов зоны DNS. В следующем примере обновляется кластер AKS myAKSCluster в группе ресурсов myResourceGroup.az aks approuting zone add --resource-group myResourceGroup --name myAKSCluster --ids=${ZONEID} --attach-zones
Создание контроллера входящего трафика NGINX с частным IP-адресом и внутренней подсистемой балансировки нагрузки
Надстройка маршрутизации приложений использует пользовательское определение ресурсов Kubernetes (CRD), вызываемое NginxIngressController
для настройки контроллеров входящего трафика NGINX. Можно создать дополнительные контроллеры входящего трафика или изменить существующую конфигурацию.
NginxIngressController
CRD имеет loadBalancerAnnotations
поле для управления поведением службы контроллера входящего трафика NGINX, задав заметки подсистемы балансировки нагрузки.
Выполните следующие действия, чтобы создать контроллер входящего трафика 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
Развертывание приложения
Надстройка маршрутизации приложений использует заметки в объектах входящего трафика Kubernetes для создания соответствующих ресурсов.
Создайте пространство имен приложения, вызываемое
hello-web-app-routing
для запуска примеров модулей pod с помощьюkubectl create namespace
команды.kubectl create namespace hello-web-app-routing
Создайте развертывание, скопируйте следующий манифест YAML в новый файл с именем deployment.yaml и сохраните файл на локальном компьютере.
apiVersion: apps/v1 kind: Deployment metadata: name: aks-helloworld namespace: hello-web-app-routing spec: replicas: 1 selector: matchLabels: app: aks-helloworld template: metadata: labels: app: aks-helloworld spec: containers: - name: aks-helloworld image: mcr.microsoft.com/azuredocs/aks-helloworld:v1 ports: - containerPort: 80 env: - name: TITLE value: "Welcome to Azure Kubernetes Service (AKS)"
Создайте службу, скопируйте следующий манифест YAML в новый файл с именем service.yaml и сохраните файл на локальном компьютере.
apiVersion: v1 kind: Service metadata: name: aks-helloworld namespace: hello-web-app-routing spec: type: ClusterIP ports: - port: 80 selector: app: aks-helloworld
Создайте ресурсы кластера с помощью
kubectl apply
команды.kubectl apply -f deployment.yaml -n hello-web-app-routing
В следующем примере выходных данных показан созданный ресурс:
deployment.apps/aks-helloworld created created
kubectl apply -f service.yaml -n hello-web-app-routing
В следующем примере выходных данных показан созданный ресурс:
service/aks-helloworld created created
Создайте ресурс входящего трафика, использующий имя узла в частной зоне DNS Azure и частный IP-адрес.
Скопируйте следующий манифест YAML в новый файл с именем ingress.yaml и сохраните его на локальном компьютере.
Обновите
<Hostname>
имя узла DNS, напримерhelloworld.private.contoso.com
. Убедитесь, что вы указываетеnginx-internal
для параметраingressClassName
.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: aks-helloworld namespace: hello-web-app-routing spec: ingressClassName: nginx-internal rules: - host: <Hostname> http: paths: - backend: service: name: aks-helloworld port: number: 80 path: / pathType: Prefix
Создайте ресурсы кластера с помощью
kubectl apply
команды.kubectl apply -f ingress.yaml -n hello-web-app-routing
В следующем примере выходных данных показан созданный ресурс:
ingress.networking.k8s.io/aks-helloworld created
Проверка создания управляемого входящего трафика
Вы можете проверить, создан ли управляемый входящий трафик с помощью kubectl get ingress
команды.
kubectl get ingress -n hello-web-app-routing
В следующем примере выходных данных показан созданный управляемый входящий трафик:
NAME CLASS HOSTS ADDRESS PORTS AGE
aks-helloworld nginx-internal helloworld.private.contoso.com 10.224.0.7 80 98s
Проверка обновления частной зоны DNS Azure
Через несколько минут выполните команду az network private-dns record-set a list , чтобы просмотреть записи A для частной зоны DNS Azure. Укажите имя группы ресурсов и имя зоны DNS. В этом примере группа ресурсов — myResourceGroup , а зона DNS — private.contoso.com.
az network private-dns record-set a list --resource-group myResourceGroup --zone-name private.contoso.com
В следующем примере выходных данных показана созданная запись:
[
{
"aRecords": [
{
"ipv4Address": "10.224.0.7"
}
],
"etag": "188f0ce5-90e3-49e6-a479-9e4053f21965",
"fqdn": "helloworld.private.contoso.com.",
"id": "/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx/resourceGroups/foo/providers/Microsoft.Network/privateDnsZones/private.contoso.com/A/helloworld",
"isAutoRegistered": false,
"name": "helloworld",
"resourceGroup": "foo",
"ttl": 300,
"type": "Microsoft.Network/privateDnsZones/A"
}
]
Следующие шаги
Дополнительные сведения о конфигурации, связанные с шифрованием SSL, другим расширенным контроллером входящего трафика NGINX и конфигурацией ресурсов входящего трафика, просмотрите конфигурацию DNS и SSL и конфигурацию маршрутизации приложений.
Azure Kubernetes Service