Развертывание кластера Kubernetes в пользовательской виртуальной сети Azure Stack Hub

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

Кластер Kubernetes в Azure Stack Hub с использованием обработчика AKS использует сетевой подключаемый модуль kubenet. Обработчик AKS в Azure Stack Hub также поддерживает подключаемый модуль сети Azure CNI.

Ограничения при создании настраиваемой виртуальной сети

  • Пользовательская виртуальная сеть должна находиться в той же подписке, что и все остальные компоненты кластера Kubernetes.
  • Пул узлов уровня управления и пул узлов агента должны находиться в одной виртуальной сети. Узлы можно развернуть в разных подсетях в одной виртуальной сети.
  • Подсеть кластера Kubernetes должна использовать диапазон IP-адресов в пределах диапазона IP-адресов пользовательской виртуальной сети. См. раздел Получение блока IP-адресов.
  • Учтите, что рекомендуемый размер подсетей узла зависит от типа используемого сетевого подключаемого модуля. Как правило, Azure CNI требует большего количества IP-адресов для подсети, поддерживающей пулы узлов агентов, чем kubenet. См. примеры kubenet и Azure CNI ниже.
  • Адресное 169.254.0.0/16 пространство не может использоваться для пользовательских виртуальных сетей для кластеров Kubernetes.

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

В экземпляре Azure Stack Hub должна быть пользовательская виртуальная сеть. Дополнительные сведения см. в статье Краткое руководство. Создание виртуальной сети с помощью портал Azure.

Создайте новую подсеть в виртуальной сети. Вам потребуется получить идентификатор ресурса подсети и диапазон IP-адресов. Идентификатор ресурса и диапазон будут использоваться в модели API при развертывании кластера.

  1. Откройте пользовательский портал Azure Stack Hub в экземпляре Azure Stack Hub.

  2. Щелкните Все ресурсы.

  3. Введите имя виртуальной сети в поле поиска.

  4. Выберите Подсети>+ Подсети , чтобы добавить подсеть.

  5. Добавьте имя и диапазон адресов с помощью нотации CIDR. Щелкните ОК.

  6. Выберите Свойства в колонке Виртуальные сети . Скопируйте идентификатор ресурса и добавьте /subnets/<nameofyoursubnect>. Это значение будет использоваться в качестве значения ключа vnetSubnetId в модели API для кластера. Идентификатор ресурса для подсети использует следующий формат:
    /subscriptions/SUB_ID/resourceGroups/RG_NAME/providers/Microsoft.Network/virtualNetworks/VNET_NAME/subnets/SUBNET_NAME

    идентификатор ресурса виртуальной сети

  7. Выберите Подсети в колонке Виртуальные сети . Выберите имя подсети, например control-plane-sn.

    Не свяжите подсеть с группой безопасности сети (NSG).

    блок CIDR виртуальной сети

  8. В колонке подсети запишите диапазон адресов (блок CIDR) каждой подсети.

Рекомендации по выбору адресного пространства

При создании настраиваемой виртуальной сети необходимо указать пространство IP-адресов сети и диапазон IP-адресов для каждой подсети. При выборе адресных пространств и диапазонов для использования в кластере Kubernetes учитывайте следующие факторы:

  • Перекрывающиеся адресные пространства могут привести к конфликтам IP-адресов или ошибкам связи. Чтобы снизить риск перекрытия IP-адресов, выберите уникальное адресное пространство для новой виртуальной сети.
  • Адресные пространства в 10/8диапазонах , 172.16/12и 192.168/16 часто используются для частных сетей, и они могут использоваться существующей инфраструктурой центра обработки данных. Если приложения Kubernetes используют ресурсы в вашем центре обработки данных, уменьшите риск конфликтов, выбрав адресное пространство для пользовательской виртуальной сети, отличное от адресного пространства вашего центра обработки данных.
  • Рекомендуется использовать выделенную подсеть для кластера Kubernetes.
  • При использовании нескольких существующих виртуальных сетей рассмотрите возможность использования разных адресных пространств в каждой сети, если вы планируете использовать пиринг между виртуальными сетями. Перекрытие адресных пространств может помешать вам включить пиринг.

Получение блоков IP-адресов

