Underlay 和 Overlay 子网的自动互通

如果一个集群同时具有 Underlay 和 Overlay 子网,默认情况下,Overlay 子网中的 Pod 可以通过使用 NAT 的网关访问 Underlay 子网中 Pod 的 IP。不过,Underlay 子网中的 Pod 需要配置节点路由,才能访问 Overlay 子网中的 Pod。

为了实现 Underlay 和 Overlay 子网之间的自动互通,你可以手动修改 Underlay 子网的 YAML 文件。配置完成后,Kube-OVN 还会使用一个额外的 Underlay IP 连接 Underlay 子网和 ovn-cluster 逻辑路由器,并设置相应的路由规则以实现互通。

操作步骤

  1. 进入 Administrator

  2. 在左侧导航栏中,点击 Cluster Management > Resource Management

  3. 输入 Subnet 以筛选资源对象。

  4. 点击要修改的 Underlay 子网旁边的 ⋮ > Update

  5. 修改 YAML 文件,在 Spec 中添加字段 u2oInterconnection: true

  6. 点击 Update

注意:Underlay 子网中现有的计算组件需要重新创建,修改才会生效。

可选:将 U2O 路由限制为 Overlay CIDRs

如果只希望将发往 Overlay 子网 CIDRs 的流量通过 U2O 网关路由,请在同一个 Underlay 子网上启用 u2oFeatures.overlayOnlyRouting。发往其他目的地的流量仍将继续使用物理网关。

spec:
  u2oInterconnection: true
  u2oFeatures:
    overlayOnlyRouting: true

此选项要求启用 u2oInterconnection: true

启用 u2oInterconnection 时 Underlay 子网之间的隔离

当多个 Underlay 子网都启用了 u2oInterconnection: true 时,它们之间的流量将不再经过物理网关,而是直接通过内部 OVN 网络路由。

如果你需要在两个都启用了 u2oInterconnection 的 Underlay 子网之间实现隔离,必须先配置 kube-ovn-controller 参数,然后再配置子网隔离。

步骤 1:配置 kube-ovn-controller

修改 kube-ovn-controller Deployment,关闭对目的逻辑端口 IP 的连接跟踪跳过:

kubectl edit deployment kube-ovn-controller -n kube-system

添加或修改以下参数:

spec:
  template:
    spec:
      containers:
      - name: kube-ovn-controller
        args:
        - --ls-ct-skip-dst-lport-ips=false
CAUTION

--ls-ct-skip-dst-lport-ips 控制是否对发往逻辑端口 IP 的流量跳过连接跟踪(conntrack)。默认值为 true,即跳过 conntrack 以提升性能。将其设置为 false 不会影响功能,但可能会略微影响性能。

不过,对于基于 ACL 的隔离的 Underlay 子网,你必须将其设置为 false。否则,网关到 Pod 的流量会失败(例如,ping 请求到达 Pod,但回复被丢弃),因为 ACL 隔离使用 allow-related,它依赖 conntrack 状态;没有 conntrack 状态,回复无法被识别为“相关”流量,因此会被丢弃。

步骤 2:配置子网隔离

使用以下参数配置子网:

spec:
  u2oInterconnection: true
  acls:
  - action: drop
    direction: to-lport  # Ingress direction (traffic entering the logical port)
    match: ip4.src == 172.20.0.0/16
    priority: 1002
  - action: drop
    direction: to-lport  # Ingress direction
    match: ip4.src == 192.50.0.0/16
    priority: 1002

ACL 参数

参数描述
action要执行的操作:allowdropallow-related
direction流量方向:to-lport(入站)或 from-lport(出站)
match使用 L2-L4 字段和布尔运算符的 OVN 匹配表达式
priority规则优先级(数值越高越先评估;推荐范围:1002-1899)
NOTE
  • acls 字段提供基于优先级的规则评估,相比标准 Kubernetes NetworkPolicy 更加灵活。
  • 使用 to-lport 方向时,ip4.src 表示入站流量的源 IP。
  • 推荐优先级范围10021899,以避免与系统默认 ACL 规则冲突。