集群互联(Alpha)
支持在网络模式同为 Kube-OVN 的集群之间配置集群互联,使集群间 Pod 可以互通访问。集群互联控制器是 Kube-OVN 提供的扩展组件,负责收集不同集群之间的网络信息,并通过下发路由将多个集群的网络打通。
例如在一组集群互联中,包含集群 A、集群 B 和集群 C,在进行集群间负载均衡时,当集群 A 的 Pod 过载或故障时,需要将流量切换到集群 B 和 集群 C,此时集群互联发挥提供集群间 Pod 互通的作用。
前提条件
- 
集群互联仅支持 Docker 运行时。 
- 
自动互联模式下不同集群的子网 CIDR 不能相互重叠,默认子网需在安装时配置为不重叠的网段。若存在重叠需参考后续手动互联过程,只能将不重叠网段打通。 
- 
需要存在一组机器可以被每个集群的 kube-ovn-controller 通过 IP 访问,用来部署跨集群互联的控制器。 
- 
每个集群需要有一组可以通过 IP 进行跨集群互访的机器作为之后的网关节点。 
- 
该功能只对默认 VPC 生效,用户自定义 VPC 无法使用互联功能。 
多节点搭建 Kube-OVN 联通控制器
- 
选择 任意集群中的三个或三个以上节点 部署联控控制器,在本例中准备了三个节点。 
- 
选择任一节点当作 Leader,替换相关参数并执行相应命令。 
- 
Leader 节点使用的命令格式如下: docker run \ --name=ovn-ic-db \ -d \ --network=host \ --privilege=true \ -v /etc/ovn/:/etc/ovn \ -v /var/run/ovn:/var/run/ovn \ -v /var/log/ovn:/var/log/ovn \ -e LOCAL_IP="<当前节点 IP 地址>" \ -e NODE_IPS="<是集群每个节点的 IP 地址,多个 IP 地址以逗号分割。>" \ <镜像仓库地址> bash start-ic-db.sh参数 描述 LOCAL_IP当前节点 IP 地址。 NODE_IPS准备的每个节点的 IP 地址,多个 IP 地址以逗号分割。 <镜像仓库地址>可运行命令:docker images | grep ovn 获取。 代码示例: docker run \ --name=ovn-ic-db \ -d \ --network=host \ --privilege=true \ -v /etc/ovn/:/etc/ovn \ -v /var/run/ovn:/var/run/ovn \ -v /var/log/ovn:/var/log/ovn \ -e LOCAL_IP="192.168.39.37" \ -e NODE_IPS="192.168.39.22,192.168.39.24,192.168.39.37" \ 192.168.39.10:60080/acp/kube-ovn:v1.8.8 bash start-ic-db.sh
- 
其余两个节点需多添加一个 LEADER_IP参数,参数值为 Leader 节点的 IP 地址,代码示例如下:docker run \ --name=ovn-ic-db \ -d \ --network=host \ --privilege=true \ -v /etc/ovn/:/etc/ovn \ -v /var/run/ovn:/var/run/ovn \ -v /var/log/ovn:/var/log/ovn \ -e LOCAL_IP="192.168.39.24" \ -e LEADER_IP="192.168.39.37" \ -e NODE_IPS="192.168.39.22,192.168.39.24,192.168.39.37" \ 192.168.39.10:60080/acp/kube-ovn:v1.8.8 bash start-ic-db.sh
在 Global 集群部署集群互联控制器
在 global 集群的任意控制节点中,根据注释替换如下参数,并执行以下命令创建 ConfigMap 资源。
注意:为了保证操作的正确性,在 global 集群上名为 ovn-ic 的 ConfigMap 不允许修改。如有参数需要变更,请删除该 ConfigMap,重新配置正确后再应用 ConfigMap。
cat << EOF |kubectl apply -f -
apiVersion: v1
kind: ConfigMap
metadata:
  name: ovn-ic
  namespace: cpaas-system
data:
  ic-db-host: "192.168.39.22,192.168.39.24,192.168.39.37"   # 集群互联控制器所在节点地址,在本例中,即部署控制器的三个节点 local IP
  ic-nb-port: "6645"            # 集群互联控制器 nb 端口,默认为 6645
  ic-sb-port: "6646"            # 集群互联控制器 sb 端口,默认为 6646
EOF加入集群互联
将一个网络模式为 Kube-OVN 的集群加入集群互联。
前提条件
集群中 创建的子网、ovn-default 和 join 子网 与集群互联组内的任意集群网段均不冲突。
操作步骤
- 
在左侧导航栏中,单击 集群管理 > 集群。 
- 
单击待加入集群互联的 集群名称。 
- 
在右上角单击 操作 > 集群互联。 
- 
单击 加入集群互联。 
- 
选择集群的网关节点。 
- 
单击 加入。 
相关操作
更新互联集群的网关节点信息
更新已加入集群互联组的集群网关节点信息。
操作步骤
- 
在左侧导航栏中,单击 集群管理 > 集群。 
- 
单击待更新网关节点信息的 集群名称。 
- 
在右上角单击 操作 > 集群互联。 
- 
单击待更新网关节点信息的集群对应的更新网关节点。 
- 
重新选择集群的网关节点。 
- 
单击 更新。 
退出集群互联
已加入集群互联组的集群退出集群互联,退出后,将断开集群 Pod 与外部集群 Pod 的连接。
操作步骤
- 
在左侧导航栏中,单击 集群管理 > 集群。 
- 
单击待退出集群互联的 集群名称。 
- 
在右上角单击 操作 > 集群互联。 
- 
单击待退出集群互联的集群对应的退出集群互联。 
- 
正确输入集群名称。 
- 
单击 退出。 
手动重置
某些情况下,例如误编辑了 ovn-ic-config 的配置时,OVN-IC 可能出现配置异常的情况。同时由于端口被占用,也可能配置无法恢复,因此需要手动重置环境。在这种情况下,可以按以下操作重置环境:
- 
首先删除名为 ovn-ic-config 的 configmap。 kubectl -n kube-system delete cm ovn-ic-config
- 
获取 pod 名称。 kubectl -n kube-system -lovn-nb-leader=true get pods输出示例值如下: NAME READY STATUS RESTARTS AGE ovn-central-7c97cdbd9-k5qll 1/1 Running 0 7m4s
- 
进入上一步中获取到的 pod 名称并执行以下操作。 kubectl -n kube-system exec -ti ovn-central-7c97cdbd9-k5qll bash
- 
在容器中执行以下命令,获取端口信息。 ovn-nbctl show | grep ts输出示例值如下: switch ae275e63-c2db-44a7-a1b1-c76c37b5965b (ts) port ts-az1 port ts-az0 router-port: az0-ts port az0-ts
- 
删除 ts 相关的所有端口,执行命令 ovn-nbctl lsp-del <端口名称>。注意:该步骤中删除的端口来自于上一步中获取的端口信息,例如在上一步中包含有三个端口: ts-az1,ts-az0,az0-ts,执行以下命令删除这三个端口。ovn-nbctl lsp-del ts-az1 ovn-nbctl lsp-del ts-az0 ovn-nbctl lrp-del az0-ts
- 
处理完毕后执行命令 exit退出容器,然后再次按照本文档重新部署 ovn-ic-config 即可。