Настройка подсетей

Содержание

Правила выделения IP

NOTE

Если проекту или пространству имён назначено несколько подсетей, IP-адрес будет случайным образом выбран из одной из подсетей.

  • Выделение для проекта:

    • Если проект не привязан к подсети, Pods во всех пространствах имён этого проекта могут использовать IP-адреса только из подсети по умолчанию. Если в подсети по умолчанию недостаточно IP-адресов, Pods не смогут запуститься.
    • Если проект привязан к подсети, Pods во всех пространствах имён этого проекта могут использовать IP-адреса только из указанной подсети.
  • Выделение для пространства имён:

    • Если пространство имён не привязано к подсети, Pods в этом пространстве имён могут использовать IP-адреса только из подсети по умолчанию. Если в подсети по умолчанию недостаточно IP-адресов, Pods не смогут запуститься.
    • Если пространство имён привязано к подсети, Pods в этом пространстве имён могут использовать IP-адреса только из указанной подсети.

Сеть Calico

Создание подсетей в сети Calico для достижения более тонкой изоляции ресурсов внутри кластера.

Ограничения и особенности

В среде кластера с IPv6 подсети, созданные в сети Calico, по умолчанию используют инкапсуляцию VXLAN. Порты, необходимые для инкапсуляции VXLAN, отличаются от портов для инкапсуляции IPIP. Необходимо обеспечить открытие UDP порта 4789.

Пример custom resource (CR) подсети с сетью Calico

# test-calico-subnet.yaml
apiVersion: kubeovn.io/v1
kind: Subnet
metadata:
  name: test-calico
spec:
  cidrBlock: 10.1.1.1/24
  default: false
  ipipMode: Always
  natOutgoing: true
  private: false
  protocol: Dual
  v4blockSize: 30
  1. Если default true, используется инкапсуляция VXLAN.
  2. См. параметры Encapsulation Mode и Encapsulation Protocol.
  3. См. параметры Outbound Traffic NAT.

Создание подсети в сети Calico через веб-консоль

  1. Перейдите в Administrator.

  2. В левой навигационной панели нажмите Network Management > Subnets.

  3. Нажмите Create Subnet.

  4. Настройте параметры согласно следующим инструкциям.

    ПараметрОписание
    CIDRПосле назначения подсети проекту или пространству имён, контейнерные группы в этом пространстве будут случайным образом использовать IP-адреса из этого CIDR для связи.
    Примечание: Соответствие между CIDR и BlockSize см. в Reference Content.
    Encapsulation ProtocolВыберите протокол инкапсуляции. IPIP не поддерживается в режиме dual-stack.
    • IPIP: реализует межсегментную связь с помощью протокола IPIP.
    • VXLAN (Alpha): реализует межсегментную связь с помощью протокола VXLAN.
    • No Encapsulation: прямое соединение через маршрутизацию.
    Encapsulation ModeПри выборе протокола инкапсуляции IPIP или VXLAN необходимо указать режим инкапсуляции, по умолчанию — Always.
    • Always: туннели IPIP / VXLAN всегда включены.
    • Cross Subnet: туннели IPIP / VXLAN включаются только при нахождении хостов в разных подсетях; при нахождении в одной подсети — прямое соединение через маршрутизацию.
    Outbound Traffic NATВыберите, включать ли NAT исходящего трафика (Network Address Translation), по умолчанию включено.
    Используется для установки адресов доступа, которые будут видны из внешней сети при выходе контейнерных групп подсети в интернет.
    При включённом NAT в качестве адреса доступа используется IP хоста; при отключённом NAT IP контейнерных групп подсети напрямую видны во внешней сети.
  5. Нажмите Confirm.

  6. На странице с деталями подсети выберите Actions > Allocate Project / Allocate Namespace.

  7. Завершите настройку и нажмите Allocate.

Создание подсети в сети Calico через CLI

kubectl apply -f test-calico-subnet.yaml

Reference Content

Динамическое соответствие между CIDR и blockSize представлено в таблице ниже.

CIDRblockSize SizeКоличество хостовРазмер одного пула IP
prefix<=16261024+64
16<prefix<=1927256~102432
prefix=202825616
prefix=21292568
prefix=22302564
prefix=23301284
prefix=2430644
prefix=2530324
prefix=2631322
prefix=2731162
prefix=283182
prefix=293142
prefix=303122
prefix=313112
NOTE

Конфигурации подсетей с префиксом больше 31 не поддерживаются.

Сеть Kube-OVN

Создание подсети в оверлейной сети Kube-OVN для более тонкой изоляции ресурсов в кластере.

