Skip to content

Commit

Permalink
ovs: do not modify the host's default route
Browse files Browse the repository at this point in the history
Signed-off-by: tao.yang <[email protected]>
  • Loading branch information
ty-dc committed Apr 30, 2024
1 parent e39097a commit f8eb56b
Show file tree
Hide file tree
Showing 2 changed files with 257 additions and 69 deletions.
164 changes: 129 additions & 35 deletions docs/usage/install/underlay/get-started-ovs-zh_CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ Spiderpool 可用作 Underlay 网络场景下提供固定 IP 的一种解决方

* 如果你使用 Underlay 模式,`coordinator` 会在主机上创建 veth 接口,为了防止 NetworkManager 干扰 veth 接口, 导致 Pod 访问异常。我们需要配置 NetworkManager,使其不纳管这些 Veth 接口。

* 如果你通过 `Iface`r 创建 Vlan 和 Bond 接口,NetworkManager 可能会干扰这些接口,导致 Pod 访问异常。我们需要配置 NetworkManager,使其不纳管这些 Veth 接口。
* 如果你通过 `Ifacer` 创建 Vlan 和 Bond 接口,NetworkManager 可能会干扰这些接口,导致 Pod 访问异常。我们需要配置 NetworkManager,使其不纳管这些 Veth 接口。

```shell
~# IFACER_INTERFACE="<NAME>"
Expand All @@ -38,6 +38,130 @@ Spiderpool 可用作 Underlay 网络场景下提供固定 IP 的一种解决方
~# systemctl restart NetworkManager
```

## 节点上配置 Open vSwitch 网桥

如下是创建并配置持久 OVS Bridge 的示例,本文中以 `eth0` 网卡为例,需要在每个节点上执行。

### 使用 netplan 持久化 OVS Bridge

1. 创建 OVS Bridge

```bash
~# ovs-vsctl add-br br1
~# ovs-vsctl add-port br1 eth0
~# ip link set br1 up
```

2. 在 /etc/netplan 目录下创建 12-br1.yaml 后,通过 `netplan apply` 生效。

为确保在重启主机等场景下 br1 仍然可用,请检查 eth0 网卡是否也被 netplan 纳管。

```yaml: 12-br1.yaml
network:
version: 2
renderer: networkd
ethernets:
br1:
addresses:
- "<IP地址>/<子网掩码>" # 172.18.10.10/16
```

3. 创建后,可以在每个节点上查看到如下的网桥信息:

```bash
~# ovs-vsctl show
ec16d9e1-6187-4b21-9c2f-8b6cb75434b9
Bridge br1
Port eth0
Interface eth0
Port br1
Interface br1
type: internal
Port veth97fb4795
Interface veth97fb4795
ovs_version: "2.17.3"
~# ip a show br1
208: br1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
link/ether 00:50:56:b4:5f:fd brd ff:ff:ff:ff:ff:ff
inet 172.18.10.10/16 brd 172.18.255.255 scope global noprefixroute br1
valid_lft forever preferred_lft forever
inet6 fe80::4f28:8ef1:6b82:a9e4/64 scope link noprefixroute
valid_lft forever preferred_lft forever
```

### 使用 NetworkManager 持久化 OVS Bridge

通过 NetworkManager 持久化 OVS Bridge 是一种不局限操作系统,更通用的一种方式。

1. 使用 NetworkManager 持久化 OVS Bridge,你需要安装 OVS NetworkManager 插件,示例如下:

```bash
~# sudo dnf install -y NetworkManager-ovs
~# sudo systemctl restart NetworkManager
```

2. 创建 ovs 网桥、端口和接口。

```bash
~# sudo nmcli con add type ovs-bridge conn.interface br1 con-name br1
~# sudo nmcli con add type ovs-port conn.interface br1-port master br1 con-name br1-port
~# sudo nmcli con add type ovs-interface slave-type ovs-port conn.interface br1 master br1-port con-name br1-int
```

3. 在网桥上创建另一个端口,并选择我们的物理设备中的 eth0 网卡作为其以太网接口,以便真正的流量可以在网络上流转。

```bash
~# sudo nmcli con add type ovs-port conn.interface ovs-port-eth0 master br1 con-name ovs-port-eth0
~# sudo nmcli con add type ethernet conn.interface eth0 master ovs-port-eth0 con-name ovs-port-eth0-int
```

4. 配置与激活 ovs 网桥。

通过设置静态 IP 的方式配置网桥

```bash
~# sudo nmcli con modify br1-int ipv4.method static ipv4.address "<IP地址>/<子网掩码>" # 172.18.10.10/16
```

激活网桥。

```bash
~# sudo nmcli con down "eth0"
~# sudo nmcli con up ovs-port-eth0-int
~# sudo nmcli con up br1-int
```