Обработчик AKS поддерживает развертывание в существующей виртуальной сети. При развертывании в существующей виртуальной сети кластер использует блоки последовательных адресов для узлов агента, узлов уровня управления, служб кластера и контейнеров (pod). Каждый блок адресов можно преобразовать в подсеть в виртуальной сети. Все блоки адресов в развертывании кластера должны быть частью общего адресного пространства виртуальной сети. Выбор блоков адресов за пределами адресного пространства виртуальной сети может привести к проблемам с подключением.

При настройке кластера Kubernetes требуется не менее трех блоков адресов:

  • Блок адресов узлов. Это блок адресов, используемый для назначения адресов узлам кластера. Это может быть один блок адресов для всех узлов кластера или отдельные блоки (подсети) для уровня управления и пулов агентов. При выборе диапазона адресов для этого блока учитывайте количество узлов в кластере. Узлы и контейнеры Azure CNI получают свои адреса из одного блока адресов, поэтому при выборе диапазона адресов при использовании Azure CNI учитывайте количество контейнеров, которые необходимо развернуть в кластере.
  • Блок адресов служб. Это блок адресов, из которого службы, развернутые в кластере Kubernetes, будут получать адрес кластера. При выборе диапазона адресов для этого блока учитывайте максимальное количество служб, которые вы планируете запускать в кластере.
  • Блок адресов кластера. Это блок адресов, из которого модули pod будут получать свой адрес кластера. При выборе диапазона адресов для этого блока учитывайте максимальное число модулей pod, которые вы планируете запускать в кластере. Как упоминание ранее, для Azure CNI адресные блоки кластера и узлов совпадают.

В дополнение к блокам адресов для узлов уровня управления необходимо задать еще два значения. Необходимо знать количество IP-адресов, которые необходимо зарезервировать для кластера, и первый последовательный статический IP-адрес в пространстве IP-адресов подсети. Подсистеме AKS требуется диапазон до 16 неиспользуемых IP-адресов при использовании нескольких узлов уровня управления. Кластер будет использовать один IP-адрес для каждого уровня управления до пяти узлов уровня управления. Обработчик AKS также потребует следующие 10 IP-адресов после последнего узла уровня управления для резервирования IP-адресов в резервировании. Наконец, подсистема балансировки нагрузки будет использовать еще один IP-адрес после узлов уровня управления и резервирования в общей сложности 16. При размещении блока IP-адресов для подсети требуется выделить следующие существующие IP-адреса:

  • Первые четыре IP-адреса и последний IP-адрес зарезервированы и не могут использоваться ни в одной подсети Azure.
  • Буфер из 16 IP-адресов следует оставить открытым.
  • Значение первого IP-адреса кластера должно быть ближе к концу адресного пространства, чтобы избежать конфликтов IP-адресов. По возможности назначьте firstConsecutiveStaticIP свойство IP-адресу в конце доступного пространства IP-адресов в подсети.

Например, для кластера с тремя узлами уровня управления. Если вы используете подсеть с 256 адресами, например 10.100.0.0/24, вам потребуется задать первый статический IP-адрес, предшествующий 239. В следующей таблице показаны адреса и рекомендации.

Диапазон для подсети /24 Число Примечание
172.100.0.0 - 172.100.0.3 4 Зарезервировано в подсети Azure.
172.100.0.224-172.100.0.238 14 Число IP-адресов для кластера, определенного обработчиком AKS.

3 IP-адреса для 3 узлов уровня управления
10 IP-адресов для запаса
1 IP-адрес для подсистемы балансировки нагрузки
172.100.0.238 - 172.100.0.254 16 16 буфера IP-адресов.
172.100.0.255 1 Зарезервировано в подсети Azure.

В этом примере firstConsecutiveStaticIP свойство будет иметь значение 172.100.0.224.

Для больших подсетей, например /16 с более чем 60 тысячами адресов, может оказаться нецелесообразно задать назначение статических IP-адресов в конце сетевого пространства. Задайте диапазон статических IP-адресов кластера от первых 24 адресов в пространстве IP-адресов, чтобы кластер был устойчивым при получении адресов.

Пример блоков адресов Kubenet

