Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Kube-OVN高级功能 | 使用 OVN-IC 进行多集群互联

Kube-OVN高级功能 | 使用 OVN-IC 进行多集群互联

作者头像
灵雀云
发布于 2023-09-07 10:57:10
发布于 2023-09-07 10:57:10
85200
代码可运行
举报
运行总次数:0
代码可运行

" 如果你怀念 SDN 领域丰富的网络能力却在云原生领域苦苦追寻而不得,那么 Kube-OVN 将是你的最佳选择。本系列我们将逐个介绍Kube-OVN高级功能的工作原理及使用路径,帮你尽快征服容器网络难题!"

Kube-OVN 支持通过 OVN-IC 将两个 Kubernetes 集群 Pod 网络打通,打通后的两个集群内的 Pod 可以通过 Pod IP 进行直接通信。Kube-OVN 使用隧道对跨集群流量进行封装,两个集群之间只要存在一组 IP 可达的机器即可完成容器网络的互通。

该模式的多集群互联为 Overlay 网络功能,Underlay 网络如果想要实现集群互联需要底层基础设施做网络打通。

前提条件

1.自动互联模式下不同集群的子网 CIDR 不能相互重叠,默认子网需在安装时配置为不重叠的网段。若存在重叠需参考后续手动互联过程,只能将不重叠网段打通。

2.需要存在一组机器可以被每个集群的 kube-ovn-controller 通过 IP 访问,用来部署跨集群互联的控制器。

3.每个集群需要有一组可以通过 IP 进行跨集群互访的机器作为之后的网关节点。

4.该功能只对默认 VPC 生效,用户自定义 VPC 无法使用互联功能。

部署单节点 OVN-IC 数据库

在每个集群kube-ovn-controller可通过 IP 访问的机器上部署OVN-IC数据库,该节点将保存各个集群同步上来的网络配置信息。

部署docker的环境可以使用下面的命令启动OVN-IC数据库:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run --name=ovn-ic-db -d --network=host --privileged  -v /etc/ovn/:/etc/ovn -v /var/run/ovn:/var/run/ovn -v /var/log/ovn:/var/log/ovn kubeovn/kube-ovn:v1.10.6 bash start-ic-db.sh

对于部署containerd取代docker的环境可以使用下面的命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ctr -n k8s.io run -d --net-host --privileged --mount="type=bind,src=/etc/ovn/,dst=/etc/ovn,options=rbind:rw" --mount="type=bind,src=/var/run/ovn,dst=/var/run/ovn,options=rbind:rw" --mount="type=bind,src=/var/log/ovn,dst=/var/log/ovn,options=rbind:rw" docker.io/kubeovn/kube-ovn:v1.10.6 ovn-ic-db bash start-ic-db.sh

自动路由设置

在自动路由设置下,每个集群会将自己默认 VPC 下 Subnet 的 CIDR 信息同步给 OVN-IC,因此要确保两个集群的 Subnet CIDR 不存在重叠。

kube-systemNamespace 下创建ovn-ic-configConfigMap:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: v1
kind: ConfigMap
metadata:
  name: ovn-ic-config
  namespace: kube-system
data:
  enable-ic: "true"
  az-name: "az1" 
  ic-db-host: "192.168.65.3"
  ic-nb-port: "6645" 
  ic-sb-port: "6646"
  gw-nodes: "az1-gw"
  auto-route: "true"
  • enable-ic: 是否开启集群互联。
  • az-name: 区分不同集群的集群名称,每个互联集群需不同。
  • ic-db-host: 部署OVN-IC数据库的节点地址。
  • ic-nb-port:OVN-IC北向数据库端口,默认为 6645。
  • ic-sb-port:OVN-IC南向数据库端口,默认为 6646。
  • gw-nodes: 集群互联中承担网关工作的节点名,逗号分隔。
  • auto-route: 是否自动对外发布和学习路由。

注意: 为了保证操作的正确性,ovn-ic-config这个 ConfigMap 不允许修改。如有参数需要变更,请删除该 ConfigMap,修改后再应用此 ConfigMap。