NOTE

Платформа имеет встроенную подсеть join для связи между узлами и Pods; избегайте конфликтов сетевых сегментов между join и вновь создаваемыми подсетями.

Пример custom resource (CR) подсети с оверлейной сетью Kube-OVN

# test-overlay-subnet.yaml
apiVersion: kubeovn.io/v1
kind: Subnet
metadata:
  name: test-overlay-subnet
spec:
  default: false
  protocol: Dual
  cidrBlock: 10.1.0.0/23
  natOutgoing: true
  excludeIps:
    - 10.1.1.2
  gatewayType: distributed
  gatewayNode: ""
  private: false
  enableEcmp: false
  1. См. параметры Outbound Traffic NAT.
  2. См. параметры Reserved IP.
  3. См. параметры Gateway Type. Доступные значения: distributed или centralized.
  4. См. параметры Gateway Nodes.
  5. См. параметры ECMP. Требуется предварительное включение feature gate администратором.

Создание подсети в оверлейной сети Kube-OVN через веб-консоль

  1. Перейдите в Administrator.

  2. В левой навигационной панели нажмите Network Management > Subnet.

  3. Нажмите Create Subnet.

  4. Настройте параметры согласно следующим инструкциям.

    ПараметрОписание
    Network SegmentПосле назначения подсети проекту или пространству имён, IP-адреса из этого сегмента будут случайным образом выделяться для использования Pods.
    Reserved IPУказанные зарезервированные IP не будут автоматически выделяться. Например, могут использоваться как фиксированные IP для вычислительных компонентов.
    Gateway TypeВыберите тип шлюза для подсети, управляющий исходящим трафиком.
    - Distributed: Каждый хост кластера может выступать в роли исходящего узла для Pods на текущем хосте, обеспечивая распределённый выход.
    - Centralized: Все Pods кластера используют один или несколько конкретных хостов как исходящие узлы, что упрощает аудит и контроль межсетевого экрана. Настройка нескольких централизованных gateway nodes обеспечивает высокую доступность.
    ECMP (Alpha)При выборе Centralized gateway можно использовать функцию ECMP. По умолчанию шлюз работает в режиме master-slave, только мастер-шлюз обрабатывает трафик. При включении ECMP (Equal-Cost Multipath Routing) исходящий трафик маршрутизируется по нескольким равнозначным путям ко всем доступным узлам шлюза, что увеличивает суммарную пропускную способность.

    Примечание: Необходимо предварительно включить соответствующие функции.
    Gateway NodesПри использовании Centralized gateway выберите один или несколько конкретных хостов в качестве узлов шлюза.
    Outbound Traffic NATВыберите, включать ли NAT исходящего трафика (Network Address Translation). По умолчанию включено.
    Используется для установки адреса доступа, видимого из внешней сети при выходе Pods подсети в интернет.
    При включённом NAT в качестве адреса доступа используется IP хоста; при отключённом NAT IP Pods подсети напрямую видны во внешней сети. В этом случае рекомендуется использовать централизованный шлюз.
  5. Нажмите Confirm.

  6. На странице с деталями подсети выберите Actions > Allocate Project / Namespace.

  7. Завершите настройку и нажмите Allocate.

Создание подсети в оверлейной сети Kube-OVN через CLI

kubectl apply -f test-overlay-subnet.yaml

Underlay Network

Создание подсетей в Underlay-сети Kube-OVN не только обеспечивает более тонкую изоляцию ресурсов, но и улучшает производительность.

INFO

Контейнерная сеть в Kube-OVN Underlay требует поддержки физической сети. Рекомендуется ознакомиться с лучшими практиками Preparing the Kube-OVN Underlay Physical Network для обеспечения сетевой связности.

Инструкция по использованию

Общий процесс создания подсетей в сети Kube-OVN Underlay: Добавить Bridge Network > Добавить VLAN > Создать подсеть.

  1. Имя сетевой карты по умолчанию.
  2. Настройка сетевой карты по узлам.

Добавление Bridge Network через веб-консоль (опционально)

# test-provider-network.yaml
kind: ProviderNetwork
apiVersion: kubeovn.io/v1
metadata:
  name: test-provider-network
spec:
  defaultInterface: eth1
  customInterfaces:
    - interface: eth2
      nodes:
        - node1
  excludeNodes:
    - node2
  1. Имя сетевой карты по умолчанию.
  2. Настройка сетевой карты по узлам.

Bridge network — это мост, после привязки сетевой карты к мосту он может перенаправлять трафик контейнерной сети, обеспечивая связь с физической сетью.

