配置子网

IP 分配规则

NOTE

如果一个项目或命名空间分配了多个子网,将从其中一个子网中随机选择一个 IP 地址。

  • 项目分配:

    • 如果项目未绑定子网,则该项目下所有命名空间中的 Pod 只能使用默认子网中的 IP 地址。如果默认子网中的 IP 地址不足,Pod 将无法启动。
    • 如果项目已绑定子网,则该项目下所有命名空间中的 Pod 只能使用该特定子网中的 IP 地址。
  • 命名空间分配:

    • 如果命名空间未绑定子网,则该命名空间中的 Pod 只能使用默认子网中的 IP 地址。如果默认子网中的 IP 地址不足,Pod 将无法启动。
    • 如果命名空间已绑定子网,则该命名空间中的 Pod 只能使用该特定子网中的 IP 地址。

Calico 网络

在 Calico 网络中创建子网,以实现对集群内资源更细粒度的网络隔离。

约束和限制

在 IPv6 集群环境中,Calico 网络中创建的子网默认使用 VXLAN 封装。VXLAN 封装所需的端口与 IPIP 封装所需的端口不同。请确保 UDP 端口 4789 已开放。

使用 Calico 网络的子网自定义资源(CR)示例

# 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. 请参阅封装模式参数和封装协议参数。
  3. 请参阅出站流量 NAT 参数。

使用 Web 控制台在 Calico 网络中创建子网

  1. 前往管理员。

  2. 在左侧导航栏中,单击网络 > 容器网络 > 子网。

  3. 单击创建子网。

  4. 参考以下说明配置相关参数。

    参数描述
    CIDR将子网分配给项目或命名空间后,命名空间中的容器组将随机使用此 CIDR 范围内的 IP 地址进行通信。
    注意:有关 CIDR 与 BlockSize 的对应关系,请参阅参考内容。
    封装协议选择封装协议。双栈模式不支持 IPIP。
    • IPIP:使用 IPIP 协议实现网段间通信。
    • VXLAN(Alpha):使用 VXLAN 协议实现网段间通信。
    • 无封装:通过路由转发直接连接。
    封装模式当封装协议为 IPIP 或 VXLAN 时,必须设置封装模式,默认为始终。
    • 始终:始终启用 IPIP / VXLAN 隧道。
    • 跨子网:仅当主机位于不同子网时启用 IPIP / VXLAN 隧道;当主机位于同一子网时,通过路由转发直接连接。
    出站流量 NAT选择是否启用出站流量 NAT(网络地址转换),默认启用。
    该功能主要用于设置子网容器组访问外部网络时向外部网络公开的访问地址。
    启用出站流量 NAT 时,将使用主机 IP 作为当前子网容器组的访问地址;未启用时,子网中容器组的 IP 将直接公开给外部网络。
  5. 单击确认。

  6. 在子网详情页面中,选择操作 > 分配项目 / 分配命名空间。

  7. 完成配置,然后单击分配。

使用 CLI 在 Calico 网络中创建子网

kubectl apply -f test-calico-subnet.yaml

参考内容

下表显示了 CIDR 与 blockSize 之间的动态匹配关系。

CIDRblockSize 大小主机数量单个 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 Overlay 网络中创建子网,以实现集群中资源更细粒度的网络隔离。

NOTE

平台内置了用于节点和 Pod 之间通信的 join 子网;请避免 join 与新创建的子网之间的网络段发生冲突。

使用 Kube-OVN Overlay 网络的 Subnet 自定义资源(CR)示例

# 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. 请参阅出站流量 NAT 参数。
  2. 请参阅保留 IP 参数。
  3. 请参阅网关类型参数。可用值为 distributed 或 centralized。
  4. 请参阅网关节点参数。
  5. 请参阅 ECMP 参数。使用此功能前,请联系管理员启用功能门控。

