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


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

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

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

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

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

Предпосылки

  • Необходимо установить Azure CLI версии 2.73.0 или более поздней версии. Вы можете проверить версию с помощью az --version команды.

Ограничения

  • Интеграция VNet API-сервера не поддерживает зашифрованные виртуальные сети.

Доступность

  • Интеграция VNet API-сервера доступна во всех общедоступных облачных регионах, кроме eastus2 и qatarcentral. Мы постоянно работаем над включением этой функции в этих регионах и обновим эту страницу, когда эти регионы становятся доступными.

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

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

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

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

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

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

  • Разверните общедоступный кластер AKS с интеграцией виртуальной сети API Server в управляемую виртуальную сеть, используя команду az aks create с флагом --enable-api-server-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 частный с интеграцией виртуальной сети сервера API для управляемой виртуальной сети, используя команду az aks create с флагами --enable-api-server-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 с интеграцией API Server в виртуальную сеть с использованием собственной виртуальной сети

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

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

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

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

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

  • Создайте группу ресурсов с помощью команды 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-api-server-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-api-server-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 для интеграции сервера API с виртуальной сетью.

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

Интеграция виртуальных сетей сервера API — это односторонняя, чувствительная к емкости функция.

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

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

  • Невозможно отключить функцию.
    После включения функция является постоянной. Вы не можете отключить интеграцию с виртуальной сетью сервера API.

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

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

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

  • Обновите кластер для интеграции виртуальной сети с сервером 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>
    

Включение или отключение режима приватного кластера в существующем кластере с интеграцией 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
    

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

  • Отключите режим частного кластера с помощью 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 с виртуальной сетью через Azure Private Link. Ниже показано, как создать службу приватного канала (PLS) в виртуальной сети кластера и подключиться к ней из другой виртуальной сети или подписки с помощью частной конечной точки.

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

  • Создайте частный кластер AKS с интеграцией с виртуальной сетью для сервера API, используя команду az aks create с флагами --enable-api-server-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 см. в статье "Приватный канал" с интеграцией виртуальной сети СЕРВЕРА API.

Правила безопасности NSG

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

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

Дальнейшие шаги