ovn-ic容器内通过下面的命令查看是否已建立互联逻辑交换机ts

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# ovn-ic-sbctl showavailability-zone az1    gateway deee03e0-af16-4f45-91e9-b50c3960f809        hostname: az1-gw        type: geneve            ip: 192.168.42.145        port ts-az1            transit switch: ts            address: ["00:00:00:50:AC:8C 169.254.100.45/24"]availability-zone az2    gateway e94cc831-8143-40e3-a478-90352773327b        hostname: az2-gw        type: geneve            ip: 192.168.42.149        port ts-az2            transit switch: ts            address: ["00:00:00:07:4A:59 169.254.100.63/24"]

在每个集群观察逻辑路由是否有学习到的对端路由:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# kubectl ko nbctl lr-route-list ovn-clusterIPv4 Routes                10.42.1.1            169.254.100.45 dst-ip (learned)                10.42.1.3                100.64.0.2 dst-ip                10.16.0.2                100.64.0.2 src-ip                10.16.0.3                100.64.0.2 src-ip                10.16.0.4                100.64.0.2 src-ip                10.16.0.6                100.64.0.2 src-ip             10.17.0.0/16            169.254.100.45 dst-ip (learned)            100.65.0.0/16            169.254.100.45 dst-ip (learned)

接下来可以尝试在集群 1 内的一个 Pod 内直接ping集群 2 内的一个 Pod IP 观察是否可以联通。

对于某个不想对外自动发布路由的子网可以通过修改 Subnet 里的disableInterConnection来禁止路由广播:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: kubeovn.io/v1
kind: Subnet
metadata:
  name: no-advertise
spec:
  cidrBlock: 10.199.0.0/16
  disableInterConnection: true

手动路由设置

对于集群间存在重叠 CIDR 只希望做部分子网打通的情况,可以通过下面的步骤手动发布子网路由。

kube-systemNamespace 下创建ovn-ic-configConfigMap,并将auto-route设置为false

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: v1
kind: ConfigMap
metadata:
  name: ovn-ic-config
  namespace: kube-system
data:
  enable-ic: "true"
  az-name: "az1" 
  ic-db-host: "192.168.65.3"
  ic-nb-port: "6645" 
  ic-sb-port: "6646"
  gw-nodes: "az1-gw"
  auto-route: "false"

在每个集群分别查看远端逻辑端口的地址,用于之后手动配置路由:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@az1 ~]# kubectl ko nbctl show
switch a391d3a1-14a0-4841-9836-4bd930c447fb (ts)
    port ts-az1
        type: router
        router-port: az1-ts
    port ts-az2
        type: remote
        addresses: ["00:00:00:4B:E2:9F 169.254.100.31/24"]


[root@az2 ~]# kubectl ko nbctl show
switch da6138b8-de81-4908-abf9-b2224ec4edf3 (ts)
    port ts-az2
        type: router
        router-port: az2-ts
    port ts-az1
        type: remote
        addresses: ["00:00:00:FB:2A:F7 169.254.100.79/24"]

由上输出可知,集群az1到 集群az2的远端地址为 169.254.100.31,az2az1的远端地址为169.254.100.79

下面手动设置路由,在该例子中,集群az1内的子网 CIDR 为10.16.0.0/24,集群az2内的子网 CIDR 为10.17.0.0/24

在集群az1设置到集群az2的路由:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl ko nbctl lr-route-add ovn-cluster 10.17.0.0/24 169.254.100.31

在集群az2设置到集群az1的路由:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl ko nbctl lr-route-add ovn-cluster 10.16.0.0/24 169.254.100.79

高可用 OVN-IC 数据库部署

OVN-IC数据库之间可以通过 Raft 协议组成一个高可用集群,该部署模式需要至少 3 个节点。

首先在第一个节点上启动OVN-IC数据库的 leader。