5. 创建后,可以在每个节点上查看到类似如下的信息。

```bash
~# nmcli c
br1-int dbb1c9be-e1ab-4659-8d4b-564e3f8858fa ovs-interface br1
br1 a85626c1-2392-443b-a767-f86a57a1cff5 ovs-bridge br1
br1-port fe30170f-32d2-489e-9ca3-62c1f5371c6c ovs-port br1-port
ovs-port-eth0 a43771a9-d840-4d2d-b1c3-c501a6da80ed ovs-port ovs-port-eth0
ovs-port-eth0-int 1334f49b-dae4-4225-830b-4d101ab6fad6 ethernet eth0
~# ovs-vsctl show
203dd6d0-45f4-4137-955e-c4c36b9709e6
Bridge br1
Port ovs-port-eth0
Interface eth0
type: system
Port br1-port
Interface br1
type: internal
ovs_version: "3.2.1"
~# ip a show br1
208: br1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
link/ether 00:50:56:b4:5f:fd brd ff:ff:ff:ff:ff:ff
inet 172.18.10.10/16 brd 172.18.255.255 scope global noprefixroute br1
valid_lft forever preferred_lft forever
inet6 fe80::4f28:8ef1:6b82:a9e4/64 scope link noprefixroute
valid_lft forever preferred_lft forever
```

## 安装 Spiderpool

1. 安装 Spiderpool。
Expand Down Expand Up @@ -86,7 +210,7 @@ Spiderpool 可用作 Underlay 网络场景下提供固定 IP 的一种解决方
serviceCIDR:
- 10.233.0.0/18
```

如果状态为 `NotReady`,这将会阻止 Pod 被创建。目前 Spiderpool:
* 优先通过查询 `kube-system/kubeadm-config` ConfigMap 获取集群的 Pod 和 Service 子网。
* 如果 `kubeadm-config` 不存在导致无法获取集群子网,那么 Spiderpool 会从 `Kube-controller-manager Pod` 中获取集群 Pod 和 Service 的子网。 如果您集群的 Kube-controller-manager 组件以 `systemd` 等方式而不是以静态 Pod 运行。那么 Spiderpool 仍然无法获取集群的子网信息。
Expand All @@ -112,37 +236,7 @@ Spiderpool 可用作 Underlay 网络场景下提供固定 IP 的一种解决方
一旦创建完成,Spiderpool 将会自动同步其状态。
3. 在每个节点上配置 Open vSwitch 网桥。
创建网桥并配置网桥,以 `eth0` 为例。
```bash
~# ovs-vsctl add-br br1
~# ovs-vsctl add-port br1 eth0
~# ip addr add <IP地址>/<子网掩码> dev br1
~# ip link set br1 up
~# ip route add default via <默认网关IP> dev br1
```
请把以上命令配置在系统行动脚本中,以在主机重启时能够生效
创建后,可以在每个节点上查看到如下的网桥信息:
```bash
~# ovs-vsctl show
ec16d9e1-6187-4b21-9c2f-8b6cb75434b9
Bridge br1
Port eth0
Interface eth0
Port br1
Interface br1
type: internal
Port veth97fb4795
Interface veth97fb4795
ovs_version: "2.17.3"
```
4. 创建 SpiderIPPool 实例。
3. 创建 SpiderIPPool 实例。
Pod 会从该 IP 池中获取 IP,进行 Underlay 的网络通讯,所以该 IP 池的子网需要与接入的 Underlay 子网对应。以下是创建相关的 SpiderIPPool 示例:
Expand All @@ -162,7 +256,7 @@ Spiderpool 可用作 Underlay 网络场景下提供固定 IP 的一种解决方
EOF
```
5. 验证安装:
4. 验证安装:
```bash
~# kubectl get po -n kube-system |grep spiderpool
Expand All @@ -177,7 +271,7 @@ Spiderpool 可用作 Underlay 网络场景下提供固定 IP 的一种解决方
~#
```
6. Spiderpool 为简化书写 JSON 格式的 Multus CNI 配置,它提供了 SpiderMultusConfig CR 来自动管理 Multus NetworkAttachmentDefinition CR。如下是创建 Ovs SpiderMultusConfig 配置的示例:
5. Spiderpool 为简化书写 JSON 格式的 Multus CNI 配置,它提供了 SpiderMultusConfig CR 来自动管理 Multus NetworkAttachmentDefinition CR。如下是创建 Ovs SpiderMultusConfig 配置的示例:
* 确认 ovs-cni 所需的网桥名称,本例子以 br1 为例:
Expand Down
Loading

0 comments on commit f8eb56b

Please sign in to comment.