Использование интеграции API-сервера с VNet в Azure Kubernetes Service (AKS)

Область применения: ✔️ AKS Automatic ✔️ AKS Standard

Кластер Azure Kubernetes Service (AKS), настроенный с помощью интеграции виртуальных сетей API Server, проектирует конечную точку сервера API непосредственно в делегированную подсеть в виртуальной сети, где развертывается AKS. Интеграция виртуальной сети СЕРВЕРА API обеспечивает сетевое взаимодействие между сервером API и узлами кластера, не требуя приватного канала или туннеля. Сервер API доступен за виртуальным IP-адресом внутреннего балансировщика нагрузки в делегированной подсети, которую узлы настроены использовать. С помощью интеграции виртуальной сети сервера API можно гарантировать, что сетевой трафик между сервером API и пулами узлов остается только в частной сети.

Для большинства рабочих нагрузок AKS Automatic — это рекомендуемый вариант работы с AKS по умолчанию. AKS Automatic готов к промышленной эксплуатации по умолчанию и включает интеграцию API Server с виртуальной сетью (VNet) в качестве предварительно настроенной функции безопасности кластера. В AKS Standard интеграция API-сервера с виртуальной сетью (VNet) является необязательной, и ее можно включить при создании кластера или путем обновления существующего кластера.

Дополнительные сведения об AKS Automatic см. в разделе Что такое AKS Automatic в Azure Kubernetes Service (AKS)?

Интеграция виртуальной сети сервера API в AKS Automatic и AKS Standard

Интеграция виртуальных сетей API-сервера доступна в обоих режимах кластера AKS, но настройка отличается:

  • AKS Automatic: интеграция виртуальной сети сервера API предварительно настроена.
  • AKS Standard: интеграция сервера API с виртуальной сетью необязательна и должна быть включена явно.

Для большинства рабочих сценариев начните с AKS Automatic, чтобы использовать готовые к работе значения по умолчанию и сократить эксплуатационные расходы.

Подключение сервера API

Уровень управления или сервер API находятся в подписке Azure, управляемой AKS. Кластер или пул узлов находится в подписке Azure. Сервер и виртуальные машины, составляющие узлы кластера, могут взаимодействовать друг с другом через VIP-адрес сервера API и IP-адреса подов, которые проецируются в делегированную подсеть.

Интеграция API сервера с виртуальной сетью поддерживается для публичных или частных кластеров. После подготовки кластера можно добавить или удалить общедоступный доступ. В отличие от кластеров, не интегрированных с виртуальной сетью (VNet), узлы агента всегда взаимодействуют напрямую с частным IP-адресом внутреннего балансировщика нагрузки (ILB) сервера API без использования DNS. Весь трафик от узлов к API-серверу проходит по частной сети, и для подключения API-сервера к узлам туннель не требуется. Клиенты вне кластера, нуждающиеся в обмене данными с сервером API, могут сделать это обычно, если доступ к общедоступной сети включен. Если доступ к общедоступной сети отключен, следует следовать той же методике настройки частного DNS, что и стандартные частные кластеры.

Предпосылки

Ограничения

Следующие ограничения применяются к интеграции виртуальной сети сервера API, независимо от того, предварительно настроена ли она в AKS Automatic или явно включена в AKS Standard:

  • Интеграция API Server с виртуальной сетью не поддерживает шифрование виртуальной сети. Кластеры, развернутые на SKU узлов AKS версии v3 или более ранней (которые не поддерживают шифрование VNet), допускаются, но трафик не шифруется. Кластеры, развернутые на версиях SKU узлов AKS версии 4 или новее (поддерживающих шифрование виртуальных сетей), блокируются, поскольку зашифрованные виртуальные сети несовместимы с интеграцией VNet для API-сервера. Дополнительные сведения см. в разделе SKU поддерживаемых виртуальных машин AKS.
  • Для использования сети с двойным стеком кластеру требуется Kubernetes версии 1.26.3 или более поздней, сетевой плагин azure и режим работы плагина overlay сети. Дополнительные подробности вы найдете в разделе кластер Azure CNI с двухстековой сетью.

Доступность

  • Интеграция Виртуальной Сети сервера API доступна во всех общедоступных облачных регионах, кроме qatarcentral.

Создание кластера с интеграцией виртуальной сети с сервером API

В AKS Automatic интеграция виртуальной сети СЕРВЕРА API предварительно настроена. Явный --enable-apiserver-vnet-integration флаг не требуется.

Создайте автоматический кластер AKS, выполнив краткое руководство.

AKS Standard: управляемая виртуальная сеть

Кластеры AKS Standard с интеграцией API-сервера с виртуальной сетью в режиме управляемой виртуальной сети можно настроить как общедоступные или частные.

Замечание

Интеграция API Server с виртуальной сетью недоступна в qatarcentral.

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

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

az group create --location <location> --name <resource-group>

Развертывание общедоступного кластера

Разверните публичный кластер AKS Standard с интеграцией сервера API с виртуальной сетью в управляемой виртуальной сети с помощью команды az aks create с флагом --enable-apiserver-vnet-integration.