使用 Web 控制台在 Kube-OVN Overlay 网络中创建子网

  1. 进入管理员。

  2. 在左侧导航栏中,点击网络 > 容器网络 > 子网。

  3. 点击创建子网。

  4. 参考以下说明配置相关参数。

    参数描述
    网络段将子网分配给项目或命名空间后,该网络段内的 IP 将随机分配给 Pod 使用。
    保留 IP设置的保留 IP 不会被自动分配。例如,可将其用作计算组件的 固定 IP。
    网关类型选择子网的网关类型,以控制出站流量。
    - 分布式:集群中的每个主机都可以作为当前主机上 Pod 的出站节点,从而实现分布式出口。
    - 集中式:集群中的所有 Pod 使用一个或多个特定主机作为出站节点,便于进行外部审计和防火墙控制。设置多个集中式网关节点可以实现高可用性。
    ECMP(Alpha)选择集中式网关时,可以使用 ECMP 功能。默认情况下,网关以主从模式运行,仅主网关处理流量。启用 ECMP(等价多路径路由)后,出站流量将通过多条等价路径路由到所有可用的网关节点,从而提高网关的总吞吐量。

    注意:请提前启用与 ECMP 相关的功能。
    网关节点使用集中式网关时,选择一个或多个特定主机作为网关节点。
    出站流量 NAT选择是否启用出站流量 NAT(网络地址转换)。默认情况下已启用。
    主要用于设置子网中的 Pod 访问互联网时对外部网络暴露的访问地址。
    启用出站流量 NAT 时,将使用主机 IP 作为当前子网中 Pod 的访问地址;未启用时,子网中 Pod 的 IP 将直接暴露给外部网络。在这种情况下,建议使用集中式网关。
  5. 点击确认。

  6. 在子网详情页面中,选择操作 > 分配项目 / 命名空间。

  7. 完成配置并点击分配。

使用 CLI 在 Kube-OVN Overlay 网络中创建子网

kubectl apply -f test-overlay-subnet.yaml

Underlay 网络

在 Kube-OVN Underlay 网络中创建子网,不仅可以为资源提供更细粒度的网络隔离,还可以带来更好的性能体验。

INFO

Kube-OVN Underlay 中的容器网络需要物理网络提供支持。请参阅最佳实践准备 Kube-OVN Underlay 物理网络,以确保网络连通性。

使用说明

在 Kube-OVN Underlay 网络中创建子网的一般流程为:添加网桥网络 > 添加 VLAN > 创建子网。

  1. 默认网卡名称。
  2. 按节点配置网卡。

使用 Web 控制台添加网桥网络(可选)

# 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. 按节点配置网卡。

网桥网络是指网桥。将网卡绑定到网桥后,网桥可以转发容器网络流量,从而实现与物理网络的互通。

操作步骤:

  1. 进入管理员。

  2. 在左侧导航栏中,点击网络 > 容器网络 > 网桥网络。

  3. 点击添加网桥网络。

  4. 根据以下说明配置相关参数。

    注意:

    • 目标 Pod 是指调度到当前节点的所有 Pod,或调度到当前节点且位于绑定到特定子网的命名空间中的 Pod。这取决于网桥网络下子网的作用域。

    • Underlay 子网中的节点必须具有多个网卡,并且网桥网络使用的网卡必须专门分配给 Underlay,不能承载其他流量,例如 SSH。例如,如果网桥网络中的三个节点计划分别使用 eth0、eth0、eth1 专供 Underlay 使用,则默认网卡可以设置为 eth0,第三个节点的网卡可以设置为 eth1。

    参数描述
    默认网卡名称默认情况下,目标 Pod 将使用此网卡作为网桥网络卡,以实现与物理网络的互通。
    按节点配置网卡配置节点上的目标 Pod 将桥接到指定网卡,而不是默认网卡。
    排除节点排除节点后,调度到这些节点的所有 Pod 都不会桥接到这些节点上的任何网卡。

    注意:排除节点上的 Pod 将无法与物理网络通信,也无法跨节点访问容器网络,请注意避免将相关 Pod 调度到这些节点。
  5. 点击添加。

使用 CLI 添加网桥网络

kubectl apply -f test-provider-network.yaml

使用 Web 控制台添加 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. 网桥网络引用。

平台预配置了一个 ovn-vlan 虚拟局域网,该网络将连接到 provider 网桥网络。也可以配置新的 VLAN 以连接到其他网桥网络,从而实现 VLAN 之间的网络隔离。

操作步骤:

  1. 进入管理员。

  2. 在左侧导航栏中,点击网络 > 容器网络 > VLAN。

  3. 点击添加 VLAN。

  4. 根据以下说明配置相关参数。

    参数描述
    VLAN ID此 VLAN 的唯一标识符,用于区分不同的虚拟局域网。
    网桥网络VLAN 将连接到此网桥网络,以实现与物理网络的互通。
  5. 点击添加。

使用 CLI 添加 VLAN

kubectl apply -f test-vlan.yaml

使用 Kube-OVN Underlay 网络的 Subnet 自定义资源(CR)示例

# 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 引用。

使用 Web 控制台在 Kube-OVN Underlay 网络中创建子网

NOTE

平台还预配置了一个 join 子网,用于 Overlay 传输模式下节点和 Pod 之间的通信。在 Underlay 传输模式下不会使用此子网,因此必须避免 join 与其他子网之间的 IP 网段发生冲突。