部署docker环境的用户可以使用下面的命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run --name=ovn-ic-db -d --network=host --privileged -v /etc/ovn/:/etc/ovn -v /var/run/ovn:/var/run/ovn -v /var/log/ovn:/var/log/ovn -e LOCAL_IP="192.168.65.3"  -e NODE_IPS="192.168.65.3,192.168.65.2,192.168.65.1"   kubeovn/kube-ovn:v1.10.6 bash start-ic-db.sh

如果是部署containerd的用户可以使用下面的命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ctr -n k8s.io run -d --net-host --privileged --mount="type=bind,src=/etc/ovn/,dst=/etc/ovn,options=rbind:rw" --mount="type=bind,src=/var/run/ovn,dst=/var/run/ovn,options=rbind:rw" --mount="type=bind,src=/var/log/ovn,dst=/var/log/ovn,options=rbind:rw"  --env="NODE_IPS="192.168.65.3,192.168.65.2,192.168.65.1"" --env="LOCAL_IP="192.168.65.3"" docker.io/kubeovn/kube-ovn:v1.10.6 ovn-ic-db bash start-ic-db.sh
  • LOCAL_IP:当前容器所在节点 IP 地址。
  • NODE_IPS:运行OVN-IC数据库的三个节点 IP 地址,使用逗号进行分隔。

接下来,在另外两个节点部署OVN-IC数据库的 follower。

部署docker环境的用户可以使用下面的命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run --name=ovn-ic-db -d --network=host --privileged -v /etc/ovn/:/etc/ovn -v /var/run/ovn:/var/run/ovn -v /var/log/ovn:/var/log/ovn -e LOCAL_IP="192.168.65.2"  -e NODE_IPS="192.168.65.3,192.168.65.2,192.168.65.1" -e LEADER_IP="192.168.65.3"  kubeovn/kube-ovn:v1.10.6 bash start-ic-db.sh

如果是部署containerd的用户可以使用下面的命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ctr -n k8s.io run -d --net-host --privileged --mount="type=bind,src=/etc/ovn/,dst=/etc/ovn,options=rbind:rw" --mount="type=bind,src=/var/run/ovn,dst=/var/run/ovn,options=rbind:rw" --mount="type=bind,src=/var/log/ovn,dst=/var/log/ovn,options=rbind:rw"  --env="NODE_IPS="192.168.65.3,192.168.65.2,192.168.65.1"" --env="LOCAL_IP="192.168.65.2"" --env="LEADER_IP="192.168.65.3"" docker.io/kubeovn/kube-ovn:v1.10.6 ovn-ic-db bash start-ic-db.sh
  • LOCAL_IP:当前容器所在节点 IP 地址。
  • NODE_IPS:运行OVN-IC数据库的三个节点 IP 地址,使用逗号进行分隔。
  • LEADER_IP: 运行OVN-IC数据库 leader 节点的 IP 地址。

在每个集群创建ovn-ic-config时指定多个OVN-IC数据库节点地址:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: v1
kind: ConfigMap
metadata:
  name: ovn-ic-config
  namespace: kube-system
data:
  enable-ic: "true"
  az-name: "az1" 
  ic-db-host: "192.168.65.3,192.168.65.2,192.168.65.1"
  ic-nb-port: "6645"
  ic-sb-port: "6646"
  gw-nodes: "az1-gw"
  auto-route: "true"

手动重置

在一些情况下,由于配置错误需要对整个互联配置进行清理,可以参考下面的步骤清理环境。

删除当前的ovn-ic-configConfigmap:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl -n kube-system delete cm ovn-ic-config

删除ts逻辑交换机:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl-ko nbctl ls-del ts

