Создание частного кластера Azure Kubernetes Service (AKS)

В этой статье показано, как развернуть кластер AKS на основе приватного канала с помощью Azure CLI или Terraform. Если вы хотите создать кластер AKS без обязательного приватного канала или туннеля, см. раздел Создание кластера Azure Kubernetes Service (AKS) с интеграцией VNet для сервера API.

Обзор частных кластеров в AKS

В частном кластере уровень управления или сервер API имеют внутренние IP-адреса, определенные в документе RFC1918 — выделение адресов для частных сетей интернета. Используя частный кластер, вы можете гарантировать, что сетевой трафик между сервером API и пулами узлов остается только в частной сети.

Сервер управления или API находится в группе ресурсов Azure, управляемой AKS, а ваш кластер или пул узлов находится в вашей группе ресурсов. Сервер API и пул узлов могут взаимодействовать друг с другом через службу Приватный канал Azure в виртуальной сети сервера API и частную конечную точку, доступную в подсети кластера AKS.

При создании частного кластера AKS AKS по умолчанию создает как частные, так и общедоступные полные доменные имена (FQDN) с соответствующими зонами DNS. Подробные параметры конфигурации DNS см. в разделе "Настройка частной зоны DNS", частной подзоны DNS или пользовательского поддомена.

Замечание

AKS помещает частную конечную точку сервера API в подсеть, используемую первым пулом узлов в конфигурации кластера. Если первый пул узлов изменяется, AKS может повторно создать частную конечную точку в другой подсети во время остановки или запуска кластера.

Доступность по регионам

Частные кластеры доступны в общедоступных регионах, Azure для государственных организаций и Microsoft Azure, управляемых регионами 21Vianet, где поддерживается AKS.

Внимание

Все Microsoft Defender для облака функции будут официально прекращены в Azure в регионе Китая 18 августа 2026 года. Из-за этого предстоящего выхода на пенсию Azure в Китае клиенты больше не смогут подключить новые подписки к службе. Новая подписка — это любая подписка, которая еще не была подключена к службе Microsoft Defender для облака до 18 августа 2025 года, дата объявления о выходе на пенсию. Для получения дополнительной информации о прекращении использования см. раздел Объявление о прекращении работы Microsoft Defender для облака в Microsoft Azure, управляемое 21Vianet.

Клиенты должны работать с представителями своих клиентских учётных записей в Microsoft Azure, управляемых 21Vianet, чтобы оценить влияние этого прекращения поддержки на их операции.

Предварительные требования для частных кластеров AKS

  • Terraform установлен локально. Инструкции по установке см. в разделе "Установка Terraform".

Внимание

Начиная с 30 ноября 2025 Azure Kubernetes Service (AKS) больше не поддерживает или не предоставляет обновления системы безопасности для Azure Linux 2.0. Образ узла Azure Linux 2.0 заморожен в выпуске 202512.06.0. Начиная с 31 марта 2026 г. образы узлов будут удалены, и вы не сможете масштабировать пулы узлов. Миграция на поддерживаемую версию Azure Linux путем обновления пулов узлов до поддерживаемой версии Kubernetes или путем перехода на osSku AzureLinux3. Дополнительные сведения см. в проблеме на GitHub о выходе из эксплуатации и в объявлении о прекращении обновлений Azure. Чтобы оставаться в курсе объявлений и обновлений, следуйте заметкам о выпуске AKS.

Ограничения

  • Диапазоны разрешенных IP-адресов применяются только к общедоступному серверу API. Эти диапазоны нельзя применить к конечной точке частного сервера API.
  • Ограничения службы Приватный канал Azure применяются к приватным кластерам.
  • Не поддерживаются агенты Azure DevOps, размещенные Microsoft, с частными кластерами. Рассмотрите возможность использования самостоятельно размещённых агентов.
  • Удаление или изменение частной конечной точки в подсети клиента приводит к остановке работы кластера.
  • служба Приватный канал Azure поддерживает только Load Balancer (цен. категория "Стандартный"). Базовый балансировщик нагрузки не поддерживается.

Концентратор и периферийный сервер с пользовательским DNS для частных кластеров AKS

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

На следующей схеме показана архитектура концентратора и периферийной архитектуры для частного кластера AKS с пользовательским DNS:

