Развертывание кластера Kubernetes в пользовательской виртуальной сети Azure Stack Hub
Кластер Kubernetes можно развернуть с помощью подсистемы Azure Kubernetes Service (AKS) в пользовательской виртуальной сети. В этой статье описано, как найти информацию, необходимую для виртуальной сети. Вы можете найти инструкции по определению используемых в кластере IP-адресов, по настройке параметров в модели API и настройке таблицы маршрутизации и группы безопасности сети.
Кластер Kubernetes в Azure Stack Hub с помощью модуля AKS использует подключаемый модуль сети 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-адресов, выберите уникальное адресное пространство для новой виртуальной сети.
- Адресные пространства в диапазонах часто
192.168/16
используются для10/8
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.
- Должен оставаться свободным буфер размером не менее шестнадцати 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-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). Успешно завершив развертывание кластера в пользовательской виртуальной сети, получите идентификатор ресурса таблицы маршрутов из колонки Сеть в группе ресурсов кластера.
Откройте пользовательский портал Azure Stack Hub в своем экземпляре Azure Stack Hub.
Выберите Все ресурсы.
Введите имя виртуальной сети в поле поиска.
Выберите Подсети а затем выберите имя подсети, которая содержит кластер.
Щелкните Таблица маршрутизации и выберите для кластера таблицу маршрутизации.
Убедитесь, что это сделано для каждой подсети, указанной в модели API, включая
masterProfile
подсеть.
Примечание.
В пользовательской виртуальной сети для кластера Kubernetes Windows есть известная проблема.
Следующие шаги
- Ознакомьтесь с обработчиком AKS в Azure Stack Hub
- См. сведения об использовании службы Azure Monitor для контейнеров.