Процедура:

  1. Перейдите в Administrator.

  2. В левой навигационной панели нажмите Network Management > Bridge Network.

  3. Нажмите Add Bridge Network.

  4. Настройте параметры согласно следующим инструкциям.

    Примечание:

    • Target Pod — все Pods, запланированные на текущем узле, или Pods в пространствах имён, привязанных к определённым подсетям, запланированным на текущем узле. Это зависит от области действия подсети под мостовой сетью.

    • Узлы в подсети Underlay должны иметь несколько сетевых карт, и сетевая карта, используемая мостовой сетью, должна быть выделена исключительно для Underlay и не должна нести другой трафик, например SSH. Например, если в мостовой сети три узла, планирующие eth0, eth0, eth1 для исключительного использования Underlay, то сетевая карта по умолчанию может быть eth0, а для третьего узла — eth1.

    ПараметрОписание
    Default Network Card NameПо умолчанию целевой Pod будет использовать эту сетевую карту моста для связи с физической сетью.
    Configure Network Card by NodeЦелевые Pods на указанных узлах будут подключаться к указанной сетевой карте, а не к сетевой карте по умолчанию.
    Exclude NodesИсключённые узлы не будут иметь мостового подключения для Pods.

    Примечание: Pods на исключённых узлах не смогут взаимодействовать с физической сетью или контейнерными сетями на других узлах, поэтому следует избегать планирования соответствующих Pods на эти узлы.
  5. Нажмите Add.

Добавление Bridge Network через CLI

kubectl apply -f test-provider-network.yaml

Добавление VLAN через веб-консоль (опционально)

# test-vlan.yaml
kind: Vlan
apiVersion: kubeovn.io/v1
metadata:
  name: test-vlan
spec:
  id: 0
  provider: test-provider-network
  1. VLAN ID.
  2. Ссылка на мостовую сеть.

Платформа имеет преднастроенный виртуальный LAN ovn-vlan, который подключается к мостовой сети provider. Можно также создать новый VLAN, подключенный к другим мостовым сетям, обеспечивая изоляцию между VLAN.

Процедура:

  1. Перейдите в Administrator.

  2. В левой навигационной панели нажмите Network Management > VLAN.

  3. Нажмите Add VLAN.

  4. Настройте параметры согласно следующим инструкциям.

    ПараметрОписание
    VLAN IDУникальный идентификатор VLAN, используемый для различения виртуальных LAN.
    Bridge NetworkVLAN будет подключен к этой мостовой сети для связи с физической сетью.
  5. Нажмите Add.

Добавление VLAN через CLI

kubectl apply -f test-vlan.yaml

Пример custom resource (CR) подсети с сетью Kube-OVN Underlay

# test-underlay-network.yaml
apiVersion: kubeovn.io/v1
kind: Subnet
metadata:
  name: test-underlay-network
spec:
  default: false
  protocol: Dual
  cidrBlock: 11.1.0.0/23
  gateway: 11.1.0.1
  excludeIps:
    - 11.1.0.3
  private: false
  allowSubnets: []
  vlan: test-vlan
  enableEcmp: false
  1. Ссылка на VLAN.

Создание подсети в сети Kube-OVN Underlay через веб-консоль

NOTE

Платформа также преднастроила подсеть join для связи между узлами и Pods в режиме Overlay. Эта подсеть не используется в режиме Underlay, поэтому важно избегать конфликтов IP-сегментов между join и другими подсетями.

Процедура:

  1. Перейдите в Administrator.

  2. В левой навигационной панели нажмите Network Management > Subnet.

  3. Нажмите Create Subnet.

  4. Настройте параметры согласно следующим инструкциям.

    ПараметрОписание
    VLANVLAN, к которому принадлежит подсеть.
    SubnetПосле назначения подсети проекту или пространству имён, IP-адреса из физической подсети будут случайным образом выделяться для Pods.
    GatewayФизический шлюз в указанной подсети.
    Reserved IPУказанные зарезервированные IP не будут автоматически назначаться. Например, могут использоваться как фиксированные IP для вычислительных компонентов.
  5. Нажмите Confirm.

  6. На странице с деталями подсети выберите Action > Assign Project / Namespace.

  7. Завершите настройку и нажмите Assign.

Создание подсети в сети Kube-OVN Underlay через CLI

kubectl apply -f test-underlay-network.yaml

Связанные операции

При наличии в кластере подсетей Underlay и Overlay можно при необходимости настроить Автоматическую взаимосвязь между подсетями Underlay и Overlay.

Управление подсетями

Обновление шлюза через веб-консоль

