Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье показано, как развернуть кластер AKS на основе приватного канала с помощью Azure CLI или Terraform. Если вы хотите создать кластер AKS без обязательного приватного канала или туннеля, см. раздел Создание кластера Azure Kubernetes Service (AKS) с интеграцией VNet для сервера API.
Обзор частных кластеров в AKS
В частном кластере уровень управления или сервер API имеют внутренние IP-адреса, определенные в документе RFC1918 — выделение адресов для частных сетей интернета. Используя частный кластер, вы можете гарантировать, что сетевой трафик между сервером API и пулами узлов остается только в частной сети.
Сервер управления или API находится в группе ресурсов Azure, управляемой AKS, а ваш кластер или пул узлов находится в вашей группе ресурсов. Сервер и пул узлов могут взаимодействовать друг с другом через службу Приватный канал Azure в виртуальной сети сервера API и частную конечную точку, доступную в подсети кластера AKS.
При создании частного кластера AKS AKS по умолчанию создает как частные, так и общедоступные полные доменные имена (FQDN) с соответствующими зонами DNS. Подробные параметры конфигурации DNS см. в разделе "Настройка частной зоны DNS", частной подзоны DNS или пользовательского поддомена.
Доступность по регионам
Частные кластеры доступны в общедоступных регионах, Azure для государственных организаций и Microsoft Azure, управляемых регионами 21Vianet, где поддерживается AKS.
Внимание
Все Microsoft Defender для облака функции будут официально прекращены в Azure в регионе Китая 18 августа 2026 года. Из-за этого предстоящего выхода на пенсию Azure в Китае клиенты больше не смогут подключить новые подписки к службе. Новая подписка — это любая подписка, которая еще не была подключена к службе Microsoft Defender для облака до 18 августа 2025 года, дата объявления о выходе на пенсию. Для получения дополнительной информации о прекращении использования см. раздел Объявление о прекращении работы Microsoft Defender для облака в Microsoft Azure, управляемое 21Vianet.
Клиенты должны работать с представителями своих клиентских учётных записей в Microsoft Azure, управляемых 21Vianet, чтобы оценить влияние этого прекращения поддержки на их операции.
Предварительные требования для частных кластеров AKS
Активная подписка Azure. Если у вас нет подписки Azure, создайте учетную запись free перед началом работы.
Задайте контекст подписки с помощью
az account setкоманды. Рассмотрим пример.az account set --subscription "00000000-0000-0000-0000-000000000000"Azure CLI версии 2.28.0 или более поздней. Найдите версию с помощью
az --versionкоманды. Если необходимо установить или обновить, см. раздел Install Azure CLI.При использовании Azure Resource Manager (ARM) или REST API Azure версия API AKS должна быть 2021-05-01 или более поздней.
Чтобы использовать пользовательский DNS-сервер, добавьте общедоступный IP-адрес Azure 168.63.129.16 в качестве вышестоящего DNS-сервера в пользовательском DNS-сервере и обязательно добавьте его в качестве первого DNS-сервера. Дополнительные сведения об IP-адресе Azure см. в разделе Что такое IP-адрес 168.63.129.16?
- Зона DNS кластера должна быть той, которую вы перенаправляете на 168.63.129.16. Дополнительные сведения о названиях зон можно найти в конфигурации DNS-зон служб Azure.
Существующие кластеры AKS, включенные с интеграцией виртуальной сети API Server, могут иметь режим частного кластера. Дополнительные сведения см. в разделе "Включение или отключение режима частного кластера" в существующем кластере с интеграцией виртуальной сети API Server.
Если необходимо включить Реестр контейнеров Azure в частном кластере AKS, настройте приватный канал для реестра контейнеров в виртуальной сети кластера или настройте пиринг между виртуальной сетью реестра контейнеров и виртуальной сетью частного кластера.
установлен kubectl. Ее можно установить локально с помощью
az aks install-cliкоманды.
- 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, размещенные Майкрософт, с частными кластерами. Рассмотрите возможность использования самостоятельно размещённых агентов.
- Удаление или изменение частной конечной точки в подсети клиента приводит к остановке работы кластера.
- служба Приватный канал Azure поддерживается только в стандартном Azure Load Balancer. Базовый 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его идентификатор ресурса. Свяжите эту зону с соответствующей виртуальной сетью (например, виртуальной сетью концентратора) и установитеpublicDNSнаfalse/ используйте--disable-public-fqdn. -
Только общедоступный DNS: отключите создание частной зоны, установив
privateDNSZone/--private-dns-zoneнаnoneи оставьтеpublicDNSв значении по умолчанию (true) / не используйте--disable-public-fqdn.
-
Настраиваемая частная зона DNS: укажите существующую частную зону и задайте
- В периферийных виртуальных сетях, использующих пользовательские DNS-серверы, это действие может завершиться ошибкой, если управляемому удостоверению кластера не хватает участника сети в периферийной виртуальной сети. Чтобы предотвратить сбой, выберите одну из следующих поддерживаемых конфигураций:
- Если вы используете собственную таблицу маршрутов (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
Создайте файл с именем
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 }Добавьте следующий код в
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" }Добавьте следующий код в
main.tfдля создания группы ресурсов Azure:resource "azurerm_resource_group" "this" { name = var.resource_group_name location = var.location }Добавьте следующий код в
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 = "kubenet" } }Выполните действия по инициализации Terraform, форматированию и проверке конфигурации Terraform, созданию плана выполнения Terraform, применению конфигурации Terraform и подключению к кластеру 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
Создайте файл с именем
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 }Добавьте следующий код в
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" }Добавьте следующий код в
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"] }Добавьте следующий код в
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" } }Выполните действия по инициализации Terraform, форматированию и проверке конфигурации Terraform, созданию плана выполнения Terraform, применению конфигурации Terraform и подключению к кластеру AKS.
Использование пользовательских доменов с частными кластерами AKS
Если вы хотите настроить пользовательские домены, которые могут быть разрешены только внутри системы, см. раздел "Использование пользовательских доменов".
Деактивация публичного полного доменного имени на частном кластере AKS
Выключить общедоступное полное доменное имя на новом кластере
Отключите общедоступное полное доменное имя при создании частного кластера AKS, используя команду az aks create с флагом --disable-public-fqdn.
Ключевые параметры в этой команде:
-
--disable-public-fqdn: отключает полностью квалифицированное доменное имя (FQDN) для сервера API. -
--assign-identity <resource-id>: указывает управляемую идентичность, которую следует использовать для кластера. -
--private-dns-zone [system|none]: указывает частную зону DNS, используемую для кластера.system— значение по умолчанию при настройке частной зоны DNS. Если не указано--private-dns-zone, AKS создает частную зону DNS в группе ресурсов узла.noneотключает создание частной зоны 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] \
--disable-public-fqdn \
--generate-ssh-keys
Выполните шаги 1–3 в статье "Создание частного кластера AKS с расширенными сетями" или создание частного кластера AKS сбазовой сетью по умолчанию для настройки конфигурации Terraform и создания необходимых ресурсов в зависимости от вашего сценария. В этом примере используется расширенная сеть.
Добавьте следующий код в
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" } }Выполните действия по инициализации Terraform, форматированию и проверке конфигурации Terraform, созданию плана выполнения Terraform, применению конфигурации Terraform и подключению к кластеру AKS.
Отключить общедоступное полное доменное имя (FQDN) в существующем кластере
Отключите публичное полное доменное имя в существующем кластере 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
Добавьте следующий код в существующий
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" } }Примените обновленную конфигурацию Terraform, используя команды
terraform planиterraform apply.terraform plan terraform apply
Параметры конфигурации для частного DNS
Вы можете настроить частные параметры DNS для частного кластера AKS с помощью Azure CLI (с параметром --private-dns-zone) или шаблоном Azure Resource Manager (ARM) (с свойством privateDNSZone). В следующей таблице описаны параметры, доступные для --private-dns-zone параметра или privateDNSZone свойства:
| Setting | 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, необходимо зарегистрировать поставщика
Майкрософт.ContainerServiceAzure в обеих подписках. - Если кластер AKS настроен с помощью учетной записи службы Active Directory, AKS не поддерживает использование системно назначаемого управляемого удостоверения с настраиваемой частной зоной DNS. Кластер должен использовать аутентификацию с помощью управляемого удостоверения, назначаемого пользователем.
Создание частного кластера AKS с частной зоной DNS
Создайте частный кластер 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–3 в статье "Создание частного кластера AKS с расширенными сетями" или создание частного кластера AKS сбазовой сетью по умолчанию для настройки конфигурации Terraform и создания необходимых ресурсов в зависимости от вашего сценария. В этом примере используется расширенная сеть.
Добавьте следующий код в
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" } }Выполните действия по инициализации Terraform, форматированию и проверке конфигурации Terraform, созданию плана выполнения Terraform, применению конфигурации Terraform и подключению к кластеру AKS.
Создание частного кластера AKS без частной зоны DNS
Выполните шаги 1–3 в статье "Создание частного кластера AKS с расширенными сетями" или создание частного кластера AKS сбазовой сетью по умолчанию для настройки конфигурации Terraform и создания необходимых ресурсов в зависимости от вашего сценария. В этом примере используется расширенная сеть.
Добавьте следующий код в
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" } }Выполните действия по инициализации Terraform, форматированию и проверке конфигурации Terraform, созданию плана выполнения Terraform, применению конфигурации Terraform и подключению к кластеру AKS.
Создание частного кластера AKS с настраиваемой частной зоной DNS или частной подзоной DNS
Создайте частный кластер 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–3 в статье "Создание частного кластера AKS с расширенными сетями" или создание частного кластера AKS сбазовой сетью по умолчанию для настройки конфигурации Terraform и создания необходимых ресурсов в зависимости от вашего сценария. В этом примере используется расширенная сеть.
Добавьте код в
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 ] }Выполните действия по инициализации Terraform, форматированию и проверке конфигурации Terraform, созданию плана выполнения Terraform, применению конфигурации Terraform и подключению к кластеру AKS.
Создание частного кластера AKS с настраиваемой частной зоной DNS и пользовательским поддоменом
Создайте частный кластер 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–3 в статье "Создание частного кластера AKS с расширенными сетями" или создание частного кластера AKS сбазовой сетью по умолчанию для настройки конфигурации Terraform и создания необходимых ресурсов в зависимости от вашего сценария. В этом примере используется расширенная сеть.
Добавьте следующий код в
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" } }Выполните действия по инициализации Terraform, форматированию и проверке конфигурации Terraform, созданию плана выполнения Terraform, применению конфигурации Terraform и подключению к кластеру 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
Добавьте следующий код в существующий
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" } }Примените обновленную конфигурацию 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 команду.
Настройте
kubectlдля подключения к вашему кластеру Kubernetes с помощью командыaz aks get-credentials. Эта команда скачивает учетные данные и настраивает интерфейс командной строки Kubernetes для их использования.az aks get-credentials --resource-group <private-cluster-resource-group> --name <private-cluster-name>Проверьте подключение к кластеру
kubectl getс помощью команды. Эта команда возвращает список узлов кластера.kubectl get nodesКоманда возвращает выходные данные, аналогичные следующему примеру выходных данных:
NAME STATUS ROLES AGE VERSION aks-nodepool1-12345678-vmss000000 Ready agent 3h6m v1.15.11 aks-nodepool1-12345678-vmss000001 Ready agent 3h6m v1.15.11 aks-nodepool1-12345678-vmss000002 Ready agent 3h6m v1.15.11