В следующем примере показано, как эти рекомендации заполняют адресное пространство в виртуальной сети для кластера с помощью подключаемого модуля сети kubenet с выделенными подсетями для узла уровня управления и пулов узлов агента с тремя узлами на пул.

Адресное пространство виртуальной сети: 10.100.0.0/16.

Блок адресов (подсеть) CIDR Диапазон IP-адресов Число IP-адресов (доступно)
Блок узлов уровня управления 10.100.0.0/24 10.100.0.0 - 10.100.0.255 255 - 4 зарезервировано = 251
Блок узлов агента 10.100.1.0/24 10.100.1.0 - 10.100.1.255 255 - 4 зарезервировано = 251
Блок служб 10.100.16.0/20 10.100.16.0 - 10.100.31.255 От 4096 до 5 зарезервированных = 4 091
Блок кластера 10.100.128.0/17 10.100.128.0 - 10.100.255.255 32 768 - 5 зарезервировано = 32 763

В этом примере firstConsecutiveStaticIP свойство будет иметь значение 10.100.0.239.

Пример блоков адресов Azure CNI

В следующем примере показано, как эти различные аспекты заполняют адресное пространство в виртуальной сети для кластера с помощью подключаемого модуля сети Azure CNI с выделенными подсетями для уровня управления и пулами узлов агента с тремя узлами на пул.

Адресное пространство виртуальной сети: 172.24.0.0/16.

Примечание

Если в вашей среде диапазон общедоступных IP-адресов находится в пределах CIDR10.0.0.0/8, используйте kubenet в качестве подключаемого модуля сети.

Блок адресов (подсеть) CIDR Диапазон IP-адресов Число IP-адресов (доступно)
Блок узлов уровня управления 172.24.0.0/24 172.24.0.0 - 172.24.0.255 255 - 4 зарезервировано = 251
Узлы агента & блок кластера 172.24.128.0/17 172.24.128.0 - 172.24.255.255 32 768 - 5 зарезервировано = 32 763
Блок служб 172.24.16.0/20 172.24.16.0 - 172.24.31.255 От 4096 до 5 зарезервированных = 4 091

В этом примере firstConsecutiveStaticIP свойство будет иметь значение 172.24.0.239.

Обновление модели API

Обновите модель API, используемую для развертывания кластера из обработчика AKS в настраиваемую виртуальную сеть.

В masterProfile задайте следующие значения:

Поле Пример Описание
vnetSubnetId /subscriptions/77e28b6a-582f-42b0-94d2-93b9eca60845/resourceGroups/MDBN-K8S/providers/Microsoft.Network/virtualNetworks/MDBN-K8S/subnets/control-plane-sn Укажите идентификатор пути Resource Manager Azure для подсети. Это значение сопоставляется с указанным выше блоком адресов узлов уровня управления.
firstConsecutiveStaticIP 10.100.0.239 Назначьте свойству firstConsecutiveStaticIP конфигурации IP-адрес, который находится в конце доступного пространства IP-адресов в нужной подсети. firstConsecutiveStaticIP Применяется только к пулу узлов уровня управления.

В agentPoolProfiles задайте следующие значения:

Поле Пример Описание
vnetSubnetId /subscriptions/77e28b6a-582f-42b0-94d2-93b9eca60845/resourceGroups/MDBN-K8S/providers/Microsoft.Network/virtualNetworks/MDBN-K8S/subnets/agents-sn Укажите идентификатор пути Resource Manager Azure для подсети. Это значение сопоставляется с приведенным выше блоком адресов узлов агента.

В orchestratorProfile найдите kubernetesConfig и задайте следующее значение:

Поле Пример Описание
clusterSubnet 10.100.128.0/17 IP-подсеть, используемая для выделения IP-адресов для сетевых интерфейсов pod. Это значение сопоставляется с приведенным выше блоком адресов кластера. Подсеть должна находиться в адресном пространстве виртуальной сети. Если Azure CNI включен, по умолчанию используется значение 10.240.0.0/12. Без Azure CNI значение по умолчанию — 10.244.0.0/16. Используйте /16 вместо подсети /24. При использовании /24 эта подсеть будет назначена только одному узлу. Другому узлу не будет назначена сеть POD, так как у вас будет недостаточно пространства IP-адресов, поэтому они не будут готовы в кластере.
serviceCidr 10.100.16.0/20 IP-подсеть, используемая для выделения IP-адресов для служб, развернутых в кластере. Это значение сопоставляется с приведенным выше блоком служб кластера.
dnsServiceIP 10.100.16.10 IP-адрес, назначаемый службе DNS кластера. Адрес должен поступать из подсети serviceCidr. Это значение необходимо задать при указании serviceCidr. Значением по умолчанию является адрес .10 подсети serviceCidr.