Частный концентратор кластера и периферийный кластер

  • При создании частного кластера частная конечная точка (1) и частная зона DNS (2) создаются в группе ресурсов, управляемой кластером, по умолчанию. Кластер использует A запись в частной зоне для разрешения IP-адреса частной конечной точки и обеспечения связи с сервером API.
  • Частная зона DNS связана только с виртуальной сетью, к которой подключены узлы кластера (3), что означает, что частная конечная точка может быть разрешена только узлами в этой связанной виртуальной сети. В сценариях, когда настраиваемый DNS не сконфигурирован в виртуальной сети (по умолчанию), система работает без затруднений, поскольку узлы обращаются к 168.63.129.16, который разрешает записи в частной зоне DNS благодаря соединению.
  • При сохранении поведения частной зоны DNS по умолчанию AKS пытается связать зону непосредственно с периферийной виртуальной сетью, в которую размещается кластер, даже если зона уже связана с центральной виртуальной сетью.
    • В периферийных виртуальных сетях, использующих пользовательские DNS-серверы, это действие может завершиться ошибкой, если управляемому удостоверению кластера не хватает участника сети в периферийной виртуальной сети. Чтобы предотвратить сбой, выберите одну из следующих поддерживаемых конфигураций:
      • Настраиваемая частная зона DNS: укажите существующую частную зону и задайте privateDNSZone / --private-dns-zone его идентификатор ресурса. AKS по-прежнему создает ссылку виртуальной сети для периферийной виртуальной сети, в которую размещается кластер, даже если зона уже связана с центральной виртуальной сетью. Убедитесь, что управляемому удостоверению кластера назначена роль Network Contributor в периферийной виртуальной сети, затем задайте для publicDNS значение false / используйте --disable-public-fqdn.
      • Только общедоступный DNS: отключите создание частной зоны, установив privateDNSZone / --private-dns-zone на none и оставьте publicDNSв значении по умолчанию (true) / не используйте --disable-public-fqdn.
  • Если вы используете собственную таблицу маршрутов (BYO) с kubenet и собственный BYO DNS с частными кластерами, создание кластера терпит неудачу. Чтобы создание кластера было успешным, нужно связать RouteTable группу ресурсов узла с подсетью после того, как первоначальная попытка создания кластера не удалась.

Ограничения для частных кластеров AKS с пользовательским DNS

  • Параметр privateDNSZone / --private-dns-zonenonepublicDNS: false / --disable-public-fqdnв то же время не поддерживается.
  • Условное перенаправление не поддерживает поддомены.

Создайте группу ресурсов

Создайте группу ресурсов с помощью az group create команды. Вы также можете использовать существующую группу ресурсов для кластера AKS.

az group create \
    --name <private-cluster-resource-group> \
    --location <location>

Создание частного кластера AKS с базовой сетью по умолчанию

Создайте частный кластер с базовой сетью по умолчанию с помощью az aks create команды с флагом --enable-private-cluster .

Ключевые параметры в этой команде:

  • --enable-private-cluster: включает режим частного кластера.
az aks create \
    --name <private-cluster-name> \
    --resource-group <private-cluster-resource-group> \
    --load-balancer-sku standard \
    --enable-private-cluster \
    --generate-ssh-keys
  1. Создайте файл с именем main.tf и добавьте следующий код, чтобы определить версию Terraform и указать поставщика Azure:

    terraform {
      required_version = ">= 1.3.0"
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~> 4.0"
        }
      }
    }
    
    provider "azurerm" {
      features {}
      subscription_id = var.subscription_id
    }
    
  2. Добавьте следующий код в main.tf для создания входных переменных для идентификатора подписки Azure, имени группы ресурсов, расположения и имени кластера AKS. При необходимости можно изменить значения по умолчанию.

    variable "subscription_id" {
      description = "The Azure subscription ID."
      type = string
    }
    
    variable "resource_group_name" {
      description = "The name of the resource group for the AKS cluster."
      type        = string
      default     = "rg-private-aks-basic"
    }
    
    variable "location" {
      description = "The Azure region where the resources will be created."
      type        = string
      default     = "eastus"
    }
    
    variable "aks_cluster_name" {
      description = "The name of the AKS cluster."
      type        = string
      default     = "aks-private-basic"
    }
    
  3. Добавьте следующий код в main.tf для создания группы ресурсов Azure:

    resource "azurerm_resource_group" "this" {
      name     = var.resource_group_name
      location = var.location
    }
    
  4. Добавьте следующий код в main.tf, чтобы создать частный кластер AKS с базовой сетью.

    resource "azurerm_kubernetes_cluster" "this" {
      name                = var.aks_cluster_name
      location            = azurerm_resource_group.this.location
      resource_group_name = azurerm_resource_group.this.name
      dns_prefix          = "privatebasicaks"
    
      private_cluster_enabled = true
    
      default_node_pool {
        name       = "system"
        node_count = 1
        vm_size    = "Standard_DS2_v2"
      }
    
      identity {
        type = "SystemAssigned"
      }
    
      network_profile {
        load_balancer_sku   = "standard"
        network_plugin      = "azure"
        network_plugin_mode = "overlay"
      }
    }
    
  5. Выполните действия, описанные в разделах Инициализация Terraform, Форматирование и проверка конфигурации Terraform, Создание плана выполнения Terraform, Применение конфигурации Terraform и Настройка kubectl для подключения к частному кластеру AKS.