操作步骤:

  1. 进入管理员。

  2. 在左侧导航栏中,点击网络 > 容器网络 > 子网。

  3. 点击创建子网。

  4. 根据以下说明配置相关参数。

    参数描述
    VLAN子网所属的 VLAN。
    子网将子网分配给项目或命名空间后,物理子网中的 IP 将随机分配给 Pod 使用。
    网关上述子网中的物理网关。
    保留 IP指定的保留 IP 不会被自动分配。例如,可将其用作计算组件的 固定 IP。
  5. 点击确认。

  6. 在子网详情页面中,选择操作 > 分配项目 / 命名空间。

  7. 完成配置并点击分配。

使用 CLI 在 Kube-OVN Underlay 网络中创建子网

kubectl apply -f test-underlay-network.yaml

相关操作

当集群中同时存在 Underlay 和 Overlay 子网时,可以根据需要配置Underlay 和 Overlay 子网之间的自动互通。

如果 Underlay 子网中的工作负载需要 IPv4 多播通信,请参阅为 Kube-OVN Underlay 网络配置 IPv4 多播。

子网管理

使用 Web 控制台更新网关

包括更改出站流量方式、网关节点和 NAT 配置。

  1. 前往管理员。

  2. 在左侧边栏中,点击网络 > 容器网络 > 子网。

  3. 点击子网名称。

  4. 选择操作 > 更新网关。

  5. 更新参数配置;详情请参阅参数说明。

  6. 点击确定。

使用 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}
]'

使用 Web 控制台更新保留 IP

无法从保留 IP 中移除网关 IP,但可以自由编辑、删除或添加其他保留 IP。

  1. 前往管理员。

  2. 在左侧边栏中,点击网络 > 容器网络 > 子网。

  3. 点击子网名称。

  4. 选择操作 > 更新保留 IP。

  5. 完成更新后,点击更新。

使用 CLI 更新保留 IP

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"]
  }
]'

使用 Web 控制台分配项目

将子网分配给特定项目有助于团队更好地管理和隔离不同项目的网络流量,确保每个项目拥有充足的网络资源。

  1. 前往管理员。

  2. 在左侧边栏中,点击网络 > 容器网络 > 子网。

  3. 点击子网名称。

  4. 选择操作 > 分配项目。

  5. 添加或移除项目后,点击分配。

使用 CLI 分配项目

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

使用 Web 控制台分配命名空间

将子网分配给特定命名空间可以实现更精细的网络隔离。

注意:分配过程将重建网关,并且出站数据包将被丢弃!请确保当前没有业务应用访问外部集群。

  1. 前往管理员。

  2. 在左侧边栏中,点击网络 > 容器网络 > 子网。

  3. 点击子网名称。

  4. 选择操作 > 分配命名空间。

  5. 添加或移除命名空间后,点击分配。

使用 CLI 分配命名空间

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

使用 Web 控制台扩展子网

当子网的保留 IP 范围达到使用上限或即将耗尽时,可以基于原始子网范围进行扩展,而不会影响现有服务的正常运行。

  1. 前往管理员。

  2. 在左侧边栏中,点击网络 > 容器网络 > 子网。

  3. 点击子网名称。

  4. 选择操作 > 扩展子网。

  5. 完成配置并点击更新。

使用 CLI 扩展子网

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

扩展默认 Pod 子网

如果集群中的 Pod IP 地址即将耗尽,可以使用相同方式扩展默认 Pod 子网(ovn-default)。现有 Pod 会保留其地址,新 Pod 将从扩展后的范围中获取地址。

只能在保持相同网络基地址的情况下扩大子网(缩短网络前缀);不能更改基地址或缩小范围。如果默认 Pod 子网无法就地扩展,例如更大的范围无法与当前基地址对齐,则应添加其他子网,并将其绑定到需要更多地址的命名空间。

集群创建后无法更改 Service CIDR。请在安装前规划 Service 网络大小。

管理 Calico 网络

支持分配项目和命名空间;详情请参阅项目分配和命名空间分配。

使用 Web 控制台删除子网

NOTE
  • 删除子网时,如果仍有容器组使用子网中的 IP,容器组可以继续运行,且 IP 地址保持不变,但它们将无法通过网络进行通信。可以重建容器组以使用默认子网中的 IP,或将新子网分配给容器组所在的命名空间以供使用。

  • 无法删除默认子网。

  1. 前往管理员。

  2. 在左侧导航栏中,点击网络 > 容器网络 > 子网。

  3. 点击 ⋮ > 删除,然后继续执行删除操作。

使用 CLI 删除子网

kubectl delete subnet test-overlay-subnet