Развертывание кластера Kubernetes в пользовательской виртуальной сети Azure Stack Hub
Кластер Kubernetes можно развернуть с помощью подсистемы Azure Kubernetes Service (AKS) в пользовательской виртуальной сети. В этой статье описывается, как найти необходимые сведения в виртуальной сети. В статье содержатся шаги по вычислению IP-адресов, используемых кластером, настройке валей в модели API и настройке таблицы маршрутов и группы безопасности сети.
Кластер Kubernetes в Azure Stack Hub с использованием AKS Engine использует сетевой плагин Kubenet. Движок AKS в Azure Stack Hub также поддерживает сетевой плагин Azure CNI.
- Обсуждение подключаемого модуля сети Kubenet в Azure см. в статье "Использование сети kubenet с собственными диапазонами IP-адресов в Служба Azure Kubernetes (AKS)".
- Обсуждение подключаемого модуля сети Azure CNI в Azure см. в статье "Настройка сети Azure CNI" в Служба Azure Kubernetes (AKS).
Рекомендации по созданию пользовательской виртуальной сети
- Пользовательская виртуальная сеть должна находиться в той же подписке, что и все остальные компоненты кластера Kubernetes.
- Пул узлов уровня управления и пул узлов агента должны находиться в одной виртуальной сети. Узлы можно развернуть в разных подсетях в одной виртуальной сети.
- Подсеть кластера Kubernetes должна использовать диапазон IP-адресов в пространстве диапазона IP-адресов пользовательской виртуальной сети. См. раздел Получение блока IP-адресов.
- Рекомендуемый размер подсетей узла зависит от типа используемого сетевого плагина. В качестве общего руководства Azure CNI требуется больше IP-адресов для подсети, поддерживающей пулы узлов агента, чем kubenet. Ознакомьтесь со следующими примерами kubenet и Azure CNI.
- Адресное пространство
169.254.0.0/16
нельзя использовать для пользовательских виртуальных сетей для кластеров Kubernetes.
Создание пользовательской виртуальной сети
В экземпляре Azure Stack Hub должна быть создана пользовательская виртуальная сеть. Дополнительные сведения см. в кратком руководстве по созданию виртуальной сети с помощью портал Azure.
Создайте новую подсеть в виртуальной сети. При развертывании кластера необходимо получить идентификатор ресурса подсети и диапазон IP-адресов, который используется в модели API:
Откройте пользовательский портал Azure Stack Hub в своем экземпляре Azure Stack Hub.
Выберите Все ресурсы.
Введите имя виртуальной сети в поле поиска.
Выберите Подсети>+ Подсети, чтобы добавить подсеть.
Добавьте имя и диапазон адресов в нотации CIDR. Нажмите ОК.
Выберите Свойства на панели Виртуальные сети. Скопируйте Идентификатор ресурса и добавьте
/subnets/<nameofyoursubnect>
. Это значение используется в качестве значения ключаvnetSubnetId
в модели API для кластера. Идентификатор ресурса для подсети использует следующий формат:/subscriptions/SUB_ID/resourceGroups/RG_NAME/providers/Microsoft.Network/virtualNetworks/VNET_NAME/subnets/SUBNET_NAME
.На панели Виртуальные сети выберите Подсети. Выберите имя подсети, например
control-plane-sn
. Не связывайте подсеть с группой безопасности сети (NSG).В колонке подсети запишите диапазон адресов (блок 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, которые вы планируете запускать в кластере при выборе диапазона адресов для этого блока. Как упоминалось ранее, для 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/24
agents-sn
10.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, например, networkPlugin
kubenet
в объекте kubernetesConfig
конфигурации модели API. После развертывания кластера вернитесь к виртуальной сети на пользовательском портале Azure Stack. В колонке подсети укажите таблицу маршрутов и группу безопасности сети (NSG). После успешного развертывания кластера в пользовательской виртуальной сети, получите идентификатор ресурса таблицы маршрутов из панели Network в группе ресурсов вашего кластера.
Откройте пользовательский портал Azure Stack Hub в своем экземпляре Azure Stack Hub.
Выберите Все ресурсы.
Введите имя виртуальной сети в поле поиска.
Выберите Подсети а затем выберите имя подсети, которая содержит кластер.
Щелкните Таблица маршрутизации и выберите для кластера таблицу маршрутизации.
Убедитесь, что это сделано для каждой подсети, указанной в модели API, включая
masterProfile
подсеть.
Примечание.
Пользовательские виртуальные сети для кластеров Kubernetes на Windows имеют известную проблему. .
Следующие шаги
- Ознакомьтесь с обработчиком AKS в Azure Stack Hub
- См. сведения об использовании службы Azure Monitor для контейнеров.