Создание частного кластера AKS с расширенной сетью

Создайте частный кластер с расширенными сетями az aks create с помощью команды.

Ключевые параметры в этой команде:

  • --enable-private-cluster: включает режим частного кластера.
  • --network-plugin azure: Указывает сетевой плагин Azure CNI.
  • --vnet-subnet-id <subnet-id>: идентификатор ресурса существующей подсети в виртуальной сети.
  • --dns-service-ip <dns-service-ip>: доступный IP-адрес в диапазоне адресов службы Kubernetes, используемый для службы DNS кластера. Например: 10.2.0.10.
  • --service-cidr <service-cidr>: диапазон IP-адресов нотации CIDR, из которого следует назначать IP-адреса кластера служб. Например: 10.2.0.0/24.
az aks create \
    --resource-group <private-cluster-resource-group> \
    --name <private-cluster-name> \
    --load-balancer-sku standard \
    --enable-private-cluster \
    --network-plugin azure \
    --vnet-subnet-id <subnet-id> \
    --dns-service-ip <dns-service-ip> \
    --service-cidr <service-cidr> \
    --generate-ssh-keys
  1. Создайте файл с именем main.tf и добавьте следующий код, чтобы определить версию Terraform и указать поставщика Azure:

    terraform {
      required_version = ">= 1.3.0"
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~> 4.0"
        }
      }
    }
    
    provider "azurerm" {
      features {}
      subscription_id = var.subscription_id
    }
    
  2. Добавьте следующий код в main.tf, чтобы создать входные переменные для идентификатора подписки Azure, имени группы ресурсов, расположения, имени кластера AKS, имени виртуальной сети (VNet) и имени подсети. При необходимости можно изменить значения по умолчанию.

    variable "subscription_id" {
      description = "The Azure subscription ID."
      type = string
    }
    
    variable "resource_group_name" {
      description = "The name of the resource group for the AKS cluster."
      type = string
      default = "rg-private-aks-advanced"
    }
    
    variable "location" {
      description = "The Azure region where the resources will be created."
      type = string
      default = "eastus"
    }
    
    variable "aks_cluster_name" {
      description = "The name of the AKS cluster."
      type = string
      default = "aks-private-advanced"
    }
    
    variable "vnet_name" {
      description = "The name of the virtual network."
      type = string
      default = "vnet-private-aks"
    }
    
    variable "subnet_name" {
      description = "The name of the subnet used by AKS."
      type = string
      default = "snet-aks"
    }
    
  3. Добавьте следующий код в main.tf для создания группы ресурсов Azure, виртуальной сети и подсети:

    resource "azurerm_resource_group" "this" {
      name = var.resource_group_name
      location = var.location
    }
    
    resource "azurerm_virtual_network" "this" {
      name = var.vnet_name
      location = azurerm_resource_group.this.location
      resource_group_name = azurerm_resource_group.this.name
      address_space = ["10.0.0.0/8"]
    }
    
    resource "azurerm_subnet" "aks" {
      name = var.subnet_name
      resource_group_name  = azurerm_resource_group.this.name
      virtual_network_name = azurerm_virtual_network.this.name
      address_prefixes = ["10.240.0.0/16"]
    }
    
  4. Добавьте следующий код в main.tf, чтобы создать кластер AKS с расширенными возможностями сетей.

    resource "azurerm_kubernetes_cluster" "this" {
      name = var.aks_cluster_name
      location = azurerm_resource_group.this.location
      resource_group_name = azurerm_resource_group.this.name
      dns_prefix = "privateadvancedaks"
    
      private_cluster_enabled = true
    
      default_node_pool {
        name = "system"
        node_count = 1
        vm_size = "Standard_DS2_v2"
        vnet_subnet_id = azurerm_subnet.aks.id
      }
    
      identity {
        type = "SystemAssigned"
      }
    
      network_profile {
        load_balancer_sku = "standard"
        network_plugin = "azure"
        dns_service_ip = "10.2.0.10"
        service_cidr = "10.2.0.0/24"
      }
    }
    
  5. Выполните действия, описанные в разделах Инициализация Terraform, Форматирование и проверка конфигурации Terraform, Создание плана выполнения Terraform, Применение конфигурации Terraform и Настройка kubectl для подключения к частному кластеру AKS.

Использование пользовательских доменов с частными кластерами AKS

Если вы хотите настроить пользовательские домены, которые могут быть разрешены только внутри системы, см. раздел "Использование пользовательских доменов".

Деактивация публичного полного доменного имени на частном кластере AKS

