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

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

    virtual network Resource ID

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

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

    virtual network CIDR block

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

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

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

  • Перекрывающиеся адресные пространства могут привести к столкновениям IP-адресов или ошибкам связи. Чтобы снизить риск перекрытия IP-адресов, выберите уникальное адресное пространство для новой виртуальной сети.
  • Адресные пространства в 10/8диапазонах и 192.168/16 диапазонах 172.16/12часто используются для частных сетей, и они могут использоваться существующей инфраструктурой центра обработки данных. Если приложения 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 Буфер IP-адресов 16.
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 зарезервированных = 4091
Блок кластера 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.

Блок адресов (подсеть) 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 зарезервированных = 4091

В этом примере 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 Укажите идентификатор пути azure Resource Manager подсети. Это значение сопоставляется с указанным выше блоком адресов узлов плоскости управления.
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 Укажите идентификатор пути azure Resource Manager подсети. Это значение сопоставляется с указанным выше блоком адресов узлов агента.

В 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-snagents-sn находится 10.100.0.0/2410.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-snk8s-sn находится 172.24.0.0/24172.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. Выберите подсети и выберите имя подсети, содержащей кластер.

    route table and network security group

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

Примечание

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

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