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


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

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

Кластер Kubernetes в Azure Stack Hub с использованием AKS Engine использует сетевой плагин 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/12192.168/16частных сетей и могут использоваться существующей инфраструктурой центра обработки данных. Если приложения Kubernetes используют ресурсы в центре обработки данных, уменьшите риск столкновений, выбрав адресное пространство для пользовательской виртуальной сети, отличной от адресного пространства центра обработки данных.
  • Рекомендуется использовать выделенную подсеть для кластера Kubernetes.
  • Если вы используете несколько существующих виртуальных сетей, рассмотрите возможность использования разных адресных пространств в каждой сети, если планируется использовать пиринг между виртуальными сетями. Перекрывающиеся адресные пространства могут ухудшить возможность включения пиринга.

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

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

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

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

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

  • Первые четыре IP-адреса и последний IP-адрес зарезервированы и не могут использоваться в любой подсети Azure.
  • Должен оставаться свободным буфер размером не менее шестнадцати 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 узлов уровня управления
Десять IP-адресов в качестве резерва
Один IP-адрес для подсистемы балансировки нагрузки
172.100.0.238 - 172.100.0.254 16 Буфер из шестнадцати IP-адресов.
172.100.0.255 1 Зарезервировано в подсети Azure.

В этом примере свойство firstConsecutiveStaticIP равно 172.100.0.224.

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

Пример блоков адресов 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 4 096 - 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.

Примечание.

Если диапазон общедоступных 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 4 096 - 5 зарезервировано = 4091

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

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

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

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

Поле Пример Description
vnetSubnetId /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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.

Поле Пример Description
vnetSubnetId /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/MDBN-K8S/providers/Microsoft.Network/virtualNetworks/MDBN-K8S/subnets/agents-sn Укажите идентификатор пути к нужной подсети в Azure Resource Manager. Это значение сопоставляется с блоком адресов узлов агента.

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

Поле Пример Description
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/24agents-sn10.100.1.0/24

"masterProfile": {
  ...
  "vnetSubnetId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/MDBN-K8S/providers/Microsoft.Network/virtualNetworks/MDBN-K8S/subnets/control-plane-sn",
  "firstConsecutiveStaticIP": "10.100.0.239",
  ...
},
...
"agentPoolProfiles": [
  {
    ...
    "vnetSubnetId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/MDBN-K8S/providers/Microsoft.Network/virtualNetworks/MDBN-K8S/subnets/control-plane-sn",
  "firstConsecutiveStaticIP": "172.24.0.239",
  ...
},
...
"agentPoolProfiles": [
  {
    ...
    "vnetSubnetId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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). После успешного развертывания кластера в пользовательской виртуальной сети, получите идентификатор ресурса таблицы маршрутов из панели Network в группе ресурсов вашего кластера.

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

  2. Выберите Все ресурсы.

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

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

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

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

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

Примечание.

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

Следующие шаги