При создании частного кластера AKS с помощью --enable-private-clusterAKS развертывает сервер API Kubernetes через частную конечную точку в виртуальной сети. По умолчанию AKS может по-прежнему создавать общедоступное доменное имя DNS (общедоступное полное доменное имя) для сервера API, если не указано --disable-public-fqdn. Общедоступное полное доменное имя — это только общедоступное разрешаемое DNS-имя, а взаимодействие API для частных кластеров по-прежнему происходит через частную конечную точку. Использование --disable-public-fqdn удаляет общедоступное DNS-имя и ограничивает доступ к управлению кластером только частными способами подключения, такими как VPN, ExpressRoute, пиринг VNet или узлы Bastion.

Используйте следующее руководство.

  • Не отключайте общедоступное FQDN: если клиентам в виртуальной сети кластера или подключённой сети требуется DNS-имя сервера API, разрешаемое через общедоступный DNS. Общедоступное полное доменное имя не создает общедоступную конечную точку API или не удаляет требование для сетевого подключения к частной конечной точке. Для конвейеров DevOps используйте локальные агенты в подключенной сети.
  • Отключите общедоступное полное доменное имя. Если у вас есть строгие требования к безопасности или соответствию требованиям, корпоративные частные сети уже реализованы, используются сетевые архитектуры концентратора и периферийных защищенных сетей, или операции кластера должны выполняться исключительно через частные пути подключения.

Отключение общедоступного полного доменного имени при создании частного кластера AKS

Отключите общедоступное полное доменное имя при создании частного кластера AKS, используя команду az aks create с флагом --disable-public-fqdn.

Ключевые параметры в этой команде:

  • --disable-public-fqdn: отключает полностью квалифицированное доменное имя (FQDN) для сервера API.
  • --assign-identity <resource-id>: указывает управляемую идентичность, которую следует использовать для кластера.
  • --private-dns-zone system: указывает, что AKS создает частную зону DNS в группе ресурсов узла. Нельзя использовать none, если отключено общедоступное полное доменное имя (FQDN), поскольку для разрешения имени API-сервера кластеру требуется частная или общедоступная зона DNS.
az aks create \
    --name <private-cluster-name> \
    --resource-group <private-cluster-resource-group> \
    --load-balancer-sku standard \
    --enable-private-cluster \
    --assign-identity <resource-id> \
    --private-dns-zone system \
    --disable-public-fqdn \
    --generate-ssh-keys
  1. Выполните шаги 1–3 в статье "Создание частного кластера AKS с расширенными сетями" или создание частного кластера AKS сбазовой сетью по умолчанию для настройки конфигурации Terraform и создания необходимых ресурсов в зависимости от вашего сценария. В этом примере используется расширенная сеть.

  2. Добавьте следующий код в main.tf, чтобы создать частный кластер AKS с удостоверением, назначенным пользователем, и отключить общедоступное полное доменное имя.

    resource "azurerm_user_assigned_identity" "aks" {
      name = "id-private-aks-public-fqdn-off"
      location = azurerm_resource_group.this.location
      resource_group_name = azurerm_resource_group.this.name
    }
    resource "azurerm_kubernetes_cluster" "this" {
      name = var.aks_cluster_name
      location = azurerm_resource_group.this.location
      resource_group_name = azurerm_resource_group.this.name
      dns_prefix = "privateaks"
      private_cluster_enabled = true
      private_cluster_public_fqdn_enabled = false
    
      private_dns_zone_id = "System"
    
      default_node_pool {
        name = "system"
        node_count = 1
        vm_size = "Standard_DS2_v2"
        vnet_subnet_id = azurerm_subnet.aks.id
      }
      identity {
        type = "UserAssigned"
        identity_ids = [azurerm_user_assigned_identity.aks.id]
      }
      network_profile {
        load_balancer_sku = "standard"
        network_plugin = "azure"
        dns_service_ip = "10.2.0.10"
        service_cidr = "10.2.0.0/24"
      }
    }
    
  3. Выполните действия, описанные в разделах Инициализация Terraform, Форматирование и проверка конфигурации Terraform, Создание плана выполнения Terraform, Применение конфигурации Terraform и Настройка kubectl для подключения к частному кластеру AKS.

Отключить общедоступный FQDN в существующем частном кластере AKS

Отключите публичное полное доменное имя в существующем кластере AKS с помощью команды az aks update и флага --disable-public-fqdn.

Ключевые параметры в этой команде:

  • --disable-public-fqdn: отключает полностью квалифицированное доменное имя (FQDN) для сервера API.