Включает изменение метода исходящего трафика, узлов шлюза и конфигурации NAT.

  1. Перейдите в Administrator.

  2. В левой панели нажмите Network Management > Subnets.

  3. Нажмите на имя подсети.

  4. Выберите Action > Update Gateway.

  5. Обновите параметры; подробности см. в Описание параметров.

  6. Нажмите OK.

Обновление шлюза через CLI

kubectl patch subnet test-overlay-subnet --type=json -p='[
  {"op": "replace", "path": "/spec/gatewayType", "value": "centralized"},
  {"op": "replace", "path": "/spec/gatewayNode", "value": "192.168.66.210"},
  {"op": "replace", "path": "/spec/natOutgoing", "value": true},
  {"op": "replace", "path": "/spec/enableEcmp", "value": true}
]'

Обновление зарезервированных IP через веб-консоль

IP шлюза нельзя удалить из зарезервированных IP, остальные зарезервированные IP можно редактировать, удалять или добавлять.

  1. Перейдите в Administrator.

  2. В левой панели нажмите Network Management > Subnets.

  3. Нажмите на имя подсети.

  4. Выберите Action > Update Reserved IP.

  5. После внесения изменений нажмите Update.

Обновление зарезервированных IP через CLI

kubectl patch subnet test-overlay-subnet --type=json -p='[
  {
    "op": "replace",
    "path": "/spec/excludeIps",
    "value": ["10.1.0.1", "10.1.1.2", "10.1.1.4"]
  }
]'

Назначение проектов через веб-консоль

Назначение подсетей конкретным проектам помогает командам лучше управлять и изолировать сетевой трафик для разных проектов, обеспечивая достаточные сетевые ресурсы для каждого проекта.

  1. Перейдите в Administrator.

  2. В левой панели нажмите Network Management > Subnets.

  3. Нажмите на имя подсети.

  4. Выберите Action > Assign Project.

  5. После добавления или удаления проектов нажмите Assign.

Назначение проектов через CLI

kubectl patch subnet test-overlay-subnet --type=json -p='[
  {
    "op": "replace",
    "path": "/spec/namespaceSelectors",
    "value": [
      {
        "matchLabels": {
          "cpaas.io/project": "cong"
        }
      }
    ]
  }
]'

Назначение пространств имён через веб-консоль

Назначение подсетей конкретным пространствам имён позволяет добиться более тонкой сетевой изоляции.

Примечание: Процесс назначения приведёт к перестройке шлюза, и исходящие пакеты будут отброшены! Убедитесь, что в данный момент нет бизнес-приложений, обращающихся к внешним кластерам.

  1. Перейдите в Administrator.

  2. В левой панели нажмите Network Management > Subnets.

  3. Нажмите на имя подсети.

  4. Выберите Action > Assign Namespace.

  5. После добавления или удаления пространств имён нажмите Assign.

Назначение пространств имён через CLI

kubectl patch subnet test-overlay-subnet --type=json -p='[
  {
    "op": "replace",
    "path": "/spec/namespaces",
    "value": ["cert-manager"]
  }
]'

Расширение подсетей через веб-консоль

Когда диапазон зарезервированных IP подсети достигает предела или близок к исчерпанию, его можно расширить на основе исходного диапазона подсети без влияния на нормальную работу существующих сервисов.

  1. Перейдите в Administrator.

  2. В левой панели нажмите Network Management > Subnets.

  3. Нажмите на имя подсети.

  4. Выберите Action > Expand Subnet.

  5. Завершите настройку и нажмите Update.

Расширение подсетей через CLI

kubectl patch subnet test-overlay-subnet --type=json -p='[
  {
    "op": "replace",
    "path": "/spec/cidrBlock",
    "value": "10.1.0.0/22"
  }
]'

Управление сетями Calico

Поддерживается назначение проектов и пространств имён; подробности см. в разделах назначение проектов и назначение пространств имён.

Удаление подсети через веб-консоль

NOTE
  • При удалении подсети, если есть контейнерные группы, использующие IP из этой подсети, они продолжат работать с теми же IP, но не смогут обмениваться трафиком по сети. Контейнерные группы можно пересоздать для использования IP из подсети по умолчанию или назначить новое пространство подсети для пространства имён, в котором они находятся.

  • Подсеть по умолчанию удалить нельзя.

  1. Перейдите в Administrator.

  2. В левой навигационной панели нажмите Network Management > Subnets.

  3. Нажмите ⋮ > Delete и подтвердите удаление.

Удаление подсети через CLI

kubectl delete subnet test-overlay-subnet