Например, при использовании kubenet:
С сетевым адресным пространством, 10.100.0.0/16 где подсеть для control-plane-sn имеет значение 10.100.0.0/24 и agents-sn является 10.100.1.0/24

"masterProfile": {
  ...
  "vnetSubnetId": "/subscriptions/77e28b6a-582f-42b0-94d2-93b9eca60845/resourceGroups/MDBN-K8S/providers/Microsoft.Network/virtualNetworks/MDBN-K8S/subnets/control-plane-sn",
  "firstConsecutiveStaticIP": "10.100.0.239",
  ...
},
...
"agentPoolProfiles": [
  {
    ...
    "vnetSubnetId": "/subscriptions/77e28b6a-582f-42b0-94d2-93b9eca60845/resourceGroups/MDBN-K8S/providers/Microsoft.Network/virtualNetworks/MDBN-K8S/subnets/agents-sn",
    ...
  },
    ...
"kubernetesConfig": [
  {
    ...
    "clusterSubnet": "10.100.128.0/17",
    "serviceCidr": "10.100.16.0/20",
    "dnsServiceIP" : "10.100.16.10",

    ...
  },

Например, при использовании Azure CNI:
С сетевым адресным пространством, 172.24.0.0/16 где подсеть для control-plane-sn имеет значение 172.24.0.0/24 и k8s-sn является 172.24.128.0/17

"masterProfile": {
  ...
  "vnetSubnetId": "/subscriptions/77e28b6a-582f-42b0-94d2-93b9eca60845/resourceGroups/MDBN-K8S/providers/Microsoft.Network/virtualNetworks/MDBN-K8S/subnets/control-plane-sn",
  "firstConsecutiveStaticIP": "172.24.0.239",
  ...
},
...
"agentPoolProfiles": [
  {
    ...
    "vnetSubnetId": "/subscriptions/77e28b6a-582f-42b0-94d2-93b9eca60845/resourceGroups/MDBN-K8S/providers/Microsoft.Network/virtualNetworks/MDBN-K8S/subnets/k8s-sn",
    ...
  },
    ...
"kubernetesConfig": [
  {
    ...
    "clusterSubnet": "172.24.128.0/17",
    "serviceCidr": "172.24.16.0/20",
    "dnsServiceIP" : "172.24.16.10",
    ...
  },

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

После добавления значений в модель API можно развернуть кластер с клиентского компьютера с помощью команды в обработчике deploy AKS. Инструкции см. в разделе Развертывание кластера Kubernetes.

Настройка таблицы маршрутов

Если вы используете kubenet, например , networkPluginkubenet в объекте конфигурации kubernetesConfig модели API. После развертывания кластера вернитесь в виртуальную сеть на пользовательском портале Azure Stack. Задайте таблицу маршрутов и группу безопасности сети (NSG) в колонке подсети. После успешного развертывания кластера в настраиваемой виртуальной сети получите идентификатор ресурса Таблица маршрутов из колонки Сеть в группе ресурсов кластера.

  1. Откройте пользовательский портал Azure Stack Hub в своем экземпляре Azure Stack Hub.

  2. Щелкните Все ресурсы.

  3. Введите имя виртуальной сети в поле поиска.

  4. Выберите Подсети , а затем выберите имя подсети, содержащей кластер.

    Таблица маршрутизации и группа безопасности сети

  5. Выберите Таблица маршрутов , а затем выберите таблицу маршрутов для кластера.

  6. Убедитесь, что это делается для каждой подсети, указанной в модели API, включая masterProfile подсеть.

Примечание

Пользовательская виртуальная сеть для кластера Windows Kubernetes имеет известную проблему.

Дальнейшие действия