az aks update \
    --name <private-cluster-name> \
    --resource-group <private-cluster-resource-group> \
    --disable-public-fqdn
  1. Добавьте следующий код в существующий main.tf, чтобы отключить публичное FQDN в имеющемся кластере AKS. В этом примере используется расширенная сеть. Его можно изменить, чтобы использовать базовую сеть по умолчанию, изменив соответствующие ресурсы и параметры Terraform.

    resource "azurerm_kubernetes_cluster" "this" {
      name = var.aks_cluster_name
      location = azurerm_resource_group.this.location
      resource_group_name = azurerm_resource_group.this.name
      dns_prefix = "privateaks"
    
      private_cluster_enabled = true
      private_cluster_public_fqdn_enabled = false
      private_dns_zone_id = "System"
    
      default_node_pool {
        name = "system"
        node_count = 1
        vm_size = "Standard_DS2_v2"
        vnet_subnet_id = azurerm_subnet.aks.id
      }
    
      identity {
        type = "UserAssigned"
        identity_ids = [azurerm_user_assigned_identity.aks.id]
      }
    
      network_profile {
        load_balancer_sku = "standard"
        network_plugin = "azure"
        dns_service_ip = "10.2.0.10"
        service_cidr = "10.2.0.0/24"
      }
    }
    
  2. Примените обновленную конфигурацию Terraform, используя команды terraform plan и terraform apply.

    terraform plan
    terraform apply
    

Параметры конфигурации для частного DNS

Вы можете настроить частные параметры DNS для частного кластера AKS с помощью Azure CLI (с --private-dns-zone параметром) или шаблона Azure Resource Manager (со свойствомprivateDNSZone). В следующей таблице описываются поддерживаемые значения для параметра Azure CLI --private-dns-zone и свойства Azure Resource ManagerprivateDNSZone:

--private-dns-zone / privateDNSZone значение Description
system Значение по умолчанию при настройке частной зоны DNS. Если не указано --private-dns-zone / privateDNSZone, AKS создает частную зону DNS в группе ресурсов узла.
none Если задано значение --private-dns-zone / privateDNSZonenone, AKS не создает частную зону DNS.
<custom-private-dns-zone-resource-id> Чтобы использовать этот параметр, создайте частную зону DNS в следующем формате для Azure глобального облака: privatelink.<region>.azmk8s.io или <subzone>.privatelink.<region>.azmk8s.io. Для дальнейшего использования вам потребуется идентификатор ресурса частной зоны DNS. Кроме того, вам потребуется назначаемое пользователем удостоверение или служебный принципал с ролями Частная зона DNS Zone Contributor и Network Contributor. Для кластеров, использующих интеграцию виртуальной сети сервера API, частная зона DNS поддерживает формат именования private.<region>.azmk8s.io или <subzone>.private.<region>.azmk8s.io. Вы не можете изменить или удалить эти ресурсы после создания кластера, так как это может вызвать проблемы с производительностью и сбои обновления кластера. Можно использовать --fqdn-subdomain <subdomain> вместе с <custom-private-dns-zone-resource-id> только для предоставления возможностей поддомена privatelink.<region>.azmk8s.io. Если вы указываете подзону, для имени задано 32 символьное <subzone> ограничение.

Рекомендации по частному DNS

При настройке частного DNS для частного кластера AKS следует учитывать следующие рекомендации.

  • Если частная зона DNS находится в подписке, отличной от кластера AKS, необходимо зарегистрировать поставщика Microsoft.ContainerService Azure в обеих подписках.
  • Если вы настраиваете кластер AKS с субъектом-службой Active Directory, AKS не поддерживает использование управляемого удостоверения, назначаемого системой, с настраиваемой частной зоной DNS. Кластер должен использовать аутентификацию с помощью управляемого удостоверения, назначаемого пользователем.

зона Частная зона DNS: создание частного кластера AKS

Создайте частный кластер AKS с частной зоной DNS с помощью az aks create команды.

Ключевые параметры в этой команде:

  • --enable-private-cluster: включает режим частного кластера.
  • --private-dns-zone [system|none]: настраивает частную зону DNS для кластера. system — значение по умолчанию при настройке частной зоны DNS. Если не указано --private-dns-zone, AKS создает частную зону DNS в группе ресурсов узла. none отключает создание частной зоны DNS.
  • --assign-identity <resource-id>: идентификатор ресурса управляемой идентичности, назначаемой пользователем, с ролями Частной DNS Зоны Контрибьютора и Сетевого Контрибьютора.
