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


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

Кластер Kubernetes можно развернуть с помощью подсистемы Azure Kubernetes Service (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-адресов, выберите уникальное адресное пространство для новой виртуальной сети.
  • Адресные пространства в диапазонах часто 192.168/16 используются для 10/8172.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.
  • Должен оставаться свободным буфер размером не менее шестнадцати 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 000 адресов, часто будет нецелесообразно выделять статические 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/24 agents-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-sn172.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). Успешно завершив развертывание кластера в пользовательской виртуальной сети, получите идентификатор ресурса таблицы маршрутов из колонки Сеть в группе ресурсов кластера.

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

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

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

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

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

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

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

Примечание.

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

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