az aks create --name <cluster-name> \
    --resource-group <resource-group> \
    --location <location> \
    --network-plugin azure \
    --enable-apiserver-vnet-integration \
    --generate-ssh-keys

Развертывание частного кластера

Разверните частный кластер AKS Standard с интеграцией с виртуальной сетью сервера API для управляемой виртуальной сети с помощью команды az aks create с флагами --enable-apiserver-vnet-integration и --enable-private-cluster.

az aks create --name <cluster-name> \
    --resource-group <resource-group> \
    --location <location> \
    --network-plugin azure \
    --enable-private-cluster \
    --enable-apiserver-vnet-integration \
    --generate-ssh-keys

AKS Standard: создание собственной виртуальной сети

При использовании модели Bring Your Own VNet необходимо создать подсеть сервера API и делегировать её ресурсу Microsoft.ContainerService/managedClusters. Это делегирование предоставляет службе AKS разрешения на развертывание подов сервера API и внутреннего балансировщика нагрузки в данной подсети. Вы не можете использовать подсеть для других рабочих нагрузок, но ее можно использовать для нескольких кластеров AKS, расположенных в одной виртуальной сети. Минимальный поддерживаемый размер подсети сервера API./28

Идентификатор кластера должен иметь разрешения на подсеть сервера API и подсеть узла. Отсутствие разрешений в подсети сервера API может привести к сбою в процессе предоставления ресурсов.

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

Кластер AKS резервирует по крайней мере девять IP-адресов в адресном пространстве подсети. Нехватка IP-адресов может помешать масштабированию API-сервера и вызвать его отказ.

Замечание

Интеграция сервера API с виртуальной сетью недоступна в qatarcentral.

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

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

az group create --location <location> --name <resource-group>

Создание виртуальной сети

  1. Создайте виртуальную сеть с помощью az network vnet create команды.

    az network vnet create --name <vnet-name> \
    --resource-group <resource-group> \
    --location <location> \
    --address-prefixes 172.19.0.0/16
    
  2. Создайте подсеть сервера API с помощью az network vnet subnet create команды.

    az network vnet subnet create --resource-group <resource-group> \
    --vnet-name <vnet-name> \
    --name <apiserver-subnet-name> \
    --delegations Microsoft.ContainerService/managedClusters \
    --address-prefixes 172.19.0.0/28
    
  3. Создайте подсеть кластера с помощью az network vnet subnet create команды.

    az network vnet subnet create --resource-group <resource-group> \
    --vnet-name <vnet-name> \
    --name <cluster-subnet-name> \
    --address-prefixes 172.19.1.0/24
    

Создайте управляемое удостоверение и предоставьте ему разрешения на виртуальную сеть.

  1. Создайте управляемое удостоверение с помощью az identity create команды.

    az identity create --resource-group <resource-group> --name <managed-identity-name> --location <location>
    
  2. Назначьте роль Участника сети для подсети сервера API с помощью команды az role assignment create.

    az role assignment create --scope <apiserver-subnet-resource-id> \
    --role "Network Contributor" \
    --assignee <managed-identity-client-id>
    
  3. Назначьте роль участника сети для подсети кластера с помощью команды az role assignment create.

    az role assignment create --scope <cluster-subnet-resource-id> \
    --role "Network Contributor" \
    --assignee <managed-identity-client-id>
    

Развертывание общедоступного кластера

Разверните общедоступный кластер AKS с интеграцией виртуальной сети API Server, используя команду az aks create с флагом --enable-apiserver-vnet-integration.

az aks create --name <cluster-name> \
    --resource-group <resource-group> \
    --location <location> \
    --network-plugin azure \
    --enable-apiserver-vnet-integration \
    --vnet-subnet-id <cluster-subnet-resource-id> \
    --apiserver-subnet-id <apiserver-subnet-resource-id> \
    --assign-identity <managed-identity-resource-id> \
    --generate-ssh-keys

Развертывание частного кластера

Разверните частный кластер AKS с интеграцией виртуальной сети API Server с помощью команды az aks create с флагами --enable-apiserver-vnet-integration и --enable-private-cluster.

az aks create --name <cluster-name> \
    --resource-group <resource-group> \
    --location <location> \
    --network-plugin azure \
    --enable-private-cluster \
    --enable-apiserver-vnet-integration \
    --vnet-subnet-id <cluster-subnet-resource-id> \
    --apiserver-subnet-id <apiserver-subnet-resource-id> \
    --assign-identity <managed-identity-resource-id> \
    --generate-ssh-keys

Преобразование существующего кластера AKS Standard в интеграцию виртуальной сети сервера API

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