az aks create \
    --name <private-cluster-name> \
    --resource-group <private-cluster-resource-group> \
    --load-balancer-sku standard \
    --enable-private-cluster \
    --assign-identity <resource-id> \
    --private-dns-zone [system|none] \
    --generate-ssh-keys
  1. Выполните шаги 1–3 в статье "Создание частного кластера AKS с расширенными сетями" или создание частного кластера AKS сбазовой сетью по умолчанию для настройки конфигурации Terraform и создания необходимых ресурсов в зависимости от вашего сценария. В этом примере используется расширенная сеть.

  2. Добавьте следующий код в main.tf, чтобы создать частный кластер AKS с приватной зоной DNS, управляемой AKS:

    resource "azurerm_kubernetes_cluster" "this" {
     name                = var.aks_cluster_name
     location            = azurerm_resource_group.this.location
     resource_group_name = azurerm_resource_group.this.name
     dns_prefix          = "aks-system-dns"
     private_cluster_enabled = true
     private_dns_zone_id     = "System"
     default_node_pool {
       name           = "system"
       node_count     = 1
       vm_size        = "Standard_DS2_v2"
       vnet_subnet_id = azurerm_subnet.aks.id
     }
     identity {
       type = "SystemAssigned"
     }
     network_profile {
       network_plugin    = "azure"
       load_balancer_sku = "standard"
       dns_service_ip    = "10.2.0.10"
       service_cidr      = "10.2.0.0/24"
     }
    }
    
  3. Выполните действия, описанные в разделах Инициализация Terraform, Форматирование и проверка конфигурации Terraform, Создание плана выполнения Terraform, Применение конфигурации Terraform и Настройка kubectl для подключения к частному кластеру AKS.

Нет частной зоны DNS: создайте частный кластер AKS

  1. Выполните шаги 1–3 в статье "Создание частного кластера AKS с расширенными сетями" или создание частного кластера AKS сбазовой сетью по умолчанию для настройки конфигурации Terraform и создания необходимых ресурсов в зависимости от вашего сценария. В этом примере используется расширенная сеть.

  2. Добавьте следующий код в main.tf, чтобы создать кластер AKS без частной зоны DNS:

    resource "azurerm_kubernetes_cluster" "this" {
     name                = var.aks_cluster_name
     location            = azurerm_resource_group.this.location
     resource_group_name = azurerm_resource_group.this.name
     dns_prefix          = "aks-no-dns"
     private_cluster_enabled = true
     private_dns_zone_id     = "None"
     default_node_pool {
       name           = "system"
       node_count     = 1
       vm_size        = "Standard_DS2_v2"
       vnet_subnet_id = azurerm_subnet.aks.id
     }
     identity {
       type = "SystemAssigned"
     }
     network_profile {
       network_plugin    = "azure"
       load_balancer_sku = "standard"
       dns_service_ip    = "10.2.0.10"
       service_cidr      = "10.2.0.0/24"
     }
    }
    
  3. Выполните действия, описанные в разделах Инициализация Terraform, Форматирование и проверка конфигурации Terraform, Создание плана выполнения Terraform, Применение конфигурации Terraform и Настройка kubectl для подключения к частному кластеру AKS.

Настраиваемая частная зона DNS или подзона: создание частного кластера AKS

Создайте частный кластер AKS с настраиваемой частной зоной DNS или подзоной az aks create с помощью команды.

Ключевые параметры в этой команде:

  • --enable-private-cluster: включает режим частного кластера.
  • --private-dns-zone [<custom-private-dns-zone-resource-id>|<custom-private-dns-subzone-resource-id>]: идентификатор ресурса существующей частной зоны DNS или подзоны в следующем формате Azure для глобального облака: privatelink.<region>.azmk8s.io или <subzone>.privatelink.<region>.azmk8s.io.
  • --assign-identity <resource-id>: идентификатор ресурса управляемой идентичности, назначаемой пользователем, с ролями Частной DNS Зоны Контрибьютора и Сетевого Контрибьютора.
az aks create \
    --name <private-cluster-name> \
    --resource-group <private-cluster-resource-group> \
    --load-balancer-sku standard \
    --enable-private-cluster \
    --assign-identity <resource-id> \
    --private-dns-zone [<custom-private-dns-zone-resource-id>|<custom-private-dns-subzone-resource-id>] \
    --generate-ssh-keys

При использовании настраиваемой частной зоны DNS вы несете ответственность за создание инфраструктуры DNS и управление ею вместо того, чтобы полагаться на управляемые Azure DNS. Это включает создание зоны DNS, связывание ее с виртуальной сетью и назначение необходимых разрешений для управления записями AKS.