在对端集群重复同样的步骤。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云原生技术社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Kube-OVN高级功能 | 使用 Submariner 进行多集群互联
" 如果你怀念 SDN 领域丰富的网络能力却在云原生领域苦苦追寻而不得,那么 Kube-OVN 将是你的最佳选择。本系列我们将逐个介绍Kube-OVN高级功能的工作原理及使用路径,帮你尽快征服容器网络难题!"
灵雀云
2023/09/07
5760
Kube-OVN高级功能 | 使用 Submariner 进行多集群互联
Kube-OVN 高级功能 | OpenStack 集成
" 如果你怀念 SDN 领域丰富的网络能力却在云原生领域苦苦追寻而不得,那么 Kube-OVN 将是你的最佳选择。本系列我们将逐个介绍Kube-OVN高级功能的工作原理及使用路径,帮你尽快征服容器网络难题!"
灵雀云
2023/02/27
1.2K0
Kube-OVN 高级功能 | OpenStack 集成
实践案例 | 基于 Kube-OVN 的虚拟网络技术探索
Kube-OVN开源以来,积累了各行业的用户实践,在KubeCON China 2021,来自字节跳动系统工程和技术团队(STE)的高级工程师费翔,带来了他和团队基于Kube-OVN做的场景落地和技术实现的分享。分享中梳理了字节团队技术选型过程,也同时也详细指出了基于社区版本之上,字节团队在实际应用场景下的技术拓展思路、成果,以及对社区未来功能的展望。
灵雀云
2022/03/03
2.1K0
实践案例 | 基于 Kube-OVN 的虚拟网络技术探索
Kube-OVN高级功能 | 支持 BGP
" 如果你怀念 SDN 领域丰富的网络能力却在云原生领域苦苦追寻而不得,那么 Kube-OVN 将是你的最佳选择。本系列我们将逐个介绍Kube-OVN高级功能的工作原理及使用路径,帮你尽快征服容器网络难题!"
灵雀云
2023/03/27
1K0
Kube-OVN高级功能  |  支持 BGP
社区实践|基于Kube-OVN多租户虚拟机+容器隔离
随Kubernetes的普及,容器环境对于大多数业务已经足够,但某些特殊业务涉及对内核的修改,还需要运行在虚拟机里,K8s将容器和虚拟机统一管理是将来的趋势。
灵雀云
2024/05/14
5091
社区实践|基于Kube-OVN多租户虚拟机+容器隔离
高级功能 | Kube-OVN VIP 预留设置
" 如果你怀念 SDN 领域丰富的网络能力却在云原生领域苦苦追寻而不得,那么 Kube-OVN 将是你的最佳选择。本系列我们将逐个介绍Kube-OVN高级功能的工作原理及使用路径,帮你尽快征服容器网络难题!"
灵雀云
2023/02/27
6870
高级功能 |  Kube-OVN VIP 预留设置
高级功能 | Kube-OVN 外部网关设置
" 如果你怀念 SDN 领域丰富的网络能力却在云原生领域苦苦追寻而不得,那么 Kube-OVN 将是你的最佳选择。本系列我们将逐个介绍Kube-OVN高级功能的工作原理及使用路径,帮你尽快征服容器网络难题!"
灵雀云
2023/02/27
8780
高级功能 | Kube-OVN 外部网关设置
Kube-OVN高级功能 | Overlay下路由方式网络打通
" 如果你怀念 SDN 领域丰富的网络能力却在云原生领域苦苦追寻而不得,那么 Kube-OVN 将是你的最佳选择。本系列我们将逐个介绍Kube-OVN高级功能的工作原理及使用路径,帮你尽快征服容器网络难题!"
灵雀云
2023/03/27
8560
Kube-OVN高级功能 | Overlay下路由方式网络打通
Kube-OVN V1.8: Underlay 多网卡强化,延迟大幅优化,VPC 功能完善以及更多新功能
中国 KubeCon + CloudNativeCon + Open Source Summit 虚拟大会
CNCF
2021/09/17
9470
OVN实践
#控制节点会运行三个ovs-dbserver,原先的ovs-db, ovn-south-db, ovn-north-db
惠伟
2021/02/24
1.4K0
OVN实践
Kube-OVN 在 k3s 上的简单使用
至此 k3s 和 kube-ovn 就安装完成了,下面简单体验下 kube-ovn 的功能。
后端云
2022/11/25
7770
Kube-OVN 在 k3s 上的简单使用
Kube-OVN 高级功能 | DPDK 支持
" 如果你怀念 SDN 领域丰富的网络能力却在云原生领域苦苦追寻而不得,那么 Kube-OVN 将是你的最佳选择。本系列我们将逐个介绍Kube-OVN高级功能的工作原理及使用路径,帮你尽快征服容器网络难题!"
灵雀云
2023/02/27
9490
Kube-OVN 高级功能 | DPDK 支持
Kube-OVN高级功能 | VPC 互联
" 如果你怀念 SDN 领域丰富的网络能力却在云原生领域苦苦追寻而不得,那么 Kube-OVN 将是你的最佳选择。本系列我们将逐个介绍Kube-OVN高级功能的工作原理及使用路径,帮你尽快征服容器网络难题!"
灵雀云
2023/02/27
1.6K0
Kube-OVN高级功能 | VPC 互联
高级功能 | Kube-OVN集成Cilium
" 如果你怀念 SDN 领域丰富的网络能力却在云原生领域苦苦追寻而不得,那么 Kube-OVN 将是你的最佳选择。本系列我们将逐个介绍Kube-OVN高级功能的工作原理及使用路径,帮你尽快征服容器网络难题!"
灵雀云
2022/11/29
1K0
高级功能 | Kube-OVN集成Cilium
Kube-OVN V1.7 功能亮点一览
我们上月发布的Kube-OVN V1.7版本相比之前做了一些比较大的调整,发布短短几周之内得到了用户的大量下载和使用反馈,之后又紧接着发布了Kube-OVN V1.71,对bug做了一些修正,并增加了以下几个新功能:
灵雀云
2021/08/06
8100
再谈自研开源Kube-OVN, 设计思路及实现原理
关于 OVN 和 OVS 的介绍可以参考之前的分享《灵雀云开源Kube-OVN网络组件,增强Kubernetes网络功能》。目前Kube-OVN已经在GitHub开源 https://github.com/alauda/kube-ovn,欢迎大家 star 做贡献。
灵雀云
2019/07/30
7.3K0
再谈自研开源Kube-OVN, 设计思路及实现原理
Kube-OVN源码解析 | kube-ovn-controller
Kube-OVN是一款基于OVS/OVN的K8s网络项目,它通过将 OpenStack 领域成熟的网络功能平移到 K8s,极大增强了 K8s 容器网络的安全性、可运维性、管理性和性能,为 K8s 生态的落地带来了独特的价值。
灵雀云
2022/06/06
9300
Kube-OVN源码解析 | kube-ovn-controller
灵雀云开源Kube-OVN网络组件,增强Kubernetes网络功能
近日,灵雀云宣布发布基于OVN的Kubernetes网络组件Kube-OVN,并正式将其在Github上开源。Kube-OVN提供了大量目前Kubernetes不具备的网络功能,并在原有基础上进行增强。通过将OpenStack领域成熟的网络功能平移到Kubernetes,来应对更加复杂的基础环境和应用合规性要求。
CNCF
2019/12/04
1.1K0
灵雀云开源Kube-OVN网络组件,增强Kubernetes网络功能
从CNI到OVN
诸如calico flannel等CNI实现,通过牺牲一些功能让网络复杂度得以大幅度降低是我极其推崇的,在云原生时代应用不再关心基础设施的场景下是一个明智之举,给网络调错带来了极大方便。
sealyun
2019/07/25
1.5K0
使用 kube-vip 搭建高可用 Kubernetes 集群
kube-vip 可以在你的控制平面节点上提供一个 Kubernetes 原生的 HA 负载均衡,我们不需要再在外部设置 HAProxy 和 Keepalived 来实现集群的高可用了。
我是阳明
2021/06/25
6K0
使用 kube-vip 搭建高可用 Kubernetes 集群
相关推荐
Kube-OVN高级功能 | 使用 Submariner 进行多集群互联
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档