Интеграция API Server с виртуальной сетью — это односторонняя функция, зависящая от доступной емкости. При включении интеграции API Server с виртуальной сетью для существующего кластера AKS Standard применяются следующие ограничения:

  • Требуется перезапуск вручную: После включения интеграции API-сервера с виртуальной сетью с использованием az aks update --enable-apiserver-vnet-integration, из-за переноса ресурсов плоскости управления необходимо немедленно перезапустить кластер, чтобы изменение вступило в силу. Этот перезапуск не автоматизирован. Задержка перезапуска повышает риск недоступности емкости, что может предотвратить запуск сервера API. Перезапуск кластера также гарантирует надежное повторное подключение всех узлов к новой конечной точке сервера API.
  • Емкость проверяется, но не зарезервирована: AKS проверяет региональную емкость при включении функции в существующем кластере, но эта проверка не резервирует емкость. Если отложить перезапуск и за это время ресурсы станут недоступны, кластер может не запуститься после остановки или перезапуска. Кластеры, которые включили эту функцию до общедоступной доступности или еще не перезагруженные с момента включения, не проходят проверку емкости.
  • Функция не может быть отключена: после включения эта функция является постоянной. Невозможно отключить интеграцию виртуальной сети сервера API.

Это обновление выполняет обновление версии образа узла во всех пулах узлов и перезапускает все рабочие нагрузки во время последовательного обновления образа.

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

Преобразование кластера в интеграцию VNet с серверами API приводит к изменению IP-адреса сервера API, хотя его имя хоста остается неизменным. Если вы настраиваете IP-адрес сервера API в любых брандмауэрах или правилах группы безопасности сети, может потребоваться обновить эти правила.

  1. Обновите кластер для интеграции виртуальной сети с сервером API, используя команду az aks update с флагом --enable-apiserver-vnet-integration.

    az aks update --name <cluster-name> \
        --resource-group <resource-group> \
        --enable-apiserver-vnet-integration \
        --apiserver-subnet-id <apiserver-subnet-resource-id>
    
  2. Перезапустите кластер с помощью команд [az aks stop][az-aks-stop] и [az aks start][az-aks-start].

    az aks stop --name <cluster-name> --resource-group <resource-group>
    az aks start --name <cluster-name> --resource-group <resource-group>
    

Включение или отключение режима приватного кластера в существующем кластере с интеграцией API сервера в виртуальную сеть

Кластеры AKS, настроенные с помощью интеграции виртуальных сетей API Server, могут иметь режим доступа к общедоступной сети или режим частного кластера включен или отключен без повторного развертывания кластера. Имя узла сервера API не изменяется, но при необходимости общедоступные записи DNS изменяются или удаляются.

Замечание

--disable-private-cluster в настоящее время находится в предварительной версии. Дополнительные сведения см. в разделе "Справочные материалы" и "Уровни поддержки".

Включение режима частного кластера

Включите режим частного кластера с помощью az aks update команды с флагом --enable-private-cluster .

az aks update --name <cluster-name> \
    --resource-group <resource-group> \
    --enable-private-cluster \
    --enable-apiserver-vnet-integration \
    --apiserver-subnet-id <apiserver-subnet-resource-id>

Отключение режима частного кластера

Отключите режим частного кластера с помощью az aks update команды с флагом --disable-private-cluster .

az aks update --name <cluster-name> \
    --resource-group <resource-group> \
    --disable-private-cluster

Подключение к кластеру с помощью kubectl

Настройте kubectl, чтобы подключиться к вашему кластеру с помощью команды az aks get-credentials.

az aks get-credentials --resource-group <resource-group> --name <cluster-name>

Вы можете открыть конечную точку сервера API частного кластера через интеграцию API сервера с виртуальной сетью (VNet) с использованием Приватный канал Azure. Ниже показано, как создать службу Приватный канал (PLS) в виртуальной сети кластера и подключиться к ней из другой виртуальной сети или подписки с помощью частной конечной точки.

Замечание

Интеграция сервера API с виртуальной сетью недоступна в регионе qatarcentral.

Создать частный кластер интеграции VNet для сервера API

Создайте частный кластер AKS с интеграцией с виртуальной сетью для сервера API, используя команду az aks create с флагами --enable-apiserver-vnet-integration и --enable-private-cluster.

az aks create --name <cluster-name> \
    --resource-group <resource-group> \
    --location <location> \
    --enable-private-cluster \
    --enable-apiserver-vnet-integration

Для получения дополнительных рекомендаций по настройке Приватный канал с интеграцией API Server в виртуальную сеть, см. Приватный канал с интеграцией API Server в виртуальную сеть.

Правила безопасности группы безопасности сети (NSG)

Весь трафик в виртуальной сети разрешен по умолчанию. Но если вы добавили правила NSG для ограничения трафика между различными подсетями, убедитесь, что правила безопасности NSG разрешают следующие типы обмена данными:

Место назначения Исходный материал Протокол Порт Использование
СЕРВЕРА APIServer подсети CIDR Подсеть кластера Протокол tcp 443 и 4443 Требуется для включения связи между узлами и сервером API.
СЕРВЕРА APIServer подсети CIDR балансировщик нагрузки Azure Протокол tcp 9988 Требуется для включения связи между Azure Load Balancer и сервером API. Вы также можете включить все коммуникации между Azure Load Balancer и подсетью сервера API по CIDR.