Для пользовательских конфигураций DNS необходимо использовать управляемое удостоверение, назначаемое пользователем, с ролями Частная зона DNS Zone Contributor и Network Contributor.

  1. Выполните шаги 1–3 в статье "Создание частного кластера AKS с расширенными сетями" или создание частного кластера AKS сбазовой сетью по умолчанию для настройки конфигурации Terraform и создания необходимых ресурсов в зависимости от вашего сценария. В этом примере используется расширенная сеть.

  2. Добавьте код в main.tf, чтобы создать частный кластер AKS с настраиваемой частной зоной DNS или подзоной.

    resource "azurerm_user_assigned_identity" "aks" {
     name                = "aks-custom-dns-id"
     location            = azurerm_resource_group.this.location
     resource_group_name = azurerm_resource_group.this.name
    }
    resource "azurerm_private_dns_zone" "aks" {
     name                = "privatelink.eastus.azmk8s.io"
     resource_group_name = azurerm_resource_group.this.name
    }
    resource "azurerm_private_dns_zone_virtual_network_link" "link" {
     name                  = "aks-dns-link"
     resource_group_name   = azurerm_resource_group.this.name
     private_dns_zone_name = azurerm_private_dns_zone.aks.name
     virtual_network_id    = azurerm_virtual_network.this.id
    }
    resource "azurerm_role_assignment" "dns" {
     scope                = azurerm_private_dns_zone.aks.id
     role_definition_name = "Private DNS Zone Contributor"
     principal_id         = azurerm_user_assigned_identity.aks.principal_id
    }
    resource "azurerm_role_assignment" "network" {
     scope                = azurerm_virtual_network.this.id
     role_definition_name = "Network Contributor"
     principal_id         = azurerm_user_assigned_identity.aks.principal_id
    }
    resource "azurerm_kubernetes_cluster" "this" {
     name                = var.aks_cluster_name
     location            = azurerm_resource_group.this.location
     resource_group_name = azurerm_resource_group.this.name
     dns_prefix          = "aks-custom-dns"
     private_cluster_enabled = true
     private_dns_zone_id     = azurerm_private_dns_zone.aks.id
     default_node_pool {
       name           = "system"
       node_count     = 1
       vm_size        = "Standard_DS2_v2"
       vnet_subnet_id = azurerm_subnet.aks.id
     }
     identity {
       type         = "UserAssigned"
       identity_ids = [azurerm_user_assigned_identity.aks.id]
     }
     network_profile {
       network_plugin    = "azure"
       load_balancer_sku = "standard"
       dns_service_ip    = "10.2.0.10"
       service_cidr      = "10.2.0.0/24"
     }
     depends_on = [
       azurerm_role_assignment.dns,
       azurerm_role_assignment.network
     ]
    }
    
  3. Выполните шаги, описанные в разделах Инициализация Terraform, Форматирование и проверка конфигурации Terraform, Создание плана выполнения Terraform, Применение конфигурации Terraform и Настройка kubectl для подключения к частному кластеру AKS.

Настраиваемая частная зона DNS с поддоменом: создание частного кластера AKS

Создайте частный кластер AKS с настраиваемой частной зоной DNS и поддоменом az aks create с помощью команды.

Ключевые параметры в этой команде:

  • --enable-private-cluster: включает режим частного кластера.
  • --private-dns-zone <custom-private-dns-zone-resource-id>: идентификатор ресурса существующей частной зоны DNS в следующем формате для глобального облака Azure: privatelink.<region>.azmk8s.io.
  • --fqdn-subdomain <subdomain>: поддомен, используемый для полного доменного имени кластера в настраиваемой частной зоне DNS.
  • --assign-identity <resource-id>: идентификатор ресурса управляемой идентичности, назначаемой пользователем, с ролями Частной DNS Зоны Контрибьютора и Сетевого Контрибьютора.
az aks create \
    --name <private-cluster-name> \
    --resource-group <private-cluster-resource-group> \
    --load-balancer-sku standard \
    --enable-private-cluster \
    --assign-identity <resource-id> \
    --private-dns-zone <custom-private-dns-zone-resource-id> \
    --fqdn-subdomain <subdomain> \
    --generate-ssh-keys
  1. Выполните шаги 1–3 в статье "Создание частного кластера AKS с расширенными сетями" или создание частного кластера AKS сбазовой сетью по умолчанию для настройки конфигурации Terraform и создания необходимых ресурсов в зависимости от вашего сценария. В этом примере используется расширенная сеть.

  2. Добавьте следующий код в main.tf, чтобы создать частный кластер AKS с пользовательской частной зоной DNS и поддоменом.

    resource "azurerm_kubernetes_cluster" "this" {
     name                = var.aks_cluster_name
     location            = azurerm_resource_group.this.location
     resource_group_name = azurerm_resource_group.this.name
     dns_prefix          = "aks-subdomain"
     private_cluster_enabled = true
     private_dns_zone_id     = azurerm_private_dns_zone.aks.id
     fqdn_subdomain          = "team1"
     default_node_pool {
       name           = "system"
       node_count     = 1
       vm_size        = "Standard_DS2_v2"
       vnet_subnet_id = azurerm_subnet.aks.id
     }
     identity {
       type         = "UserAssigned"
       identity_ids = [azurerm_user_assigned_identity.aks.id]
     }
     network_profile {
       network_plugin    = "azure"
       load_balancer_sku = "standard"
       dns_service_ip    = "10.2.0.10"
       service_cidr      = "10.2.0.0/24"
     }
    }
    
  3. Выполните действия, описанные в разделах Инициализация Terraform, Форматирование и проверка конфигурации Terraform, Создание плана выполнения Terraform, Применение конфигурации Terraform и Настройка kubectl для подключения к частному кластеру AKS.

Обновление существующего частного кластера AKS из частной зоны DNS до общедоступной

Вы можете обновить только от byo (принести свой собственный) или system в none. Никакое другое сочетание значений обновления не поддерживается.

Предупреждение

При обновлении частного кластера с byo или system на none, узлы агента изменяются на использование общедоступного полного доменного имени. В кластере AKS, использующего Azure Virtual Machine Scale Sets, выполняется обновление образа node для обновления узлов с общедоступным полным доменным именем.

Обновите частный кластер от byo или system до none, используя команду az aks update с параметром --private-dns-zone, установленным на none.

az aks update \
    --name <private-cluster-name> \
    --resource-group <private-cluster-resource-group> \
    --private-dns-zone none
  1. Добавьте следующий код в существующий main.tf , чтобы обновить частный кластер AKS из частной зоны DNS на общедоступный. В этом примере используется расширенная сеть. Его можно изменить, чтобы использовать базовую сеть по умолчанию, изменив соответствующие ресурсы и параметры Terraform.

    resource "azurerm_kubernetes_cluster" "this" {
     name                = var.aks_cluster_name
     location            = azurerm_resource_group.this.location
     resource_group_name = azurerm_resource_group.this.name
     dns_prefix          = "aks-update"
     private_cluster_enabled = true
     private_dns_zone_id     = "None"
     default_node_pool {
       name           = "system"
       node_count     = 1
       vm_size        = "Standard_DS2_v2"
       vnet_subnet_id = azurerm_subnet.aks.id
     }
     identity {
       type         = "UserAssigned"
       identity_ids = [azurerm_user_assigned_identity.aks.id]
     }
     network_profile {
       network_plugin    = "azure"
       load_balancer_sku = "standard"
       dns_service_ip    = "10.2.0.10"
       service_cidr      = "10.2.0.0/24"
     }
    }
    
  2. Примените обновленную конфигурацию Terraform, используя команды terraform plan и terraform apply.

    terraform plan
    terraform apply
    

Инициализируйте Terraform

Инициализируйте Terraform в каталоге, содержащем ваш файл main.tf, с помощью команды terraform init. Эта команда загружает поставщика (провайдера) Azure, необходимого для управления ресурсами Azure с помощью Terraform.

terraform init

Форматирование и проверка конфигурации Terraform

Отформатируйте и проверьте конфигурацию Terraform с помощью terraform fmt команд и terraform validate команд.

terraform fmt
terraform validate

Создайте план запуска Terraform

Создайте план выполнения Terraform с помощью terraform plan команды. Эта команда показывает ресурсы, которые Terraform создаст или изменит в подписке Azure.

terraform plan -var="subscription_id=<your-subscription-id>"

Применение конфигурации Terraform

После проверки и подтверждения плана выполнения примените конфигурацию Terraform с помощью terraform apply команды. Эта команда создает или изменяет ресурсы, определенные в файле main.tf в подписке Azure.

terraform apply -var="subscription_id=<your-subscription-id>"

Настройка kubectl для подключения к частному кластеру AKS

Чтобы управлять кластером Kubernetes, используйте клиент командной строки Kubernetes, kubectl. kubectl уже установлен, если вы используете Azure Cloud Shell. Чтобы установить kubectl локально, используйте az aks install-cli команду.

Перед подключением убедитесь, что клиент имеет сетевой и DNS-доступ к частной конечной точке API кластера. Вы можете подключиться из VNet кластера или из подключенной сети, используя такие варианты, как Azure Cloud Shell, внедренный в VNet, Бастион Azure, пиринг VNet, частная конечная точка, ExpressRoute или VPN. Дополнительные сведения см. в разделе "Установка сетевого подключения к частному кластеру AKS". Если у вас нет прямого сетевого подключения, используйте az aks command invoke команду для выполнения команд через API Azure.

  1. Настройте kubectl для подключения к вашему кластеру Kubernetes с помощью команды az aks get-credentials. Эта команда скачивает учетные данные и настраивает интерфейс командной строки Kubernetes для их использования.

    az aks get-credentials --resource-group <private-cluster-resource-group> --name <private-cluster-name>
    
  2. Проверьте подключение к кластеру kubectl get с помощью команды. Эта команда возвращает список узлов кластера.

    kubectl get nodes
    

    Команда возвращает выходные данные, аналогичные следующему примеру выходных данных:

    NAME                                STATUS   ROLES   AGE    VERSION
    aks-nodepool1-12345678-vmss000000   Ready    agent   3h6m   v1.36.2
    aks-nodepool1-12345678-vmss000001   Ready    agent   3h6m   v1.36.2
    aks-nodepool1-12345678-vmss000002   Ready    agent   3h6m   v1.36.2