diff --git a/v1.12.x/advance/multi-nic/index.html b/v1.12.x/advance/multi-nic/index.html index 10a3c123d..c7bfb6346 100644 --- a/v1.12.x/advance/multi-nic/index.html +++ b/v1.12.x/advance/multi-nic/index.html @@ -108,7 +108,7 @@ containers: - name: static-workload image: docker.io/library/nginx:alpine -
微信群 Slack Twitter Support Meeting
在一些情况下,用户需要使用 OpenStack 运行虚拟机,使用 Kubernetes 运行容器,并需要容器和虚机之间网络互通并处于统一控制平面下。如果 OpenStack Neutron 侧同样使用 OVN 作为底层网络控制,那么 Kube-OVN 可以使用集群互联和共享底层 OVN 两种方式打通 OpenStack 和 Kubernetes 的网络。
该模式和使用 OVN-IC 进行多集群互联打通两个 Kubernetes 集群网络方式类似,只不过将集群两端换成 OpenStack 和 Kubernetes。
使用下面的命令启动 OVN-IC
数据库:
docker run --name=ovn-ic-db -d --network=host -v /etc/ovn/:/etc/ovn -v /var/run/ovn:/var/run/ovn -v /var/log/ovn:/var/log/ovn kubeovn/kube-ovn:v1.12.29 bash start-ic-db.sh
+ OpenStack 集成¶
在一些情况下,用户需要使用 OpenStack 运行虚拟机,使用 Kubernetes 运行容器,并需要容器和虚机之间网络互通并处于统一控制平面下。如果 OpenStack Neutron 侧同样使用 OVN 作为底层网络控制,那么 Kube-OVN 可以使用集群互联和共享底层 OVN 两种方式打通 OpenStack 和 Kubernetes 的网络。
集群互联¶
该模式和使用 OVN-IC 进行多集群互联打通两个 Kubernetes 集群网络方式类似,只不过将集群两端换成 OpenStack 和 Kubernetes。
前提条件¶
- 自动互联模式下 OpenStack 和 Kubernetes 内的子网 CIDR 不能相互重叠。
- 需要存在一组机器可以被每个集群通过网络访问,用来部署跨集群互联的控制器。
- 每个集群需要有一组可以通过 IP 进行跨集群互访的机器作为之后的网关节点。
- 该方案只打通 Kubernetes 默认子网和 OpenStack 的选定 VPC。
部署 OVN-IC 数据库¶
使用下面的命令启动 OVN-IC
数据库:
docker run --name=ovn-ic-db -d --network=host -v /etc/ovn/:/etc/ovn -v /var/run/ovn:/var/run/ovn -v /var/log/ovn:/var/log/ovn kubeovn/kube-ovn:v1.12.30 bash start-ic-db.sh
Kubernetes 侧操作¶
在 kube-system
Namespace 下创建 ovn-ic-config
ConfigMap:
apiVersion: v1
kind: ConfigMap
metadata:
diff --git a/v1.12.x/advance/with-ovn-ic/index.html b/v1.12.x/advance/with-ovn-ic/index.html
index 4746293ec..3471f4d92 100644
--- a/v1.12.x/advance/with-ovn-ic/index.html
+++ b/v1.12.x/advance/with-ovn-ic/index.html
@@ -7,8 +7,8 @@
s.parentNode.insertBefore(hm, s);
})();
使用 OVN-IC 进行多集群互联¶
Kube-OVN 支持通过 OVN-IC 将两个 Kubernetes 集群 Pod 网络打通,打通后的两个集群内的 Pod 可以通过 Pod IP 进行直接通信。 Kube-OVN 使用隧道对跨集群流量进行封装,两个集群之间只要存在一组 IP 可达的机器即可完成容器网络的互通。
该模式的多集群互联为 Overlay 网络功能,Underlay 网络如果想要实现集群互联需要底层基础设施做网络打通。
前提条件¶
-
1.11.16 之后版本部署的集群默认关闭了集群互联的开关,需要在部署脚本 install.sh
里修改下列变量:
ENABLE_IC=true
-
打开开关后部署集群,会出现组件 deployment ovn-ic-controller。
-
自动互联模式下不同集群的子网 CIDR 不能相互重叠,默认子网需在安装时配置为不重叠的网段。若存在重叠需参考后续手动互联过程,只能将不重叠网段打通。
- 需要存在一组机器可以被每个集群的
kube-ovn-controller
通过 IP 访问,用来部署跨集群互联的控制器。 - 每个集群需要有一组可以通过 IP 进行跨集群互访的机器作为之后的网关节点。
- 该功能只对默认 VPC 生效,用户自定义 VPC 无法使用互联功能。
部署单节点 OVN-IC 数据库¶
在每个集群 kube-ovn-controller
可通过 IP 访问的机器上部署 OVN-IC
数据库,该节点将保存各个集群同步上来的网络配置信息。
部署 docker
的环境可以使用下面的命令启动 OVN-IC
数据库:
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.12.29 bash start-ic-db.sh
-
对于部署 containerd
取代 docker
的环境可以使用下面的命令:
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.12.29 ovn-ic-db bash start-ic-db.sh
+
打开开关后部署集群,会出现组件 deployment ovn-ic-controller。
自动互联模式下不同集群的子网 CIDR 不能相互重叠,默认子网需在安装时配置为不重叠的网段。若存在重叠需参考后续手动互联过程,只能将不重叠网段打通。
需要存在一组机器可以被每个集群的 kube-ovn-controller
通过 IP 访问,用来部署跨集群互联的控制器。 每个集群需要有一组可以通过 IP 进行跨集群互访的机器作为之后的网关节点。 该功能只对默认 VPC 生效,用户自定义 VPC 无法使用互联功能。 部署单节点 OVN-IC 数据库¶
在每个集群 kube-ovn-controller
可通过 IP 访问的机器上部署 OVN-IC
数据库,该节点将保存各个集群同步上来的网络配置信息。
部署 docker
的环境可以使用下面的命令启动 OVN-IC
数据库:
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.12.30 bash start-ic-db.sh
+
对于部署 containerd
取代 docker
的环境可以使用下面的命令:
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.12.30 ovn-ic-db bash start-ic-db.sh
自动路由设置¶
在自动路由设置下,每个集群会将自己默认 VPC 下 Subnet 的 CIDR 信息同步给 OVN-IC
,因此要确保两个集群的 Subnet CIDR 不存在重叠。
在 kube-system
Namespace 下创建 ovn-ic-config
ConfigMap:
apiVersion: v1
kind: ConfigMap
metadata:
@@ -88,10 +88,10 @@
addresses: ["00:00:00:FB:2A:F7 169.254.100.79/24"]
由上输出可知,集群 az1
到 集群 az2
的远端地址为 169.254.100.31
,az2
到 az1
的远端地址为 169.254.100.79
。
下面手动设置路由,在该例子中,集群 az1
内的子网 CIDR 为 10.16.0.0/24
,集群 az2
内的子网 CIDR 为 10.17.0.0/24
。
在集群 az1
设置到集群 az2
的路由:
kubectl ko nbctl lr-route-add ovn-cluster 10.17.0.0/24 169.254.100.31
在集群 az2
设置到集群 az1
的路由:
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
环境的用户可以使用下面的命令:
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.12.29 bash start-ic-db.sh
-
如果是部署 containerd
的用户可以使用下面的命令:
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.12.29 ovn-ic-db bash start-ic-db.sh
-
LOCAL_IP
: 当前容器所在节点 IP 地址。 NODE_IPS
: 运行 OVN-IC
数据库的三个节点 IP 地址,使用逗号进行分隔。
接下来,在另外两个节点部署 OVN-IC
数据库的 follower。
部署 docker
环境的用户可以使用下面的命令:
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.12.29 bash start-ic-db.sh
-
如果是部署 containerd
的用户可以使用下面的命令:
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.12.29 ovn-ic-db bash start-ic-db.sh
+
高可用 OVN-IC 数据库部署¶
OVN-IC
数据库之间可以通过 Raft 协议组成一个高可用集群,该部署模式需要至少 3 个节点。
首先在第一个节点上启动 OVN-IC
数据库的 leader。
部署 docker
环境的用户可以使用下面的命令:
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.12.30 bash start-ic-db.sh
+
如果是部署 containerd
的用户可以使用下面的命令:
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.12.30 ovn-ic-db bash start-ic-db.sh
+
LOCAL_IP
: 当前容器所在节点 IP 地址。 NODE_IPS
: 运行 OVN-IC
数据库的三个节点 IP 地址,使用逗号进行分隔。
接下来,在另外两个节点部署 OVN-IC
数据库的 follower。
部署 docker
环境的用户可以使用下面的命令:
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.12.30 bash start-ic-db.sh
+
如果是部署 containerd
的用户可以使用下面的命令:
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.12.30 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
数据库节点地址:
apiVersion: v1
kind: ConfigMap
metadata:
@@ -114,7 +114,7 @@
docker rm ovn-ic-db
如果控制器是 containerd
部署执行命令:
ctr -n k8s.io task kill ovn-ic-db
ctr -n k8s.io containers rm ovn-ic-db
-
微信群 Slack Twitter Support Meeting
评论
Integration with OpenStack¶
In some cases, users need to run virtual machines with OpenStack and containers with Kubernetes, and need the network to interoperate between containers and virtual machines and be under a unified control plane. If the OpenStack Neutron side also uses OVN as the underlying network, then Kube-OVN can use either cluster interconnection or shared underlying OVN to connect the OpenStack and Kubernetes networks.
Cluster Interconnection¶
This pattern is similar to Cluster Inter-Connection with OVN-IC to connect two Kubernetes cluster networks, except that the two ends of the cluster are replaced with OpenStack and Kubernetes。
Prerequisites¶
- The subnet CIDRs within OpenStack and Kubernetes cannot overlap with each other in auto-route mode.
- A set of machines needs to exist that can be accessed by each cluster over the network and used to deploy controllers that interconnect across clusters.
- Each cluster needs to have a set of machines that can access each other across clusters via IP as the gateway nodes.
- This solution only connects to the Kubernetes default subnet with selected VPC in OpenStack.
Deploy OVN-IC DB¶
Start the OVN-IC
DB with the following command:
docker run --name=ovn-ic-db -d --network=host -v /etc/ovn/:/etc/ovn -v /var/run/ovn:/var/run/ovn -v /var/log/ovn:/var/log/ovn kubeovn/kube-ovn:v1.12.29 bash start-ic-db.sh
+ Integration with OpenStack¶
In some cases, users need to run virtual machines with OpenStack and containers with Kubernetes, and need the network to interoperate between containers and virtual machines and be under a unified control plane. If the OpenStack Neutron side also uses OVN as the underlying network, then Kube-OVN can use either cluster interconnection or shared underlying OVN to connect the OpenStack and Kubernetes networks.
Cluster Interconnection¶
This pattern is similar to Cluster Inter-Connection with OVN-IC to connect two Kubernetes cluster networks, except that the two ends of the cluster are replaced with OpenStack and Kubernetes。
Prerequisites¶
- The subnet CIDRs within OpenStack and Kubernetes cannot overlap with each other in auto-route mode.
- A set of machines needs to exist that can be accessed by each cluster over the network and used to deploy controllers that interconnect across clusters.
- Each cluster needs to have a set of machines that can access each other across clusters via IP as the gateway nodes.
- This solution only connects to the Kubernetes default subnet with selected VPC in OpenStack.
Deploy OVN-IC DB¶
Start the OVN-IC
DB with the following command:
docker run --name=ovn-ic-db -d --network=host -v /etc/ovn/:/etc/ovn -v /var/run/ovn:/var/run/ovn -v /var/log/ovn:/var/log/ovn kubeovn/kube-ovn:v1.12.30 bash start-ic-db.sh
Kubernetes Side Operations¶
Create ovn-ic-config
ConfigMap in kube-system
Namespace :
apiVersion: v1
kind: ConfigMap
metadata:
diff --git a/v1.12.x/en/advance/with-ovn-ic/index.html b/v1.12.x/en/advance/with-ovn-ic/index.html
index 2d2aa188a..3986a57aa 100644
--- a/v1.12.x/en/advance/with-ovn-ic/index.html
+++ b/v1.12.x/en/advance/with-ovn-ic/index.html
@@ -7,8 +7,8 @@
s.parentNode.insertBefore(hm, s);
})();
Cluster Inter-Connection with OVN-IC¶
Kube-OVN supports interconnecting two Kubernetes cluster Pod networks via OVN-IC, and the Pods in the two clusters can communicate directly via Pod IPs. Kube-OVN uses tunnels to encapsulate cross-cluster traffic, allowing container networks to interconnect between two clusters as long as there is a set of IP reachable machines.
This mode of multi-cluster interconnection is for Overlay network. For Underlay network, it needs the underlying infrastructure to do the inter-connection work.
Prerequisites¶
-
Clusters configured in versions after 1.11.16 have the cluster interconnection switch turned off by default. You need to mark the following in the configuration script install.sh
:
ENABLE_IC=true
-
After opening the switch and deploying the cluster, the component deployment ovn-ic-controller will appear.
-
The subnet CIDRs within OpenStack and Kubernetes cannot overlap with each other in auto-interconnect mode. If there is overlap, you need to refer to the subsequent manual interconnection process, which can only connect non-overlapping Subnets.
- A set of machines needs to exist that can be accessed by each cluster over the network and used to deploy controllers that interconnect across clusters.
- Each cluster needs to have a set of machines that can access each other across clusters via IP as the gateway nodes.
- This solution only connects to the Kubernetes default VPCs.
Deploy a single-node OVN-IC DB¶
Deploy the OVN-IC
DB on a machine accessible by kube-ovn-controller
, This DB will hold the network configuration information synchronized up from each cluster.
An environment deploying docker
can start the OVN-IC
DB with the following command.
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.12.29 bash start-ic-db.sh
-
For deploying a containerd
environment instead of docker
you can use the following command:
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.12.29 ovn-ic-db bash start-ic-db.sh
+
After opening the switch and deploying the cluster, the component deployment ovn-ic-controller will appear.
The subnet CIDRs within OpenStack and Kubernetes cannot overlap with each other in auto-interconnect mode. If there is overlap, you need to refer to the subsequent manual interconnection process, which can only connect non-overlapping Subnets.
A set of machines needs to exist that can be accessed by each cluster over the network and used to deploy controllers that interconnect across clusters. Each cluster needs to have a set of machines that can access each other across clusters via IP as the gateway nodes. This solution only connects to the Kubernetes default VPCs. Deploy a single-node OVN-IC DB¶
Deploy the OVN-IC
DB on a machine accessible by kube-ovn-controller
, This DB will hold the network configuration information synchronized up from each cluster.
An environment deploying docker
can start the OVN-IC
DB with the following command.
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.12.30 bash start-ic-db.sh
+
For deploying a containerd
environment instead of docker
you can use the following command:
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.12.30 ovn-ic-db bash start-ic-db.sh
Automatic Routing Mode¶
In auto-routing mode, each cluster synchronizes the CIDR information of the Subnet under its own default VPC to OVN-IC
, so make sure there is no overlap between the Subnet CIDRs of the two clusters.
Create ovn-ic-config
ConfigMap in kube-system
Namespace:
apiVersion: v1
kind: ConfigMap
metadata:
@@ -88,10 +88,10 @@
addresses: ["00:00:00:FB:2A:F7 169.254.100.79/24"]
The output above shows that the remote address from cluster az1
to cluster az2
is 169.254.100.31
and the remote address from az2
to az1
is 169.254.100.79
.
In this example, the subnet CIDR within cluster az1
is 10.16.0.0/24
and the subnet CIDR within cluster az2
is 10.17.0.0/24
.
Set up a route from cluster az1
to cluster az2
in cluster az1
:
kubectl ko nbctl lr-route-add ovn-cluster 10.17.0.0/24 169.254.100.31
Set up a route to cluster az1
in cluster az2
:
kubectl ko nbctl lr-route-add ovn-cluster 10.16.0.0/24 169.254.100.79
-
Highly Available OVN-IC DB Installation¶
A highly available cluster can be formed between OVN-IC
DB via the Raft protocol, which requires a minimum of 3 nodes for this deployment model.
First start the leader of the OVN-IC
DB on the first node.
Users deploying a docker
environment can use the following command:
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.12.29 bash start-ic-db.sh
-
If you are using containerd
you can use the following command:
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.12.29 ovn-ic-db bash start-ic-db.sh
-
LOCAL_IP
: The IP address of the node where the current container is located. NODE_IPS
: The IP addresses of the three nodes running the OVN-IC
database, separated by commas.
Next, deploy the follower of the OVN-IC
DB on the other two nodes.
docker
environment can use the following command.
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.12.29 bash start-ic-db.sh
-
If using containerd
you can use the following command:
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.12.29 ovn-ic-db bash start-ic-db.sh
+
Highly Available OVN-IC DB Installation¶
A highly available cluster can be formed between OVN-IC
DB via the Raft protocol, which requires a minimum of 3 nodes for this deployment model.
First start the leader of the OVN-IC
DB on the first node.
Users deploying a docker
environment can use the following command:
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.12.30 bash start-ic-db.sh
+
If you are using containerd
you can use the following command:
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.12.30 ovn-ic-db bash start-ic-db.sh
+
LOCAL_IP
: The IP address of the node where the current container is located. NODE_IPS
: The IP addresses of the three nodes running the OVN-IC
database, separated by commas.
Next, deploy the follower of the OVN-IC
DB on the other two nodes.
docker
environment can use the following command.
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.12.30 bash start-ic-db.sh
+
If using containerd
you can use the following command:
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.12.30 ovn-ic-db bash start-ic-db.sh
LOCAL_IP
: The IP address of the node where the current container is located. NODE_IPS
: The IP addresses of the three nodes running the OVN-IC
database, separated by commas. LEADER_IP
: The IP address of the OVN-IC
DB leader node.
Specify multiple OVN-IC
database node addresses when creating ovn-ic-config
for each cluster:
apiVersion: v1
kind: ConfigMap
metadata:
diff --git a/v1.12.x/en/guide/vpc/index.html b/v1.12.x/en/guide/vpc/index.html
index b58b90583..5b04bc8dd 100644
--- a/v1.12.x/en/guide/vpc/index.html
+++ b/v1.12.x/en/guide/vpc/index.html
@@ -185,7 +185,7 @@
name: ovn-vpc-nat-config
namespace: kube-system
data:
- image: docker.io/kubeovn/vpc-nat-gateway:v1.12.29
+ image: docker.io/kubeovn/vpc-nat-gateway:v1.12.30
image
: The image used by the VPC Gateway Pod.
Custom Routing¶
Within the custom VPC, users can customize the routing rules within the VPC and combine it with the gateway for more flexible forwarding. Kube-OVN supports static routes and more flexible policy routes.
Static Routes¶
kind: Vpc
apiVersion: kubeovn.io/v1
metadata:
diff --git a/v1.12.x/en/ops/change-log-level/index.html b/v1.12.x/en/ops/change-log-level/index.html
index 3df42b71b..79bdfccb2 100644
--- a/v1.12.x/en/ops/change-log-level/index.html
+++ b/v1.12.x/en/ops/change-log-level/index.html
@@ -9,7 +9,7 @@
Change Log Level¶
Open kube-ovn.yaml
and set the log level in the parameter list of the service startup script, such as:
vi kube-ovn.yaml
# ...
- name: kube-ovn-controller
- image: "docker.io/kubeovn/kube-ovn:v1.12.29"
+ image: "docker.io/kubeovn/kube-ovn:v1.12.30"
imagePullPolicy: IfNotPresent
args:
- /kube-ovn/start-controller.sh
diff --git a/v1.12.x/en/ops/kubectl-ko/index.html b/v1.12.x/en/ops/kubectl-ko/index.html
index a74bdd873..f191e149c 100644
--- a/v1.12.x/en/ops/kubectl-ko/index.html
+++ b/v1.12.x/en/ops/kubectl-ko/index.html
@@ -474,7 +474,7 @@
I0603 10:35:04.349404 17619 pinger.go:19]
-------------------------------------------------------------------------------
Kube-OVN:
- Version: v1.12.29
+ Version: v1.12.30
Build: 2022-04-24_08:02:50
Commit: git-73f9d15
Go Version: go1.17.8
diff --git a/v1.12.x/en/ops/recover-db/index.html b/v1.12.x/en/ops/recover-db/index.html
index 43174cf30..035611faa 100644
--- a/v1.12.x/en/ops/recover-db/index.html
+++ b/v1.12.x/en/ops/recover-db/index.html
@@ -44,7 +44,7 @@
Log in to the abnormal node and delete the database file:
mv /etc/origin/ovn/ovnnb_db.db /tmp
Delete the ovn-central
pod of the corresponding node and wait for the cluster to recover:
kubectl delete pod -n kube-system ovn-central-xxxx
Recover when Total Cluster Failed¶
If the majority of the cluster nodes are broken and the leader cannot be elected, please refer to the following steps to recover.
Stop ovn-central¶
Record the current replicas of ovn-central
and stop ovn-central
to avoid new database changes that affect recovery:
kubectl scale deployment -n kube-system ovn-central --replicas=0
-
Select a Backup¶
As most of the nodes are damaged, the cluster needs to be rebuilt by recovering from one of the database files. If you have previously backed up the database you can use the previous backup file to restore it. If not you can use the following steps to generate a backup from an existing file.
Since the database file in the default folder is a cluster format database file containing information about the current cluster, you can't rebuild the database directly with this file, you need to use ovsdb-tool cluster-to-standalone
to convert the format.
Select the first node in the ovn-central
environment variable NODE_IPS
to restore the database files. If the database file of the first node is corrupted, copy the file from the other machine /etc/origin/ovn
to the first machine. Run the following command to generate a database file backup.
docker run -it -v /etc/origin/ovn:/etc/ovn kubeovn/kube-ovn:v1.12.29 bash
+
Select a Backup¶
As most of the nodes are damaged, the cluster needs to be rebuilt by recovering from one of the database files. If you have previously backed up the database you can use the previous backup file to restore it. If not you can use the following steps to generate a backup from an existing file.
Since the database file in the default folder is a cluster format database file containing information about the current cluster, you can't rebuild the database directly with this file, you need to use ovsdb-tool cluster-to-standalone
to convert the format.
Select the first node in the ovn-central
environment variable NODE_IPS
to restore the database files. If the database file of the first node is corrupted, copy the file from the other machine /etc/origin/ovn
to the first machine. Run the following command to generate a database file backup.
docker run -it -v /etc/origin/ovn:/etc/ovn kubeovn/kube-ovn:v1.12.30 bash
cd /etc/ovn/
ovsdb-tool cluster-to-standalone ovnnb_db_standalone.db ovnnb_db.db
ovsdb-tool cluster-to-standalone ovnsb_db_standalone.db ovnsb_db.db
diff --git a/v1.12.x/en/reference/annotations/index.html b/v1.12.x/en/reference/annotations/index.html
index 79351af4b..31692a14b 100644
--- a/v1.12.x/en/reference/annotations/index.html
+++ b/v1.12.x/en/reference/annotations/index.html
@@ -6,7 +6,7 @@
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
- Annotation Usage¶
Kube-OVN uses a large number of Pod and Node Annotations for configuring functionality and transferring information. Users can refer to this document to understand the usage of each Annotation, to better troubleshooting and information retrieval.
Note: Some Annotations may change as the code is adjusted.
Pod Annotation¶
Key Value Description ovn.kubernetes.io/allocated true
or false
If the Pod primary interface has already been allocated an address ovn.kubernetes.io/routed true
or false
If the Pod primary interface has already been allocated a route ovn.kubernetes.io/mac_address String MAC address allocated to Pod primary interface,when creating a Pod, you can set a fixed MAC address by this Annotation ovn.kubernetes.io/ip_address String IP address allocated to Pod primary interface,when creating a Pod, you can set a fixed IP address by this Annotation ovn.kubernetes.io/cidr String Subnet CIDR that the Pod primary interface belongs to ovn.kubernetes.io/gateway String Subnet Gateway address that the Pod primary interface belongs to ovn.kubernetes.io/ip_pool IP list, separated by comma Pod primary interface will choose address from this list, used for workload fix address ovn.kubernetes.io/bgp true
, cluster
, local
Enable Pod address BGP advertisement ovn.kubernetes.io/snat String SNAT address for accessing external address ovn.kubernetes.io/eip String EIP address that Pod accesses external clusters and is accessed from external. ovn.kubernetes.io/vip String VIP allocated to Pod primary interface ovn.kubernetes.io/virtualmachine String The VirtualMachineInstance that the Pod primary interface belongs to ovn.kubernetes.io/logical_router String The VPC that the Pod primary interface belongs to ovn.kubernetes.io/layer2_forward true
or false
Enable add unknown
address to Pod primary interface in OVN NorthboundDB LSP ovn.kubernetes.io/port_security true
or false
Enable Pod primary interface port security ovn.kubernetes.io/logical_switch String The Subnet that the Pod primary interface belongs to ovn.kubernetes.io/vlan_id Int The VlanID that the Pod primary interface belongs to ovn.kubernetes.io/ingress_rate Int Pod primary interface ingress rate limit, measured in Mbits/s ovn.kubernetes.io/egress_rate Int Pod primary interface egress rate limit, measured in Mbits/s ovn.kubernetes.io/security_groups String list, separated by comma The SecurityGroup that the Pod primary interface belongs to ovn.kubernetes.io/allow_live_migration true
or false
Allow live migration for Pod primary interface, used by KubeVirt ovn.kubernetes.io/default_route true
or false
Set the default route to the Pod primary interface. ovn.kubernetes.io/provider_network String The ProviderNetwork that the Pod primary interface belongs to ovn.kubernetes.io/mirror true
or false
Enable Pod primary interface traffic mirror ovn.kubernetes.io/latency Int The delay injected to the Pod primary interface card, measured in milliseconds ovn.kubernetes.io/limit Int Maximum number of packets that the qdisc queue of the primary interface of the Pod ovn.kubernetes.io/loss Float The probability of packet loss on the Pod primary interface ovn.kubernetes.io/jitter Int The jitter of packet latency on the Pod primary interface, measured in milliseconds
Node Annotation¶
Key Value Description ovn.kubernetes.io/allocated true
or false
If the ovn0
interface has already been allocated an address ovn.kubernetes.io/ip_address String IP address allocated to ovn0
interface ovn.kubernetes.io/mac_address String MAC address allocated to ovn0
interface ovn.kubernetes.io/cidr String Subnet CIDR that the node ovn0
interface belongs to ovn.kubernetes.io/gateway String Subnet gateway that the node ovn0
interface belongs to ovn.kubernetes.io/chassis String The Chassis ID in OVN-SouthBoundDB that the node belongs to ovn.kubernetes.io/port_name String The LSP name in OVN-NorthboundDB that the node ovn0
interface belongs to ovn.kubernetes.io/logical_switch String Subnet that the node ovn0
interface belongs to ovn.kubernetes.io/tunnel_interface String Network interface used for tunnel encapsulation
Namespace Annotation¶
Key Value Description ovn.kubernetes.io/cidr CIDR list, separated by comma The CIDRs of subnets bound by this Namespace ovn.kubernetes.io/exclude_ips excludeIPs list, separated by semicolon The excludeIPs of subnets bound by this Namespace
Subnet Annotation¶
Key Value Description ovn.kubernetes.io/bgp true
, cluster
, local
Enable Subnet address BGP advertisement
Service Annotation¶
Key Value Description ovn.kubernetes.io/bgp true
or false
Enable Service address BGP advertisement ovn.kubernetes.io/switch_lb_vip String Additional VIP addresses assigned to Service in Kube-OVN. ovn.kubernetes.io/vpc String The VPC that the Service belongs to
Networkpolicy Annotation¶
Key Value Description ovn.kubernetes.io/enable_log true
or false
Enable NetworkPolicy log
微信群 Slack Twitter Support Meeting
Comments
Annotation Usage¶
Kube-OVN uses a large number of Pod and Node Annotations for configuring functionality and transferring information. Users can refer to this document to understand the usage of each Annotation, to better troubleshooting and information retrieval.
Note: Some Annotations may change as the code is adjusted.
Pod Annotation¶
Key Value Description ovn.kubernetes.io/allocated true
or false
If the Pod primary interface has already been allocated an address ovn.kubernetes.io/routed true
or false
If the Pod primary interface has already been allocated a route ovn.kubernetes.io/mac_address String MAC address allocated to Pod primary interface,when creating a Pod, you can set a fixed MAC address by this Annotation ovn.kubernetes.io/ip_address String IP address allocated to Pod primary interface,when creating a Pod, you can set a fixed IP address by this Annotation ovn.kubernetes.io/cidr String Subnet CIDR that the Pod primary interface belongs to ovn.kubernetes.io/gateway String Subnet Gateway address that the Pod primary interface belongs to ovn.kubernetes.io/ip_pool IP list, separated by comma Pod primary interface will choose address from this list, used for workload fix address ovn.kubernetes.io/bgp true
, cluster
, local
Enable Pod address BGP advertisement ovn.kubernetes.io/snat String SNAT address for accessing external address ovn.kubernetes.io/eip String EIP address that Pod accesses external clusters and is accessed from external. ovn.kubernetes.io/vip String VIP allocated to Pod primary interface ovn.kubernetes.io/virtualmachine String The VirtualMachineInstance that the Pod primary interface belongs to ovn.kubernetes.io/logical_router String The VPC that the Pod primary interface belongs to ovn.kubernetes.io/layer2_forward true
or false
Enable add unknown
address to Pod primary interface in OVN NorthboundDB LSP ovn.kubernetes.io/port_security true
or false
Enable Pod primary interface port security ovn.kubernetes.io/logical_switch String The Subnet that the Pod primary interface belongs to ovn.kubernetes.io/vlan_id Int The VlanID that the Pod primary interface belongs to ovn.kubernetes.io/ingress_rate Int Pod primary interface ingress rate limit, measured in Mbits/s ovn.kubernetes.io/egress_rate Int Pod primary interface egress rate limit, measured in Mbits/s ovn.kubernetes.io/security_groups String list, separated by comma The SecurityGroup that the Pod primary interface belongs to ovn.kubernetes.io/allow_live_migration true
or false
Allow live migration for Pod primary interface, used by KubeVirt ovn.kubernetes.io/default_route true
or false
Set the default route to the Pod primary interface. ovn.kubernetes.io/provider_network String The ProviderNetwork that the Pod primary interface belongs to ovn.kubernetes.io/mirror true
or false
Enable Pod primary interface traffic mirror ovn.kubernetes.io/latency Int The delay injected to the Pod primary interface card, measured in milliseconds ovn.kubernetes.io/limit Int Maximum number of packets that the qdisc queue of the primary interface of the Pod ovn.kubernetes.io/loss Float The probability of packet loss on the Pod primary interface ovn.kubernetes.io/jitter Int The jitter of packet latency on the Pod primary interface, measured in milliseconds
Node Annotation¶
Key Value Description ovn.kubernetes.io/allocated true
or false
If the ovn0
interface has already been allocated an address ovn.kubernetes.io/ip_address String IP address allocated to ovn0
interface ovn.kubernetes.io/mac_address String MAC address allocated to ovn0
interface ovn.kubernetes.io/cidr String Subnet CIDR that the node ovn0
interface belongs to ovn.kubernetes.io/gateway String Subnet gateway that the node ovn0
interface belongs to ovn.kubernetes.io/chassis String The Chassis ID in OVN-SouthBoundDB that the node belongs to ovn.kubernetes.io/port_name String The LSP name in OVN-NorthboundDB that the node ovn0
interface belongs to ovn.kubernetes.io/logical_switch String Subnet that the node ovn0
interface belongs to ovn.kubernetes.io/tunnel_interface String Network interface used for tunnel encapsulation
Namespace Annotation¶
Key Value Description ovn.kubernetes.io/cidr CIDR list, separated by comma The CIDRs of subnets bound by this Namespace ovn.kubernetes.io/exclude_ips excludeIPs list, separated by semicolon The excludeIPs of subnets bound by this Namespace
Subnet Annotation¶
Key Value Description ovn.kubernetes.io/bgp true
, cluster
, local
Enable Subnet address BGP advertisement
Service Annotation¶
Key Value Description ovn.kubernetes.io/bgp true
or false
Enable Service address BGP advertisement ovn.kubernetes.io/switch_lb_vip String Additional VIP addresses assigned to Service in Kube-OVN. ovn.kubernetes.io/vpc String The VPC that the Service belongs to
Networkpolicy Annotation¶
Key Value Description ovn.kubernetes.io/enable_log true
or false
Enable NetworkPolicy log
微信群 Slack Twitter Support Meeting
Comments
Release Management¶
Kube-OVN currently mainly releases Minor and Patch versions. Minor versions include the addition of new features, major OVN/OVS upgrades, internal architecture adjustments, and API changes. Patch versions focus primarily on bug fixes, security vulnerability repairs, dependency upgrades, and are backward compatible with previous APIs.
Maintenance Strategy¶
Kube-OVN currently continuously maintains the main branch and the two most recent release branches, such as master
, release-1.12
, and release-1.11
. The latest release branch (e.g., release-1.12
) will undergo more frequent iterations and releases, with all bug fixes, security vulnerabilities, and dependency upgrades being backported to this branch as much as possible.
The previous release branch (e.g., release-1.11
) will backport significant bug fixes and security vulnerability repairs.
Release Cycle¶
Minor versions are released as needed, based on whether there are significant new features or major architectural adjustments completed in the main branch, currently about once every six months. Patch versions are triggered based on the bug fix status of the branch, generally within a week after bug fixes are merged.
Patch Version Release Method¶
Currently, most of the work for Patch versions can be automated using the hack/release.sh script, with the main steps described as follows:
- Check the current branch build status (automated)
- Push the new tag image to Docker Hub (automated)
- Push the new tag code to GitHub (automated)
- Update the version information in the code (automated)
- Update the version information in the documentation repository (automated)
- Generate Release Note PR (automated)
- Merge Release Note (manual)
- Manually merge the GitHub action generated Release Note PR
- Modify the GitHub Release information (manual)
- Edit the newly created Release on the GitHub Release page, change the title to the corresponding version number (e.g.,
v1.12.12
), and copy the Release Note generated in the previous step into the Release details
Minor Version Release Method¶
Currently, the main tasks for Minor branches still need to be completed manually, with the main steps described as follows:
- Push a new release branch on GitHub, e.g.,
release-1.13
(manual) - Update the version information in the
VERSION
, dist/images/install.sh
, charts/kube-ovn/values.yaml
, and charts/kube-ovn/Chart.yaml
from the main branch to the next Minor version, e.g., v1.14.0
(manual) - Push the new tag image to Docker Hub (manual)
- Push the new tag code to GitHub in the release branch (manual)
- Create a new release branch in the documentation repository, e.g.,
v1.13
, and modify the version
and branch
information in the mkdocs.yml
file (manual) - Generate Release Note PR (automated)
- Merge Release Note (manual)
- Manually merge the GitHub action generated Release Note PR
- Modify the GitHub Release information (manual)
- Edit the newly created Release on the GitHub Release page, change the title to the corresponding version number (e.g.,
v1.13.0
), and copy the Release Note generated in the previous step into the Release details - Update the
VERSION
file in the release branch to the next Patch version, e.g., v1.13.1
微信群 Slack Twitter Support Meeting
Comments
Release Management¶
Kube-OVN currently mainly releases Minor and Patch versions. Minor versions include the addition of new features, major OVN/OVS upgrades, internal architecture adjustments, and API changes. Patch versions focus primarily on bug fixes, security vulnerability repairs, dependency upgrades, and are backward compatible with previous APIs.
Maintenance Strategy¶
Kube-OVN currently continuously maintains the main branch and the two most recent release branches, such as master
, release-1.12
, and release-1.11
. The latest release branch (e.g., release-1.12
) will undergo more frequent iterations and releases, with all bug fixes, security vulnerabilities, and dependency upgrades being backported to this branch as much as possible.
The previous release branch (e.g., release-1.11
) will backport significant bug fixes and security vulnerability repairs.
Release Cycle¶
Minor versions are released as needed, based on whether there are significant new features or major architectural adjustments completed in the main branch, currently about once every six months. Patch versions are triggered based on the bug fix status of the branch, generally within a week after bug fixes are merged.
Patch Version Release Method¶
Currently, most of the work for Patch versions can be automated using the hack/release.sh script, with the main steps described as follows:
- Check the current branch build status (automated)
- Push the new tag image to Docker Hub (automated)
- Push the new tag code to GitHub (automated)
- Update the version information in the code (automated)
- Update the version information in the documentation repository (automated)
- Generate Release Note PR (automated)
- Merge Release Note (manual)
- Manually merge the GitHub action generated Release Note PR
- Modify the GitHub Release information (manual)
- Edit the newly created Release on the GitHub Release page, change the title to the corresponding version number (e.g.,
v1.12.12
), and copy the Release Note generated in the previous step into the Release details
Minor Version Release Method¶
Currently, the main tasks for Minor branches still need to be completed manually, with the main steps described as follows:
- Push a new release branch on GitHub, e.g.,
release-1.13
(manual) - Update the version information in the
VERSION
, dist/images/install.sh
, charts/kube-ovn/values.yaml
, and charts/kube-ovn/Chart.yaml
from the main branch to the next Minor version, e.g., v1.14.0
(manual) - Push the new tag image to Docker Hub (manual)
- Push the new tag code to GitHub in the release branch (manual)
- Create a new release branch in the documentation repository, e.g.,
v1.13
, and modify the version
and branch
information in the mkdocs.yml
file (manual) - Generate Release Note PR (automated)
- Merge Release Note (manual)
- Manually merge the GitHub action generated Release Note PR
- Modify the GitHub Release information (manual)
- Edit the newly created Release on the GitHub Release page, change the title to the corresponding version number (e.g.,
v1.13.0
), and copy the Release Note generated in the previous step into the Release details - Update the
VERSION
file in the release branch to the next Patch version, e.g., v1.13.1
微信群 Slack Twitter Support Meeting
Comments
Kube-OVN RoadMap¶
This document defines high level goals for Kube-OVN project. We welcome community contributors to discuss and update this Roadmap through Issues.
Network Datapath¶
Kube-OVN currently supports two network modes, Overlay and Underlay. We hope to improve the stability, performance, and compatibility with the ecosystem of these two network modes in Kubernetes.
- Improved Datapath network performance
- Keeping up with the latest network API features in the community
- Enhanced network monitoring and visualization capabilities
- Addition of automated test cases for various scenarios
VPC Network¶
VPC network is a key feature of Kube-OVN, many functions have been used in production environment, and we hope to increase the maturity of these functions and improve the user experiences.
- Standardize multiple gateway solutions and provide the best egress practice
- Provide more VPC internal basic network capabilities and solutions, such as DNS, DHCP, LoadBalancer, etc.
- Simplify VPC operation complexity and provide a more comprehensive CLI
- Supplement automated test cases for various scenarios
User Experience¶
Improve the user experience of Kubernetes cni, making container networking simpler, more reliable, and efficient.
- Helm/Operator to automate daily operations
- More organized metrics and grafana dashboard
- Troubleshooting tools that can automatically find known issues
- Integrated with other projects like kubeaz, kubekey, sealos etc.
微信群 Slack Twitter Support Meeting
Comments
Kube-OVN RoadMap¶
This document defines high level goals for Kube-OVN project. We welcome community contributors to discuss and update this Roadmap through Issues.
Network Datapath¶
Kube-OVN currently supports two network modes, Overlay and Underlay. We hope to improve the stability, performance, and compatibility with the ecosystem of these two network modes in Kubernetes.
- Improved Datapath network performance
- Keeping up with the latest network API features in the community
- Enhanced network monitoring and visualization capabilities
- Addition of automated test cases for various scenarios
VPC Network¶
VPC network is a key feature of Kube-OVN, many functions have been used in production environment, and we hope to increase the maturity of these functions and improve the user experiences.
- Standardize multiple gateway solutions and provide the best egress practice
- Provide more VPC internal basic network capabilities and solutions, such as DNS, DHCP, LoadBalancer, etc.
- Simplify VPC operation complexity and provide a more comprehensive CLI
- Supplement automated test cases for various scenarios
User Experience¶
Improve the user experience of Kubernetes cni, making container networking simpler, more reliable, and efficient.
- Helm/Operator to automate daily operations
- More organized metrics and grafana dashboard
- Troubleshooting tools that can automatically find known issues
- Integrated with other projects like kubeaz, kubekey, sealos etc.
微信群 Slack Twitter Support Meeting
Comments
One-Click Installation¶
Kube-OVN provides a one-click installation script to help you quickly install a highly available, production-ready Kube-OVN container network with Overlay networking by default.
Helm Chart installation is supported since Kube-OVN v1.12.0, and the default deployment is Overlay networking.
If you need Underlay/Vlan networking as the default container network,please read Underlay Installation
Before installation please read Prerequisites first to make sure the environment is ready.
Script Installation¶
Download the installation script¶
We recommend using the stable release version for production environments, please use the following command to download:
wget https://raw.githubusercontent.com/kubeovn/kube-ovn/release-1.12/dist/images/install.sh
If you are interested in the latest features of the master branch, please use the following command to download:
wget https://raw.githubusercontent.com/kubeovn/kube-ovn/master/dist/images/install.sh
Modify Configuration Options¶
Open the script using the editor and change the following variables to the expected:
REGISTRY="kubeovn" # Image Repo
-VERSION="v1.12.29" # Image Tag
+VERSION="v1.12.30" # Image Tag
POD_CIDR="10.16.0.0/16" # Default subnet CIDR don't overlay with SVC/NODE/JOIN CIDR
SVC_CIDR="10.96.0.0/12" # Be consistent with apiserver's service-cluster-ip-range
JOIN_CIDR="100.64.0.0/16" # Pod/Host communication Subnet CIDR, don't overlay with SVC/NODE/POD CIDR
diff --git a/v1.12.x/guide/loadbalancer-service/index.html b/v1.12.x/guide/loadbalancer-service/index.html
index b2e1d57e9..ac40f959e 100644
--- a/v1.12.x/guide/loadbalancer-service/index.html
+++ b/v1.12.x/guide/loadbalancer-service/index.html
@@ -249,7 +249,7 @@
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 MASQUERADE all -- * * 0.0.0.0/0 10.109.201.193
-
微信群 Slack Twitter Support Meeting
评论
调整日志等级¶
打开 kube-ovn.yaml
,在服务启动脚本的参数列表中设置 log 等级,比如:
vi kube-ovn.yaml
# ...
- name: kube-ovn-controller
- image: "docker.io/kubeovn/kube-ovn:v1.12.29"
+ image: "docker.io/kubeovn/kube-ovn:v1.12.30"
imagePullPolicy: IfNotPresent
args:
- /kube-ovn/start-controller.sh
diff --git a/v1.12.x/ops/from-calico/index.html b/v1.12.x/ops/from-calico/index.html
index 7ac5577c3..5b2fd0e48 100644
--- a/v1.12.x/ops/from-calico/index.html
+++ b/v1.12.x/ops/from-calico/index.html
@@ -22,7 +22,7 @@
done
done
按需修改以下配置:
REGISTRY="kubeovn" # 镜像仓库地址
-VERSION="v1.12.29" # 镜像版本/Tag
+VERSION="v1.12.30" # 镜像版本/Tag
POD_CIDR="10.16.0.0/16" # 默认子网 CIDR 不要和 SVC/NODE/JOIN CIDR 重叠
SVC_CIDR="10.96.0.0/12" # 需要和 apiserver 的 service-cluster-ip-range 保持一致
JOIN_CIDR="100.64.0.0/16" # Pod 和主机通信网络 CIDR,不要和 SVC/NODE/POD CIDR 重叠
diff --git a/v1.12.x/ops/kubectl-ko/index.html b/v1.12.x/ops/kubectl-ko/index.html
index e3c0f7435..304057abf 100644
--- a/v1.12.x/ops/kubectl-ko/index.html
+++ b/v1.12.x/ops/kubectl-ko/index.html
@@ -474,7 +474,7 @@
I0603 10:35:04.349404 17619 pinger.go:19]
-------------------------------------------------------------------------------
Kube-OVN:
- Version: v1.12.29
+ Version: v1.12.30
Build: 2022-04-24_08:02:50
Commit: git-73f9d15
Go Version: go1.17.8
diff --git a/v1.12.x/ops/recover-db/index.html b/v1.12.x/ops/recover-db/index.html
index e5ad280b1..3bf2f33c3 100644
--- a/v1.12.x/ops/recover-db/index.html
+++ b/v1.12.x/ops/recover-db/index.html
@@ -44,7 +44,7 @@
登录异常节点,删除对应的数据库文件:
mv /etc/origin/ovn/ovnnb_db.db /tmp
删除对应节点的 ovn-central
Pod,等待集群自动恢复:
kubectl delete pod -n kube-system ovn-central-xxxx
集群不能正常工作下的恢复¶
若集群多数节点受损无法选举出 leader,请参照下面的步骤进行恢复。
停止 ovn-central¶
记录当前 ovn-central
副本数量,并停止 ovn-central
避免新的数据库变更影响恢复:
kubectl scale deployment -n kube-system ovn-central --replicas=0
-
选择备份¶
由于多数节点受损,需要从某个数据库文件进行恢复重建集群。如果之前备份过数据库 可使用之前的备份文件进行恢复。如果没有进行过备份可以使用下面的步骤从已有的数据库文件 中生成一个备份。
由于默认文件夹下的数据库文件为集群格式数据库文件,包含当前集群的信息,无法直接 用该文件重建数据库,需要使用 ovsdb-tool cluster-to-standalone
进行格式转换。
选择 ovn-central
环境变量 NODE_IPS
中排第一的节点恢复数据库文件, 如果第一个节点数据库文件已损坏,从其他机器 /etc/origin/ovn
下复制文件到第一台机器 , 执行下列命令生成数据库文件备份。
docker run -it -v /etc/origin/ovn:/etc/ovn kubeovn/kube-ovn:v1.12.29 bash
+
选择备份¶
由于多数节点受损,需要从某个数据库文件进行恢复重建集群。如果之前备份过数据库 可使用之前的备份文件进行恢复。如果没有进行过备份可以使用下面的步骤从已有的数据库文件 中生成一个备份。
由于默认文件夹下的数据库文件为集群格式数据库文件,包含当前集群的信息,无法直接 用该文件重建数据库,需要使用 ovsdb-tool cluster-to-standalone
进行格式转换。
选择 ovn-central
环境变量 NODE_IPS
中排第一的节点恢复数据库文件, 如果第一个节点数据库文件已损坏,从其他机器 /etc/origin/ovn
下复制文件到第一台机器 , 执行下列命令生成数据库文件备份。
docker run -it -v /etc/origin/ovn:/etc/ovn kubeovn/kube-ovn:v1.12.30 bash
cd /etc/ovn/
ovsdb-tool cluster-to-standalone ovnnb_db_standalone.db ovnnb_db.db
ovsdb-tool cluster-to-standalone ovnsb_db_standalone.db ovnsb_db.db
diff --git a/v1.12.x/reference/annotations/index.html b/v1.12.x/reference/annotations/index.html
index e06dba7c4..0404e7ce8 100644
--- a/v1.12.x/reference/annotations/index.html
+++ b/v1.12.x/reference/annotations/index.html
@@ -6,7 +6,7 @@
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
- Annotation 使用说明¶
Kube-OVN 使用了大量的 Pod 和 Node Annotation 进行功能设置和信息传递,用户可以通过本文档了解各个 Annotation 的使用,方便问题排查和信息获取。
注意:部分 Annotation 可能会随着代码调整而进行变化。
Pod Annotation¶
Key Value Description ovn.kubernetes.io/allocated true
or false
Pod 主网卡是否已被分配地址 ovn.kubernetes.io/routed true
or false
Pod 主网卡在 OVN 内的路由是否设置完成 ovn.kubernetes.io/mac_address String Pod 主网卡所分配到的 Mac 地址,创建 Pod 时可通过该 Annotation 设置固定 Mac 地址 ovn.kubernetes.io/ip_address String Pod 主网卡所分配到的 IP 地址,创建 Pod 时可通过该 Annotation 设置固定 IP 地址 ovn.kubernetes.io/cidr String Pod 主网卡所属子网的 CIDR ovn.kubernetes.io/gateway String Pod 主网卡所属子网的 Gateway 地址 ovn.kubernetes.io/ip_pool IP 列表,逗号间隔 Pod 主网卡地址将从列表中选择,适用于 Workload 固定 IP 场景 ovn.kubernetes.io/bgp true
, cluster
, local
是否对外通过 BGP 发布 Pod 地址 ovn.kubernetes.io/snat String Pod 访问集群外使用的 SNAT 地址 ovn.kubernetes.io/eip String Pod 访问集群外部和被集群外部访问所使用的 EIP 地址 ovn.kubernetes.io/vip String Pod 主网卡使用的预留 VIP,可通过该 Annotation 使用预先创建的 VIP 资源 ovn.kubernetes.io/virtualmachine String Pod 主网卡所属的 VirtualMachineInstance ovn.kubernetes.io/logical_router String Pod 主网卡所属的 VPC ovn.kubernetes.io/layer2_forward true
or false
Pod 主网卡在 OVN LSP 中是否增加 unknown
地址 ovn.kubernetes.io/port_security true
or false
Pod 主网卡对应端口是否开启 Port Security ovn.kubernetes.io/logical_switch String Pod 主网卡所属的 Subnet ovn.kubernetes.io/vlan_id Int Pod 主网卡所属 Subnet 的 Vlan ID ovn.kubernetes.io/ingress_rate Int Pod 主网卡流入方向限速,单位为 Mbits/s ovn.kubernetes.io/egress_rate Int Pod 主网卡流出方向限速,单位为 Mbits/s ovn.kubernetes.io/security_groups String 列表,使用逗号分隔 Pod 主网卡所属的 Security Group ovn.kubernetes.io/allow_live_migration true
or false
Pod 主网卡是否允许 live migration,用于 kubevirt 场景 ovn.kubernetes.io/default_route true
or false
是否将主网卡设置为默认路由网卡 ovn.kubernetes.io/provider_network String Pod 主网卡所属的 ProviderNetwork ovn.kubernetes.io/mirror true
or false
Pod 主网卡是否做流量镜像 ovn.kubernetes.io/logical_switch String Pod 主网卡所属 Subnet ovn.kubernetes.io/latency Int Pod 主网卡注入的延迟,单位为 ms ovn.kubernetes.io/limit Int Pod 主网卡 qdisc 队列可容纳的最大数据包数 ovn.kubernetes.io/loss Float Pod 主网卡报文丢包概率 ovn.kubernetes.io/jitter Int Pod 主网卡注入抖动延迟,单位为 ms
Node Annotation¶
Key Value Description ovn.kubernetes.io/allocated true
or false
节点的 ovn0
网卡是否已被分配 join
子网地址 ovn.kubernetes.io/mac_address String Node ovn0
网卡分配到的 Mac 地址 ovn.kubernetes.io/ip_address String Node ovn0
网卡所分配到的 IP 地址 ovn.kubernetes.io/cidr String Node ovn0
网卡所属 join
子网的 CIDR ovn.kubernetes.io/gateway String Node ovn0
网卡所属 join
子网的 Gateway 地址 ovn.kubernetes.io/chassis String Node 在 OVN-SouthBoundDB 中的 Chassis ID ovn.kubernetes.io/port_name String Node ovn0
网卡在 OVN-NorthboundDB 中 LSP 的名称 ovn.kubernetes.io/logical_switch String Node ovn0
网卡所属 Subnet ovn.kubernetes.io/tunnel_interface String 隧道封装使用的网卡
Namespace Annotation¶
Key Value Description ovn.kubernetes.io/cidr CIDR 列表,逗号分隔 该 Namespace 所绑定子网的 CIDR ovn.kubernetes.io/exclude_ips excludeIPs 列表,分号分割 该 Namespace 所绑定子网的 excludeIPs
Subnet Annotation¶
Key Value Description ovn.kubernetes.io/bgp true
, cluster
, local
是否对外通过 BGP 发布子网地址
Service Annotation¶
Key Value Description ovn.kubernetes.io/bgp true
or false
是否对外通过 BGP 发布 Service 地址 ovn.kubernetes.io/switch_lb_vip String Service 在 Kube-OVN 中额外分配的 VIP 地址 ovn.kubernetes.io/vpc String Service 所属的 VPC
Networkpolicy Annotation¶
Key Value Description ovn.kubernetes.io/enable_log true
or false
是否开启 NetworkPolicy 日志
微信群 Slack Twitter Support Meeting
评论
Annotation 使用说明¶
Kube-OVN 使用了大量的 Pod 和 Node Annotation 进行功能设置和信息传递,用户可以通过本文档了解各个 Annotation 的使用,方便问题排查和信息获取。
注意:部分 Annotation 可能会随着代码调整而进行变化。
Pod Annotation¶
Key Value Description ovn.kubernetes.io/allocated true
or false
Pod 主网卡是否已被分配地址 ovn.kubernetes.io/routed true
or false
Pod 主网卡在 OVN 内的路由是否设置完成 ovn.kubernetes.io/mac_address String Pod 主网卡所分配到的 Mac 地址,创建 Pod 时可通过该 Annotation 设置固定 Mac 地址 ovn.kubernetes.io/ip_address String Pod 主网卡所分配到的 IP 地址,创建 Pod 时可通过该 Annotation 设置固定 IP 地址 ovn.kubernetes.io/cidr String Pod 主网卡所属子网的 CIDR ovn.kubernetes.io/gateway String Pod 主网卡所属子网的 Gateway 地址 ovn.kubernetes.io/ip_pool IP 列表,逗号间隔 Pod 主网卡地址将从列表中选择,适用于 Workload 固定 IP 场景 ovn.kubernetes.io/bgp true
, cluster
, local
是否对外通过 BGP 发布 Pod 地址 ovn.kubernetes.io/snat String Pod 访问集群外使用的 SNAT 地址 ovn.kubernetes.io/eip String Pod 访问集群外部和被集群外部访问所使用的 EIP 地址 ovn.kubernetes.io/vip String Pod 主网卡使用的预留 VIP,可通过该 Annotation 使用预先创建的 VIP 资源 ovn.kubernetes.io/virtualmachine String Pod 主网卡所属的 VirtualMachineInstance ovn.kubernetes.io/logical_router String Pod 主网卡所属的 VPC ovn.kubernetes.io/layer2_forward true
or false
Pod 主网卡在 OVN LSP 中是否增加 unknown
地址 ovn.kubernetes.io/port_security true
or false
Pod 主网卡对应端口是否开启 Port Security ovn.kubernetes.io/logical_switch String Pod 主网卡所属的 Subnet ovn.kubernetes.io/vlan_id Int Pod 主网卡所属 Subnet 的 Vlan ID ovn.kubernetes.io/ingress_rate Int Pod 主网卡流入方向限速,单位为 Mbits/s ovn.kubernetes.io/egress_rate Int Pod 主网卡流出方向限速,单位为 Mbits/s ovn.kubernetes.io/security_groups String 列表,使用逗号分隔 Pod 主网卡所属的 Security Group ovn.kubernetes.io/allow_live_migration true
or false
Pod 主网卡是否允许 live migration,用于 kubevirt 场景 ovn.kubernetes.io/default_route true
or false
是否将主网卡设置为默认路由网卡 ovn.kubernetes.io/provider_network String Pod 主网卡所属的 ProviderNetwork ovn.kubernetes.io/mirror true
or false
Pod 主网卡是否做流量镜像 ovn.kubernetes.io/logical_switch String Pod 主网卡所属 Subnet ovn.kubernetes.io/latency Int Pod 主网卡注入的延迟,单位为 ms ovn.kubernetes.io/limit Int Pod 主网卡 qdisc 队列可容纳的最大数据包数 ovn.kubernetes.io/loss Float Pod 主网卡报文丢包概率 ovn.kubernetes.io/jitter Int Pod 主网卡注入抖动延迟,单位为 ms
Node Annotation¶
Key Value Description ovn.kubernetes.io/allocated true
or false
节点的 ovn0
网卡是否已被分配 join
子网地址 ovn.kubernetes.io/mac_address String Node ovn0
网卡分配到的 Mac 地址 ovn.kubernetes.io/ip_address String Node ovn0
网卡所分配到的 IP 地址 ovn.kubernetes.io/cidr String Node ovn0
网卡所属 join
子网的 CIDR ovn.kubernetes.io/gateway String Node ovn0
网卡所属 join
子网的 Gateway 地址 ovn.kubernetes.io/chassis String Node 在 OVN-SouthBoundDB 中的 Chassis ID ovn.kubernetes.io/port_name String Node ovn0
网卡在 OVN-NorthboundDB 中 LSP 的名称 ovn.kubernetes.io/logical_switch String Node ovn0
网卡所属 Subnet ovn.kubernetes.io/tunnel_interface String 隧道封装使用的网卡
Namespace Annotation¶
Key Value Description ovn.kubernetes.io/cidr CIDR 列表,逗号分隔 该 Namespace 所绑定子网的 CIDR ovn.kubernetes.io/exclude_ips excludeIPs 列表,分号分割 该 Namespace 所绑定子网的 excludeIPs
Subnet Annotation¶
Key Value Description ovn.kubernetes.io/bgp true
, cluster
, local
是否对外通过 BGP 发布子网地址
Service Annotation¶
Key Value Description ovn.kubernetes.io/bgp true
or false
是否对外通过 BGP 发布 Service 地址 ovn.kubernetes.io/switch_lb_vip String Service 在 Kube-OVN 中额外分配的 VIP 地址 ovn.kubernetes.io/vpc String Service 所属的 VPC
Networkpolicy Annotation¶
Key Value Description ovn.kubernetes.io/enable_log true
or false
是否开启 NetworkPolicy 日志
微信群 Slack Twitter Support Meeting
评论
总体架构¶
本文档将介绍 Kube-OVN 的总体架构,和各个组件的功能以及其之间的交互。
总体来看,Kube-OVN 作为 Kubernetes 和 OVN 之间的一个桥梁,将成熟的 SDN 和云原生相结合。 这意味着 Kube-OVN 不仅通过 OVN 实现了 Kubernetes 下的网络规范,例如 CNI,Service 和 Networkpolicy,还将大量的 SDN 领域能力带入云原生,例如逻辑交换机,逻辑路由器,VPC,网关,QoS,ACL 和流量镜像。
同时 Kube-OVN 还保持了良好的开放性可以和诸多技术方案集成,例如 Cilium,Submariner,Prometheus,KubeVirt 等等。
组件介绍¶
Kube-OVN 的组件可以大致分为三类:
- 上游 OVN/OVS 组件。
- 核心控制器和 Agent。
- 监控,运维工具和扩展组件。
上游 OVN/OVS 组件¶
该类型组件来自 OVN/OVS 社区,并针对 Kube-OVN 的使用场景做了特定修改。OVN/OVS 本身是一套成熟的管理虚机和容器的 SDN 系统,我们强烈建议 对 Kube-OVN 实现感兴趣的用户先去读一下 ovn-architecture(7) 来了解什么是 OVN 以及 如何和它进行集成。Kube-OVN 使用 OVN 的北向接口创建和调整虚拟网络,并将其中的网络概念映射到 Kubernetes 之内。
所有 OVN/OVS 相关组件都已打包成对应镜像,并可在 Kubernetes 中运行。
ovn-central¶
ovn-central
Deployment 运行 OVN 的管理平面组件,包括 ovn-nb
, ovn-sb
, 和 ovn-northd
。
ovn-nb
:保存虚拟网络配置,并提供 API 进行虚拟网络管理。kube-ovn-controller
将会主要和 ovn-nb
进行交互配置虚拟网络。 ovn-sb
:保存从 ovn-nb
的逻辑网络生成的逻辑流表,以及各个节点的实际物理网络状态。 ovn-northd
:将 ovn-nb
的虚拟网络翻译成 ovn-sb
中的逻辑流表。
多个 ovn-central
实例会通过 Raft 协议同步数据保证高可用。
ovs-ovn¶
ovs-ovn
以 DaemonSet 形式运行在每个节点,在 Pod 内运行了 openvswitch
, ovsdb
, 和 ovn-controller
。这些组件作为 ovn-central
的 Agent 将逻辑流表翻译成真实的网络配置。
核心控制器和 Agent¶
该部分为 Kube-OVN 的核心组件,作为 OVN 和 Kubernetes 之间的一个桥梁,将两个系统打通并将网络概念进行相互转换。 大部分的核心功能都在该部分组件中实现。
kube-ovn-controller¶
该组件为一个 Deployment 执行所有 Kubernetes 内资源到 OVN 资源的翻译工作,其作用相当于整个 Kube-OVN 系统的控制平面。 kube-ovn-controller
监听了所有和网络功能相关资源的事件,并根据资源变化情况更新 OVN 内的逻辑网络。主要监听的资源包括: Pod,Service,Endpoint,Node,NetworkPolicy,VPC,Subnet,Vlan,ProviderNetwork。
以 Pod 事件为例, kube-ovn-controller
监听到 Pod 创建事件后,通过内置的内存 IPAM 功能分配地址,并调用 ovn-central
创建 逻辑端口,静态路由和可能的 ACL 规则。接下来 kube-ovn-controller
将分配到的地址,和子网信息例如 CIDR,网关,路由等信息写会到 Pod 的 annotation 中。该 annotation 后续会被 kube-ovn-cni
读取用来配置本地网络。
kube-ovn-cni¶
该组件为一个 DaemonSet 运行在每个节点上,实现 CNI 接口,并操作本地的 OVS 配置单机网络。
该 DaemonSet 会复制 kube-ovn
二进制文件到每台机器,作为 kubelet
和 kube-ovn-cni
之间的交互工具,将相应 CNI 请求 发送给 kube-ovn-cni
执行。该二进制文件默认会被复制到 /opt/cni/bin
目录下。
kube-ovn-cni
会配置具体的网络来执行相应流量操作,主要工作包括:
- 配置
ovn-controller
和 vswitchd
。 - 处理 CNI add/del 请求:
- 创建删除 veth 并和 OVS 端口绑定。
- 配置 OVS 端口信息。
- 更新宿主机的 iptables/ipset/route 等规则。
- 动态更新容器 QoS.
- 创建并配置
ovn0
网卡联通容器网络和主机网络。 - 配置主机网卡来实现 Vlan/Underlay/EIP 等功能。
- 动态配置集群互联网关。
监控,运维工具和扩展组件¶
该部分组件主要提供监控,诊断,运维操作以及和外部进行对接,对 Kube-OVN 的核心网络能力进行扩展,并简化日常运维操作。
kube-ovn-speaker¶
该组件为一个 DaemonSet 运行在特定标签的节点上,对外发布容器网络的路由,使得外部可以直接通过 Pod IP 访问容器。
更多相关使用方式请参考 BGP 支持。
kube-ovn-pinger¶
该组件为一个 DaemonSet 运行在每个节点上收集 OVS 运行信息,节点网络质量,网络延迟等信息,收集的监控指标可参考 Kube-OVN 监控指标。
kube-ovn-monitor¶
该组件为一个 Deployment 收集 OVN 的运行信息,收集的监控指标可参考 Kube-OVN 监控指标。
kubectl-ko¶
该组件为 kubectl 插件,可以快速运行常见运维操作,更多使用请参考 kubectl 插件使用。
微信群 Slack Twitter Support Meeting
评论
总体架构¶
本文档将介绍 Kube-OVN 的总体架构,和各个组件的功能以及其之间的交互。
总体来看,Kube-OVN 作为 Kubernetes 和 OVN 之间的一个桥梁,将成熟的 SDN 和云原生相结合。 这意味着 Kube-OVN 不仅通过 OVN 实现了 Kubernetes 下的网络规范,例如 CNI,Service 和 Networkpolicy,还将大量的 SDN 领域能力带入云原生,例如逻辑交换机,逻辑路由器,VPC,网关,QoS,ACL 和流量镜像。
同时 Kube-OVN 还保持了良好的开放性可以和诸多技术方案集成,例如 Cilium,Submariner,Prometheus,KubeVirt 等等。
组件介绍¶
Kube-OVN 的组件可以大致分为三类:
- 上游 OVN/OVS 组件。
- 核心控制器和 Agent。
- 监控,运维工具和扩展组件。
上游 OVN/OVS 组件¶
该类型组件来自 OVN/OVS 社区,并针对 Kube-OVN 的使用场景做了特定修改。OVN/OVS 本身是一套成熟的管理虚机和容器的 SDN 系统,我们强烈建议 对 Kube-OVN 实现感兴趣的用户先去读一下 ovn-architecture(7) 来了解什么是 OVN 以及 如何和它进行集成。Kube-OVN 使用 OVN 的北向接口创建和调整虚拟网络,并将其中的网络概念映射到 Kubernetes 之内。
所有 OVN/OVS 相关组件都已打包成对应镜像,并可在 Kubernetes 中运行。
ovn-central¶
ovn-central
Deployment 运行 OVN 的管理平面组件,包括 ovn-nb
, ovn-sb
, 和 ovn-northd
。
ovn-nb
:保存虚拟网络配置,并提供 API 进行虚拟网络管理。kube-ovn-controller
将会主要和 ovn-nb
进行交互配置虚拟网络。 ovn-sb
:保存从 ovn-nb
的逻辑网络生成的逻辑流表,以及各个节点的实际物理网络状态。 ovn-northd
:将 ovn-nb
的虚拟网络翻译成 ovn-sb
中的逻辑流表。
多个 ovn-central
实例会通过 Raft 协议同步数据保证高可用。
ovs-ovn¶
ovs-ovn
以 DaemonSet 形式运行在每个节点,在 Pod 内运行了 openvswitch
, ovsdb
, 和 ovn-controller
。这些组件作为 ovn-central
的 Agent 将逻辑流表翻译成真实的网络配置。
核心控制器和 Agent¶
该部分为 Kube-OVN 的核心组件,作为 OVN 和 Kubernetes 之间的一个桥梁,将两个系统打通并将网络概念进行相互转换。 大部分的核心功能都在该部分组件中实现。
kube-ovn-controller¶
该组件为一个 Deployment 执行所有 Kubernetes 内资源到 OVN 资源的翻译工作,其作用相当于整个 Kube-OVN 系统的控制平面。 kube-ovn-controller
监听了所有和网络功能相关资源的事件,并根据资源变化情况更新 OVN 内的逻辑网络。主要监听的资源包括: Pod,Service,Endpoint,Node,NetworkPolicy,VPC,Subnet,Vlan,ProviderNetwork。
以 Pod 事件为例, kube-ovn-controller
监听到 Pod 创建事件后,通过内置的内存 IPAM 功能分配地址,并调用 ovn-central
创建 逻辑端口,静态路由和可能的 ACL 规则。接下来 kube-ovn-controller
将分配到的地址,和子网信息例如 CIDR,网关,路由等信息写会到 Pod 的 annotation 中。该 annotation 后续会被 kube-ovn-cni
读取用来配置本地网络。
kube-ovn-cni¶
该组件为一个 DaemonSet 运行在每个节点上,实现 CNI 接口,并操作本地的 OVS 配置单机网络。
该 DaemonSet 会复制 kube-ovn
二进制文件到每台机器,作为 kubelet
和 kube-ovn-cni
之间的交互工具,将相应 CNI 请求 发送给 kube-ovn-cni
执行。该二进制文件默认会被复制到 /opt/cni/bin
目录下。
kube-ovn-cni
会配置具体的网络来执行相应流量操作,主要工作包括:
- 配置
ovn-controller
和 vswitchd
。 - 处理 CNI add/del 请求:
- 创建删除 veth 并和 OVS 端口绑定。
- 配置 OVS 端口信息。
- 更新宿主机的 iptables/ipset/route 等规则。
- 动态更新容器 QoS.
- 创建并配置
ovn0
网卡联通容器网络和主机网络。 - 配置主机网卡来实现 Vlan/Underlay/EIP 等功能。
- 动态配置集群互联网关。
监控,运维工具和扩展组件¶
该部分组件主要提供监控,诊断,运维操作以及和外部进行对接,对 Kube-OVN 的核心网络能力进行扩展,并简化日常运维操作。
kube-ovn-speaker¶
该组件为一个 DaemonSet 运行在特定标签的节点上,对外发布容器网络的路由,使得外部可以直接通过 Pod IP 访问容器。
更多相关使用方式请参考 BGP 支持。
kube-ovn-pinger¶
该组件为一个 DaemonSet 运行在每个节点上收集 OVS 运行信息,节点网络质量,网络延迟等信息,收集的监控指标可参考 Kube-OVN 监控指标。
kube-ovn-monitor¶
该组件为一个 Deployment 收集 OVN 的运行信息,收集的监控指标可参考 Kube-OVN 监控指标。
kubectl-ko¶
该组件为 kubectl 插件,可以快速运行常见运维操作,更多使用请参考 kubectl 插件使用。
微信群 Slack Twitter Support Meeting
评论
功能成熟度¶
在 Kube-OVN 中根据功能使用度,文档完善程度和测试覆盖程度将功能成熟度分为 Alpha,Beta 和 GA 三个阶段。
成熟度定义¶
对于 Alpha 功能:
- 该功能没有完整的文档和完善的测试覆盖。
- 该功能未来可能会发生变化甚至整体移除。
- 该功能 API 不保证稳定,可能会被移除。
- 该功能的社区支持优先级较低,且无法保证长期支持。
- 由于功能稳定性和长期支持无法保证,可以进行测试验证,但不推荐生产使用。
对于 Beta 功能:
- 该功能有部分文档和测试,但是不保证完整的覆盖。
- 该功能未来可能发生变化,升级可能会影响网络,但不会被整体移除。
- 该功能 API 未来可能会发生变化,字段可能会进行调整,但不会整体移除。
- 该功能会得到社区的长期支持。
- 由于功能会得到长期支持,可以在非关键业务上进行使用,但是由于功能和 API 存在变化的可能,可能会在升级中出现中断,不推荐在关键生产业务上使用。
对于 GA 功能:
- 该功能有完整的文档和测试覆盖。
- 该功能会保持稳定,升级会保证平滑。
- 该功能 API 不会发生破坏性变化。
- 该功能会得到社区高优先级支持,并会保证长期支持。
成熟度列表¶
本列表统计从 v1.8 版本中包含的功能对应成熟度。
功能 默认开启 状态 开始(Since) 结束(Until) Namespaced Subnet true GA 1.8 分布式网关 true GA 1.8 主从模式集中式网关 true GA 1.8 ECMP 模式集中式网关 false Beta 1.8 子网 ACL true Alpha 1.9 子网隔离 (未来会和子网 ACL 合并) true Beta 1.8 Underlay 子网 true GA 1.8 多网卡管理 true Beta 1.8 子网 DHCP false Alpha 1.10 子网设置外部网关 false Alpha 1.8 使用 OVN-IC 进行集群互联 false Beta 1.8 使用 Submariner 进行集群互联 false Alpha 1.9 子网 VIP 预留 true Alpha 1.10 创建自定义 VPC true Beta 1.8 自定义 VPC 浮动 IP/SNAT/DNAT true Alpha 1.10 自定义 VPC 静态路由 true Alpha 1.10 自定义 VPC 策略路由 true Alpha 1.10 自定义 VPC 安全组 true Alpha 1.10 容器最大带宽 QoS true GA 1.8 linux-netem QoS true Alpha 1.9 Prometheus 集成 false GA 1.8 Grafana 集成 false GA 1.8 双栈网络 false GA 1.8 默认 VPC EIP/SNAT false Beta 1.8 流量镜像 false GA 1.8 NetworkPolicy true Beta 1.8 Webhook false Alpha 1.10 性能调优 false Beta 1.8 Overlay 子网静态路由对外暴露 false Alpha 1.8 Overlay 子网 BGP 对外暴露 false Alpha 1.9 Cilium 集成 false Alpha 1.10 自定义 VPC 互联 false Alpha 1.10 Mellanox Offload false Alpha 1.8 芯启源 Offload false Alpha 1.10 Windows 支持 false Alpha 1.10 DPDK 支持 false Alpha 1.10 OpenStack 集成 false Alpha 1.9 单个 Pod 固定 IP/Mac true GA 1.8 Workload 固定 IP true GA 1.8 StatefulSet 固定 IP true GA 1.8 VM 固定 IP false Beta 1.9 默认 VPC Load Balancer 类型 Service false Alpha 1.11 自定义 VPC 内部负载均衡 false Alpha 1.11 自定义 VPC DNS false Alpha 1.11 Underlay 和 Overlay 互通 false Alpha 1.11
微信群 Slack Twitter Support Meeting
评论
功能成熟度¶
在 Kube-OVN 中根据功能使用度,文档完善程度和测试覆盖程度将功能成熟度分为 Alpha,Beta 和 GA 三个阶段。
成熟度定义¶
对于 Alpha 功能:
- 该功能没有完整的文档和完善的测试覆盖。
- 该功能未来可能会发生变化甚至整体移除。
- 该功能 API 不保证稳定,可能会被移除。
- 该功能的社区支持优先级较低,且无法保证长期支持。
- 由于功能稳定性和长期支持无法保证,可以进行测试验证,但不推荐生产使用。
对于 Beta 功能:
- 该功能有部分文档和测试,但是不保证完整的覆盖。
- 该功能未来可能发生变化,升级可能会影响网络,但不会被整体移除。
- 该功能 API 未来可能会发生变化,字段可能会进行调整,但不会整体移除。
- 该功能会得到社区的长期支持。
- 由于功能会得到长期支持,可以在非关键业务上进行使用,但是由于功能和 API 存在变化的可能,可能会在升级中出现中断,不推荐在关键生产业务上使用。
对于 GA 功能:
- 该功能有完整的文档和测试覆盖。
- 该功能会保持稳定,升级会保证平滑。
- 该功能 API 不会发生破坏性变化。
- 该功能会得到社区高优先级支持,并会保证长期支持。
成熟度列表¶
本列表统计从 v1.8 版本中包含的功能对应成熟度。
功能 默认开启 状态 开始(Since) 结束(Until) Namespaced Subnet true GA 1.8 分布式网关 true GA 1.8 主从模式集中式网关 true GA 1.8 ECMP 模式集中式网关 false Beta 1.8 子网 ACL true Alpha 1.9 子网隔离 (未来会和子网 ACL 合并) true Beta 1.8 Underlay 子网 true GA 1.8 多网卡管理 true Beta 1.8 子网 DHCP false Alpha 1.10 子网设置外部网关 false Alpha 1.8 使用 OVN-IC 进行集群互联 false Beta 1.8 使用 Submariner 进行集群互联 false Alpha 1.9 子网 VIP 预留 true Alpha 1.10 创建自定义 VPC true Beta 1.8 自定义 VPC 浮动 IP/SNAT/DNAT true Alpha 1.10 自定义 VPC 静态路由 true Alpha 1.10 自定义 VPC 策略路由 true Alpha 1.10 自定义 VPC 安全组 true Alpha 1.10 容器最大带宽 QoS true GA 1.8 linux-netem QoS true Alpha 1.9 Prometheus 集成 false GA 1.8 Grafana 集成 false GA 1.8 双栈网络 false GA 1.8 默认 VPC EIP/SNAT false Beta 1.8 流量镜像 false GA 1.8 NetworkPolicy true Beta 1.8 Webhook false Alpha 1.10 性能调优 false Beta 1.8 Overlay 子网静态路由对外暴露 false Alpha 1.8 Overlay 子网 BGP 对外暴露 false Alpha 1.9 Cilium 集成 false Alpha 1.10 自定义 VPC 互联 false Alpha 1.10 Mellanox Offload false Alpha 1.8 芯启源 Offload false Alpha 1.10 Windows 支持 false Alpha 1.10 DPDK 支持 false Alpha 1.10 OpenStack 集成 false Alpha 1.9 单个 Pod 固定 IP/Mac true GA 1.8 Workload 固定 IP true GA 1.8 StatefulSet 固定 IP true GA 1.8 VM 固定 IP false Beta 1.9 默认 VPC Load Balancer 类型 Service false Alpha 1.11 自定义 VPC 内部负载均衡 false Alpha 1.11 自定义 VPC DNS false Alpha 1.11 Underlay 和 Overlay 互通 false Alpha 1.11
微信群 Slack Twitter Support Meeting
评论
Kube-OVN 接口规范¶
基于 Kube-OVN v1.12.0 版本,整理了 Kube-OVN 支持的 CRD 资源列表,列出 CRD 定义各字段的取值类型和含义,以供参考。
通用的 Condition 定义¶
属性名称 类型 描述 type String 状态类型 status String 状态值,取值为 True
,False
或 Unknown
reason String 状态变化的原因 message String 状态变化的具体信息 lastUpdateTime Time 上次状态更新时间 lastTransitionTime Time 上次状态类型发生变化的时间
在各 CRD 的定义中,Status 中的 Condition 字段,都遵循上述格式,因此提前进行说明。
Subnet 定义¶
Subnet¶
属性名称 类型 描述 apiVersion String 标准 Kubernetes 版本信息字段,所有自定义资源该值均为 kubeovn.io/v1 kind String 标准 Kubernetes 资源类型字段,本资源所有实例该值均为 Subnet
metadata ObjectMeta 标准 Kubernetes 资源元数据信息 spec SubnetSpec Subnet 具体配置信息字段 status SubnetStatus Subnet 状态信息字段
SubnetSpec¶
属性名称 类型 描述 default Bool 该子网是否为默认子网 vpc String 子网所属 Vpc,默认为 ovn-cluster protocol String IP 协议,取值可以为 IPv4
,IPv6
或 Dual
namespaces []String 该子网所绑定的 namespace 列表 cidrBlock String 子网的网段范围,如 10.16.0.0/16 gateway String 子网网关地址,默认为该子网 CIDRBlock 下的第一个可用地址 excludeIps []String 该子网下不会被自动分配的地址范围 provider String 默认为 ovn。多网卡情况下可以配置取值为 NetworkAttachmentDefinition 的 .,Kube-OVN 将会使用这些信息找到对应的 Subnet 资源 gatewayType String Overlay 模式下的网关类型,取值可以为 distributed
或 centralized
gatewayNode String 当网关模式为 centralized 时的网关节点,可以为逗号分隔的多个节点 natOutgoing Bool 出网流量是否进行 NAT。该参数和 externalEgressGateway
参数不能同时设置。 externalEgressGateway String 外部网关地址。需要和子网网关节点在同一个二层可达域,该参数和 natOutgoing
参数不能同时设置 policyRoutingPriority Uint32 策略路由优先级。添加策略路由使用参数,控制流量经子网网关之后,转发到外部网关地址 policyRoutingTableID Uint32 使用的本地策略路由表的 TableID,每个子网均需不同以避免冲突 private Bool 标识该子网是否为私有子网,私有子网默认拒绝子网外的地址访问 allowSubnets []String 子网为私有子网的情况下,允许访问该子网地址的集合 vlan String 子网绑定的 Vlan 名称 vips []String 子网下 virtual 类型 lsp 的 virtual-ip 参数信息 logicalGateway Bool 是否启用逻辑网关 disableGatewayCheck Bool 创建 Pod 时是否跳过网关联通性检查 disableInterConnection Bool 控制是否开启子网跨集群互联 enableDHCP Bool 控制是否配置子网下 lsp 的 dhcp 配置选项 dhcpV4Options String 子网下 lsp dhcpv4_options 关联的 DHCP_Options 记录 dhcpV6Options String 子网下 lsp dhcpv6_options 关联的 DHCP_Options 记录 enableIPv6RA Bool 控制子网连接路由器的 lrp 端口,是否配置 ipv6_ra_configs 参数 ipv6RAConfigs String 子网连接路由器的 lrp 端口,ipv6_ra_configs 参数配置信息 acls []Acl 子网对应 logical-switch 关联的 acls 记录 u2oInterconnection Bool 是否开启 Overlay/Underlay 的互联模式 enableLb *Bool 控制子网对应的 logical-switch 是否关联 load-balancer 记录 enableEcmp Bool 集中式网关,是否开启 ECMP 路由
Acl¶
属性名称 类型 描述 direction String Acl 限制方向,取值为 from-lport
或者 to-lport
priority Int Acl 优先级,取值范围 0 到 32767 match String Acl 规则匹配表达式 action String Acl 规则动作,取值为 allow-related
, allow-stateless
, allow
, drop
, reject
其中一个
SubnetStatus¶
属性名称 类型 描述 conditions []SubnetCondition 子网状态变化信息,具体字段参考文档开头 Condition 定义 v4AvailableIPs Float64 子网现在可用的 IPv4 IP 地址数量 v4availableIPrange String 子网现在可用的 IPv4 地址范围 v4UsingIPs Float64 子网现在已用的 IPv4 IP 地址数量 v4usingIPrange String 子网现在已用的 IPv4 地址范围 v6AvailableIPs Float64 子网现在可用的 IPv6 IP 地址数量 v6availableIPrange String 子网现在可用的 IPv6 地址范围 v6UsingIPs Float64 子网现在已用的 IPv6 IP 地址数量 v6usingIPrange String 子网现在已用的 IPv6 地址范围 sctivateGateway String 集中式子网,主备模式下当前正在工作的网关节点 dhcpV4OptionsUUID String 子网下 lsp dhcpv4_options 关联的 DHCP_Options 记录标识 dhcpV6OptionsUUID String 子网下 lsp dhcpv6_options 关联的 DHCP_Options 记录标识 u2oInterconnectionIP String 开启 Overlay/Underlay 互联模式后,所占用的用于互联的 IP 地址
IP 定义¶
IP¶
属性名称 类型 描述 apiVersion String 标准 Kubernetes 版本信息字段,所有自定义资源该值均为 kubeovn.io/v1 kind String 标准 Kubernetes 资源类型字段,本资源所有实例该值均为 IP
metadata ObjectMeta 标准 Kubernetes 资源元数据信息 spec IPSpec IP 具体配置信息字段
IPSepc¶
属性名称 类型 描述 podName String 绑定 Pod 名称 namespace String 绑定 Pod 所在 Namespace 名称 subnet String IP 所属 Subnet attachSubnets []String 该主 IP 下其他附属子网名称(字段废弃不再使用) nodeName String 绑定 Pod 所在的节点名称 ipAddress String IP 地址,双栈情况下为 v4IP,v6IP
格式 v4IPAddress String IPv4 IP 地址 v6IPAddress String IPv6 IP 地址 attachIPs []String 该主 IP 下其他附属 IP 地址(字段废弃不再使用) macAddress String 绑定 Pod 的 Mac 地址 attachMacs []String 该主 IP 下其他附属 Mac 地址(字段废弃不再使用) containerID String 绑定 Pod 对应的 Container ID podType String 特殊工作负载 Pod,可为 StatefulSet
,VirtualMachine
或空
Underlay 配置¶
Vlan¶
属性名称 类型 描述 apiVersion String 标准 Kubernetes 版本信息字段,所有自定义资源该值均为 kubeovn.io/v1 kind String 标准 Kubernetes 资源类型字段,本资源所有实例该值均为 Vlan
metadata ObjectMeta 标准 Kubernetes 资源元数据信息 spec VlanSpec Vlan 具体配置信息字段 status VlanStatus Vlan 状态信息字段
VlanSpec¶
属性名称 类型 描述 id Int Vlan tag 号,取值范围为 0~4096 provider String Vlan 绑定的 ProviderNetwork 名称
VlanStatus¶
属性名称 类型 描述 subnets []String Vlan 绑定的子网列表 conditions []VlanCondition Vlan 状态变化信息,具体字段参考文档开头 Condition 定义
ProviderNetwork¶
属性名称 类型 描述 apiVersion String 标准 Kubernetes 版本信息字段,所有自定义资源该值均为 kubeovn.io/v1 kind String 标准 Kubernetes 资源类型字段,本资源所有实例该值均为 ProviderNetwork
metadata ObjectMeta 标准 Kubernetes 资源元数据信息 spec ProviderNetworkSpec ProviderNetwork 具体配置信息字段 status ProviderNetworkStatus ProviderNetwork 状态信息字段
ProviderNetworkSpec¶
属性名称 类型 描述 defaultInterface String 该桥接网络默认使用的网卡接口名称 customInterfaces []CustomInterface 该桥接网络特殊使用的网卡配置 excludeNodes []String 该桥接网络不会绑定的节点名称 exchangeLinkName Bool 是否交换桥接网卡和对应 OVS 网桥名称
CustomInterface¶
属性名称 类型 描述 interface String Underlay 使用网卡接口名称 nodes []String 使用自定义网卡接口的节点列表
ProviderNetworkStatus¶
属性名称 类型 描述 ready Bool 当前桥接网络是否进入就绪状态 readyNodes []String 桥接网络进入就绪状态的节点名称 notReadyNodes []String 桥接网络未进入就绪状态的节点名称 vlans []String 桥接网络绑定的 Vlan 名称 conditions []ProviderNetworkCondition ProviderNetwork 状态变化信息,具体字段参考文档开头 Condition 定义
Vpc 定义¶
Vpc¶
属性名称 类型 描述 apiVersion String 标准 Kubernetes 版本信息字段,所有自定义资源该值均为 kubeovn.io/v1 kind String 标准 Kubernetes 资源类型字段,本资源所有实例该值均为 Vpc
metadata ObjectMeta 标准 Kubernetes 资源元数据信息 spec VpcSpec Vpc 具体配置信息字段 status VpcStatus Vpc 状态信息字段
VpcSpec¶
属性名称 类型 描述 namespaces []String Vpc 绑定的命名空间列表 staticRoutes []*StaticRoute Vpc 下配置的静态路由信息 policyRoutes []*PolicyRoute Vpc 下配置的策略路由信息 vpcPeerings []*VpcPeering Vpc 互联信息 enableExternal Bool Vpc 是否连接到外部交换机
StaticRoute¶
属性名称 类型 描述 policy String 路由策略,取值为 policySrc
或者 policyDst
cidr String 路由 Cidr 网段 nextHopIP String 路由下一跳信息
PolicyRoute¶
属性名称 类型 描述 priority Int32 策略路由优先级 match String 策略路由匹配条件 action String 策略路由动作,取值为 allow
、drop
或者 reroute
nextHopIP String 策略路由下一跳信息,ECMP 路由情况下下一跳地址使用逗号隔开
VpcPeering¶
属性名称 类型 描述 remoteVpc String Vpc 互联对端 Vpc 名称 localConnectIP String Vpc 互联本端 IP 地址
VpcStatus¶
属性名称 类型 描述 conditions []VpcCondition Vpc 状态变化信息,具体字段参考文档开头 Condition 定义 standby Bool 标识 Vpc 是否创建完成,Vpc 下的 Subnet 需要等 Vpc 创建完成转换再继续处理 default Bool 是否是默认 Vpc defaultLogicalSwitch String Vpc 下的默认子网 router String Vpc 对应的 logical-router 名称 tcpLoadBalancer String Vpc 下的 TCP LB 信息 udpLoadBalancer String Vpc 下的 UDP LB 信息 tcpSessionLoadBalancer String Vpc 下的 TCP 会话保持 LB 信息 udpSessionLoadBalancer String Vpc 下的 UDP 会话保持 LB 信息 subnets []String Vpc 下的子网列表 vpcPeerings []String Vpc 互联的对端 Vpc 列表 enableExternal Bool Vpc 是否连接到外部交换机
VpcNatGateway¶
属性名称 类型 描述 apiVersion String 标准 Kubernetes 版本信息字段,所有自定义资源该值均为 kubeovn.io/v1 kind String 标准 Kubernetes 资源类型字段,本资源所有实例该值均为 VpcNatGateway
metadata ObjectMeta 标准 Kubernetes 资源元数据信息 spec VpcNatSpec Vpc 网关具体配置信息字段
VpcNatSpec¶
属性名称 类型 描述 vpc String Vpc 网关 Pod 所在的 Vpc 名称 subnet String Vpc 网关 Pod 所属的子网名称 lanIp String Vpc 网关 Pod 指定分配的 IP 地址 selector []String 标准 Kubernetes Selector 匹配信息 tolerations []VpcNatToleration 标准 Kubernetes 容忍信息
VpcNatToleration¶
属性名称 类型 描述 key String 容忍污点的 key 信息 operator String 取值为 Exists
或者 Equal
value String 容忍污点的 value 信息 effect String 容忍污点的作用效果,取值为 NoExecute
、NoSchedule
或者 PreferNoSchedule
tolerationSeconds Int64 添加污点后,Pod 还能继续在节点上运行的时间
以上容忍字段的含义,可以参考 Kubernetes 官方文档 污点和容忍度。
IptablesEIP¶
属性名称 类型 描述 apiVersion String 标准 Kubernetes 版本信息字段,所有自定义资源该值均为 kubeovn.io/v1 kind String 标准 Kubernetes 资源类型字段,本资源所有实例该值均为 IptablesEIP
metadata ObjectMeta 标准 Kubernetes 资源元数据信息 spec IptablesEipSpec Vpc 网关使用的 IptablesEIP 具体配置信息字段 status IptablesEipStatus Vpc 网关使用的 IptablesEIP 状态信息
IptablesEipSpec¶
属性名称 类型 描述 v4ip String IptablesEIP v4 地址 v6ip String IptablesEIP v6 地址 macAddress String IptablesEIP crd 记录分配的 mac 地址,没有实际使用 natGwDp String Vpc 网关名称
IptablesEipStatus¶
属性名称 类型 描述 ready Bool IptablesEIP 是否配置完成 ip String IptablesEIP 使用的 IP 地址,目前只支持了 IPv4 地址 redo String IptablesEIP crd 创建或者更新时间 nat String IptablesEIP 的使用类型,取值为 fip
、snat
或者 dnat
conditions []IptablesEIPCondition IptablesEIP 状态变化信息,具体字段参考文档开头 Condition 定义
IptablesFIPRule¶
属性名称 类型 描述 apiVersion String 标准 Kubernetes 版本信息字段,所有自定义资源该值均为 kubeovn.io/v1 kind String 标准 Kubernetes 资源类型字段,本资源所有实例该值均为 IptablesFIPRule
metadata ObjectMeta 标准 Kubernetes 资源元数据信息 spec IptablesFIPRuleSpec Vpc 网关使用的 IptablesFIPRule 具体配置信息字段 status IptablesFIPRuleStatus Vpc 网关使用的 IptablesFIPRule 状态信息
IptablesFIPRuleSpec¶
属性名称 类型 描述 eip String IptablesFIPRule 使用的 IptablesEIP 名称 internalIp String IptablesFIPRule 对应的内部的 IP 地址
IptablesFIPRuleStatus¶
属性名称 类型 描述 ready Bool IptablesFIPRule 是否配置完成 v4ip String IptablesEIP 使用的 v4 IP 地址 v6ip String IptablesEIP 使用的 v6 IP 地址 natGwDp String Vpc 网关名称 redo String IptablesFIPRule crd 创建或者更新时间 conditions []IptablesFIPRuleCondition IptablesFIPRule 状态变化信息,具体字段参考文档开头 Condition 定义
IptablesSnatRule¶
属性名称 类型 描述 apiVersion String 标准 Kubernetes 版本信息字段,所有自定义资源该值均为 kubeovn.io/v1 kind String 标准 Kubernetes 资源类型字段,本资源所有实例该值均为 IptablesSnatRule
metadata ObjectMeta 标准 Kubernetes 资源元数据信息 spec IptablesSnatRuleSpec Vpc 网关使用的 IptablesSnatRule 具体配置信息字段 status IptablesSnatRuleStatus Vpc 网关使用的 IptablesSnatRule 状态信息
IptablesSnatRuleSpec¶
属性名称 类型 描述 eip String IptablesSnatRule 使用的 IptablesEIP 名称 internalIp String IptablesSnatRule 对应的内部的 IP 地址
IptablesSnatRuleStatus¶
属性名称 类型 描述 ready Bool IptablesSnatRule 是否配置完成 v4ip String IptablesSnatRule 使用的 v4 IP 地址 v6ip String IptablesSnatRule 使用的 v6 IP 地址 natGwDp String Vpc 网关名称 redo String IptablesSnatRule crd 创建或者更新时间 conditions []IptablesSnatRuleCondition IptablesSnatRule 状态变化信息,具体字段参考文档开头 Condition 定义
IptablesDnatRule¶
属性名称 类型 描述 apiVersion String 标准 Kubernetes 版本信息字段,所有自定义资源该值均为 kubeovn.io/v1 kind String 标准 Kubernetes 资源类型字段,本资源所有实例该值均为 IptablesDnatRule
metadata ObjectMeta 标准 Kubernetes 资源元数据信息 spec IptablesDnatRuleSpec Vpc 网关使用的 IptablesDnatRule 具体配置信息字段 status IptablesDnatRuleStatus Vpc 网关使用的 IptablesDnatRule 状态信息
IptablesDnatRuleSpec¶
属性名称 类型 描述 eip Sting Vpc 网关配置 IptablesDnatRule 使用的 IptablesEIP 名称 externalPort Sting Vpc 网关配置 IptablesDnatRule 使用的外部端口 protocol Sting Vpc 网关配置 IptablesDnatRule 的协议类型 internalIp Sting Vpc 网关配置 IptablesDnatRule 使用的内部 IP 地址 internalPort Sting Vpc 网关配置 IptablesDnatRule 使用的内部端口
IptablesDnatRuleStatus¶
属性名称 类型 描述 ready Bool IptablesDnatRule 是否配置完成 v4ip String IptablesDnatRule 使用的 v4 IP 地址 v6ip String IptablesDnatRule 使用的 v6 IP 地址 natGwDp String Vpc 网关名称 redo String IptablesDnatRule crd 创建或者更新时间 conditions []IptablesDnatRuleCondition IptablesDnatRule 状态变化信息,具体字段参考文档开头 Condition 定义
VpcDns¶
属性名称 类型 描述 apiVersion String 标准 Kubernetes 版本信息字段,所有自定义资源该值均为 kubeovn.io/v1 kind String 标准 Kubernetes 资源类型字段,本资源所有实例该值均为 VpcDns
metadata ObjectMeta 标准 Kubernetes 资源元数据信息 spec VpcDnsSpec VpcDns 具体配置信息字段 status VpcDnsStatus VpcDns 状态信息
VpcDnsSpec¶
属性名称 类型 描述 vpc String VpcDns 所在的 Vpc 名称 subnet String VpcDns Pod 分配地址的 Subnet 名称
VpcDnsStatus¶
属性名称 类型 描述 conditions []VpcDnsCondition VpcDns 状态变化信息,具体字段参考文档开头 Condition 定义 active Bool VpcDns 是否正在使用
VpcDns 的详细使用文档,可以参考 自定义 VPC DNS。
SwitchLBRule¶
属性名称 类型 描述 apiVersion String 标准 Kubernetes 版本信息字段,所有自定义资源该值均为 kubeovn.io/v1 kind String 标准 Kubernetes 资源类型字段,本资源所有实例该值均为 SwitchLBRule
metadata ObjectMeta 标准 Kubernetes 资源元数据信息 spec SwitchLBRuleSpec SwitchLBRule 具体配置信息字段 status SwitchLBRuleStatus SwitchLBRule 状态信息
SwitchLBRuleSpec¶
属性名称 类型 描述 vip String SwitchLBRule 配置的 vip 地址 namespace String SwitchLBRule 的命名空间 selector []String 标准 Kubernetes Selector 匹配信息 sessionAffinity String 标准 Kubernetes Service 中 sessionAffinity 取值 ports []SlrPort SwitchLBRule 端口列表
SwitchLBRule 的详细配置信息,可以参考 自定义 VPC 内部负载均衡。
SlrPort¶
属性名称 类型 描述 name String 端口名称 port Int32 端口号 targetPort Int32 目标端口号 protocol String 协议类型
SwitchLBRuleStatus¶
属性名称 类型 描述 conditions []SwitchLBRuleCondition SwitchLBRule 状态变化信息,具体字段参考文档开头 Condition 定义 ports String SwitchLBRule 端口信息 service String SwitchLBRule 提供服务的 service 名称
安全组与 Vip¶
SecurityGroup¶
属性名称 类型 描述 apiVersion String 标准 Kubernetes 版本信息字段,所有自定义资源该值均为 kubeovn.io/v1 kind String 标准 Kubernetes 资源类型字段,本资源所有实例该值均为 SecurityGroup
metadata ObjectMeta 标准 Kubernetes 资源元数据信息 spec SecurityGroupSpec 安全组具体配置信息字段 status SecurityGroupStatus 安全组状态信息
SecurityGroupSpec¶
属性名称 类型 描述 ingressRules []*SgRule 入方向安全组规则 egressRules []*SgRule 出方向安全组规则 allowSameGroupTraffic Bool 同一安全组内的 lsp 是否可以互通,以及流量规则是否需要更新
SgRule¶
属性名称 类型 描述 ipVersion String IP 版本号,取值为 ipv4
或者 ipv6
protocol String 取值为 all
、icmp
、tcp
或者 udp
priority Int Acl 优先级,取值范围为 1-200,数值越小,优先级越高 remoteType String 取值为 address
或者 securityGroup
remoteAddress String 对端地址 remoteSecurityGroup String 对端安全组 portRangeMin Int 端口范围起始值,最小取值为 1 portRangeMax Int 端口范围最大值,最大取值为 65535 policy String 取值为 allow
或者 drop
SecurityGroupStatus¶
属性名称 类型 描述 portGroup String 安全组对应的 port-group 名称 allowSameGroupTraffic Bool 同一安全组内的 lsp 是否可以互通,以及安全组的流量规则是否需要更新 ingressMd5 String 入方向安全组规则 MD5 取值 egressMd5 String 出方向安全组规则 MD5 取值 ingressLastSyncSuccess Bool 入方向规则上一次同步是否成功 egressLastSyncSuccess Bool 出方向规则上一次同步是否成功
Vip¶
属性名称 类型 描述 apiVersion String 标准 Kubernetes 版本信息字段,所有自定义资源该值均为 kubeovn.io/v1 kind String 标准 Kubernetes 资源类型字段,本资源所有实例该值均为 Vip
metadata ObjectMeta 标准 Kubernetes 资源元数据信息 spec VipSpec Vip 具体配置信息字段 status VipStatus Vip 状态信息
VipSpec¶
属性名称 类型 描述 namespace String Vip 所在命名空间 subnet String Vip 所属子网 v4ip String Vip v4 IP 地址 v6ip String Vip v6 IP 地址 macAddress String Vip mac 地址 parentV4ip String 目前没有使用 parentV6ip String 目前没有使用 parentMac String 目前没有使用 attachSubnets []String 该字段废弃,不再使用
VipStatus¶
属性名称 类型 描述 conditions []VipCondition Vip 状态变化信息,具体字段参考文档开头 Condition 定义 ready Bool Vip 是否准备好 v4ip String Vip v4 IP 地址,应该和 spec 字段取值一致 v6ip String Vip v6 IP 地址,应该和 spec 字段取值一致 mac String Vip mac 地址,应该和 spec 字段取值一致 pv4ip String 目前没有使用 pv6ip String 目前没有使用 pmac String 目前没有使用
OvnEip¶
属性名称 类型 描述 apiVersion String 标准 Kubernetes 版本信息字段,所有自定义资源该值均为 kubeovn.io/v1 kind String 标准 Kubernetes 资源类型字段,本资源所有实例该值均为 OvnEip
metadata ObjectMeta 标准 Kubernetes 资源元数据信息 spec OvnEipSpec 默认 Vpc 使用 OvnEip 具体配置信息字段 status OvnEipStatus 默认 Vpc 使用 OvnEip 状态信息
OvnEipSpec¶
属性名称 类型 描述 externalSubnet String OvnEip 所在的子网名称 v4ip String OvnEip IP 地址 macAddress String OvnEip Mac 地址 type String OvnEip 使用类型,取值有 fip
、snat
或者 lrp
OvnEipStatus¶
属性名称 类型 描述 conditions []OvnEipCondition 默认 Vpc OvnEip 状态变化信息,具体字段参考文档开头 Condition 定义 v4ip String OvnEip 使用的 v4 IP 地址 macAddress String OvnEip 使用的 Mac 地址
OvnFip¶
属性名称 类型 描述 apiVersion String 标准 Kubernetes 版本信息字段,所有自定义资源该值均为 kubeovn.io/v1 kind String 标准 Kubernetes 资源类型字段,本资源所有实例该值均为 OvnFip
metadata ObjectMeta 标准 Kubernetes 资源元数据信息 spec OvnFipSpec 默认 Vpc 使用 OvnFip 具体配置信息字段 status OvnFipStatus 默认 Vpc 使用 OvnFip 状态信息
OvnFipSpec¶
属性名称 类型 描述 ovnEip String OvnFip 绑定的 OvnEip 名称 ipName String OvnFip 绑定 Pod 对应的 IP crd 名称
OvnFipStatus¶
属性名称 类型 描述 ready Bool OvnFip 是否配置完成 v4Eip String OvnFip 绑定的 OvnEip 名称 v4Ip String OvnFip 当前使用的 OvnEip 地址 macAddress String OvnFip 配置的 Mac 地址 vpc String OvnFip 所在的 Vpc 名称 conditions []OvnFipCondition OvnFip 状态变化信息,具体字段参考文档开头 Condition 定义
OvnSnatRule¶
属性名称 类型 描述 apiVersion String 标准 Kubernetes 版本信息字段,所有自定义资源该值均为 kubeovn.io/v1 kind String 标准 Kubernetes 资源类型字段,本资源所有实例该值均为 OvnSnatRule
metadata ObjectMeta 标准 Kubernetes 资源元数据信息 spec OvnSnatRuleSpec 默认 Vpc OvnSnatRule 具体配置信息字段 status OvnSnatRuleStatus 默认 Vpc OvnSnatRule 状态信息
OvnSnatRuleSpec¶
属性名称 类型 描述 ovnEip String OvnSnatRule 绑定的 OvnEip 名称 vpcSubnet String OvnSnatRule 配置的子网名称 ipName String OvnSnatRule 绑定 Pod 对应的 IP crd 名称
OvnSnatRuleStatus¶
属性名称 类型 描述 ready Bool OvnSnatRule 是否配置完成 v4Eip String OvnSnatRule 绑定的 OvnEip 地址 v4IpCidr String 在 logical-router 中配置 snat 转换使用的 cidr 地址 vpc String OvnSnatRule 所在的 Vpc 名称 conditions []OvnSnatRuleCondition OvnSnatRule 状态变化信息,具体字段参考文档开头 Condition 定义
微信群 Slack Twitter Support Meeting
评论
Kube-OVN 接口规范¶
基于 Kube-OVN v1.12.0 版本,整理了 Kube-OVN 支持的 CRD 资源列表,列出 CRD 定义各字段的取值类型和含义,以供参考。
通用的 Condition 定义¶
属性名称 类型 描述 type String 状态类型 status String 状态值,取值为 True
,False
或 Unknown
reason String 状态变化的原因 message String 状态变化的具体信息 lastUpdateTime Time 上次状态更新时间 lastTransitionTime Time 上次状态类型发生变化的时间
在各 CRD 的定义中,Status 中的 Condition 字段,都遵循上述格式,因此提前进行说明。
Subnet 定义¶
Subnet¶
属性名称 类型 描述 apiVersion String 标准 Kubernetes 版本信息字段,所有自定义资源该值均为 kubeovn.io/v1 kind String 标准 Kubernetes 资源类型字段,本资源所有实例该值均为 Subnet
metadata ObjectMeta 标准 Kubernetes 资源元数据信息 spec SubnetSpec Subnet 具体配置信息字段 status SubnetStatus Subnet 状态信息字段
SubnetSpec¶
属性名称 类型 描述 default Bool 该子网是否为默认子网 vpc String 子网所属 Vpc,默认为 ovn-cluster protocol String IP 协议,取值可以为 IPv4
,IPv6
或 Dual
namespaces []String 该子网所绑定的 namespace 列表 cidrBlock String 子网的网段范围,如 10.16.0.0/16 gateway String 子网网关地址,默认为该子网 CIDRBlock 下的第一个可用地址 excludeIps []String 该子网下不会被自动分配的地址范围 provider String 默认为 ovn。多网卡情况下可以配置取值为 NetworkAttachmentDefinition 的 .,Kube-OVN 将会使用这些信息找到对应的 Subnet 资源 gatewayType String Overlay 模式下的网关类型,取值可以为 distributed
或 centralized
gatewayNode String 当网关模式为 centralized 时的网关节点,可以为逗号分隔的多个节点 natOutgoing Bool 出网流量是否进行 NAT。该参数和 externalEgressGateway
参数不能同时设置。 externalEgressGateway String 外部网关地址。需要和子网网关节点在同一个二层可达域,该参数和 natOutgoing
参数不能同时设置 policyRoutingPriority Uint32 策略路由优先级。添加策略路由使用参数,控制流量经子网网关之后,转发到外部网关地址 policyRoutingTableID Uint32 使用的本地策略路由表的 TableID,每个子网均需不同以避免冲突 private Bool 标识该子网是否为私有子网,私有子网默认拒绝子网外的地址访问 allowSubnets []String 子网为私有子网的情况下,允许访问该子网地址的集合 vlan String 子网绑定的 Vlan 名称 vips []String 子网下 virtual 类型 lsp 的 virtual-ip 参数信息 logicalGateway Bool 是否启用逻辑网关 disableGatewayCheck Bool 创建 Pod 时是否跳过网关联通性检查 disableInterConnection Bool 控制是否开启子网跨集群互联 enableDHCP Bool 控制是否配置子网下 lsp 的 dhcp 配置选项 dhcpV4Options String 子网下 lsp dhcpv4_options 关联的 DHCP_Options 记录 dhcpV6Options String 子网下 lsp dhcpv6_options 关联的 DHCP_Options 记录 enableIPv6RA Bool 控制子网连接路由器的 lrp 端口,是否配置 ipv6_ra_configs 参数 ipv6RAConfigs String 子网连接路由器的 lrp 端口,ipv6_ra_configs 参数配置信息 acls []Acl 子网对应 logical-switch 关联的 acls 记录 u2oInterconnection Bool 是否开启 Overlay/Underlay 的互联模式 enableLb *Bool 控制子网对应的 logical-switch 是否关联 load-balancer 记录 enableEcmp Bool 集中式网关,是否开启 ECMP 路由
Acl¶
属性名称 类型 描述 direction String Acl 限制方向,取值为 from-lport
或者 to-lport
priority Int Acl 优先级,取值范围 0 到 32767 match String Acl 规则匹配表达式 action String Acl 规则动作,取值为 allow-related
, allow-stateless
, allow
, drop
, reject
其中一个
SubnetStatus¶
属性名称 类型 描述 conditions []SubnetCondition 子网状态变化信息,具体字段参考文档开头 Condition 定义 v4AvailableIPs Float64 子网现在可用的 IPv4 IP 地址数量 v4availableIPrange String 子网现在可用的 IPv4 地址范围 v4UsingIPs Float64 子网现在已用的 IPv4 IP 地址数量 v4usingIPrange String 子网现在已用的 IPv4 地址范围 v6AvailableIPs Float64 子网现在可用的 IPv6 IP 地址数量 v6availableIPrange String 子网现在可用的 IPv6 地址范围 v6UsingIPs Float64 子网现在已用的 IPv6 IP 地址数量 v6usingIPrange String 子网现在已用的 IPv6 地址范围 sctivateGateway String 集中式子网,主备模式下当前正在工作的网关节点 dhcpV4OptionsUUID String 子网下 lsp dhcpv4_options 关联的 DHCP_Options 记录标识 dhcpV6OptionsUUID String 子网下 lsp dhcpv6_options 关联的 DHCP_Options 记录标识 u2oInterconnectionIP String 开启 Overlay/Underlay 互联模式后,所占用的用于互联的 IP 地址
IP 定义¶
IP¶
属性名称 类型 描述 apiVersion String 标准 Kubernetes 版本信息字段,所有自定义资源该值均为 kubeovn.io/v1 kind String 标准 Kubernetes 资源类型字段,本资源所有实例该值均为 IP
metadata ObjectMeta 标准 Kubernetes 资源元数据信息 spec IPSpec IP 具体配置信息字段
IPSepc¶
属性名称 类型 描述 podName String 绑定 Pod 名称 namespace String 绑定 Pod 所在 Namespace 名称 subnet String IP 所属 Subnet attachSubnets []String 该主 IP 下其他附属子网名称(字段废弃不再使用) nodeName String 绑定 Pod 所在的节点名称 ipAddress String IP 地址,双栈情况下为 v4IP,v6IP
格式 v4IPAddress String IPv4 IP 地址 v6IPAddress String IPv6 IP 地址 attachIPs []String 该主 IP 下其他附属 IP 地址(字段废弃不再使用) macAddress String 绑定 Pod 的 Mac 地址 attachMacs []String 该主 IP 下其他附属 Mac 地址(字段废弃不再使用) containerID String 绑定 Pod 对应的 Container ID podType String 特殊工作负载 Pod,可为 StatefulSet
,VirtualMachine
或空
Underlay 配置¶
Vlan¶
属性名称 类型 描述 apiVersion String 标准 Kubernetes 版本信息字段,所有自定义资源该值均为 kubeovn.io/v1 kind String 标准 Kubernetes 资源类型字段,本资源所有实例该值均为 Vlan
metadata ObjectMeta 标准 Kubernetes 资源元数据信息 spec VlanSpec Vlan 具体配置信息字段 status VlanStatus Vlan 状态信息字段
VlanSpec¶
属性名称 类型 描述 id Int Vlan tag 号,取值范围为 0~4096 provider String Vlan 绑定的 ProviderNetwork 名称
VlanStatus¶
属性名称 类型 描述 subnets []String Vlan 绑定的子网列表 conditions []VlanCondition Vlan 状态变化信息,具体字段参考文档开头 Condition 定义
ProviderNetwork¶
属性名称 类型 描述 apiVersion String 标准 Kubernetes 版本信息字段,所有自定义资源该值均为 kubeovn.io/v1 kind String 标准 Kubernetes 资源类型字段,本资源所有实例该值均为 ProviderNetwork
metadata ObjectMeta 标准 Kubernetes 资源元数据信息 spec ProviderNetworkSpec ProviderNetwork 具体配置信息字段 status ProviderNetworkStatus ProviderNetwork 状态信息字段
ProviderNetworkSpec¶
属性名称 类型 描述 defaultInterface String 该桥接网络默认使用的网卡接口名称 customInterfaces []CustomInterface 该桥接网络特殊使用的网卡配置 excludeNodes []String 该桥接网络不会绑定的节点名称 exchangeLinkName Bool 是否交换桥接网卡和对应 OVS 网桥名称
CustomInterface¶
属性名称 类型 描述 interface String Underlay 使用网卡接口名称 nodes []String 使用自定义网卡接口的节点列表
ProviderNetworkStatus¶
属性名称 类型 描述 ready Bool 当前桥接网络是否进入就绪状态 readyNodes []String 桥接网络进入就绪状态的节点名称 notReadyNodes []String 桥接网络未进入就绪状态的节点名称 vlans []String 桥接网络绑定的 Vlan 名称 conditions []ProviderNetworkCondition ProviderNetwork 状态变化信息,具体字段参考文档开头 Condition 定义
Vpc 定义¶
Vpc¶
属性名称 类型 描述 apiVersion String 标准 Kubernetes 版本信息字段,所有自定义资源该值均为 kubeovn.io/v1 kind String 标准 Kubernetes 资源类型字段,本资源所有实例该值均为 Vpc
metadata ObjectMeta 标准 Kubernetes 资源元数据信息 spec VpcSpec Vpc 具体配置信息字段 status VpcStatus Vpc 状态信息字段
VpcSpec¶
属性名称 类型 描述 namespaces []String Vpc 绑定的命名空间列表 staticRoutes []*StaticRoute Vpc 下配置的静态路由信息 policyRoutes []*PolicyRoute Vpc 下配置的策略路由信息 vpcPeerings []*VpcPeering Vpc 互联信息 enableExternal Bool Vpc 是否连接到外部交换机
StaticRoute¶
属性名称 类型 描述 policy String 路由策略,取值为 policySrc
或者 policyDst
cidr String 路由 Cidr 网段 nextHopIP String 路由下一跳信息
PolicyRoute¶
属性名称 类型 描述 priority Int32 策略路由优先级 match String 策略路由匹配条件 action String 策略路由动作,取值为 allow
、drop
或者 reroute
nextHopIP String 策略路由下一跳信息,ECMP 路由情况下下一跳地址使用逗号隔开
VpcPeering¶
属性名称 类型 描述 remoteVpc String Vpc 互联对端 Vpc 名称 localConnectIP String Vpc 互联本端 IP 地址
VpcStatus¶
属性名称 类型 描述 conditions []VpcCondition Vpc 状态变化信息,具体字段参考文档开头 Condition 定义 standby Bool 标识 Vpc 是否创建完成,Vpc 下的 Subnet 需要等 Vpc 创建完成转换再继续处理 default Bool 是否是默认 Vpc defaultLogicalSwitch String Vpc 下的默认子网 router String Vpc 对应的 logical-router 名称 tcpLoadBalancer String Vpc 下的 TCP LB 信息 udpLoadBalancer String Vpc 下的 UDP LB 信息 tcpSessionLoadBalancer String Vpc 下的 TCP 会话保持 LB 信息 udpSessionLoadBalancer String Vpc 下的 UDP 会话保持 LB 信息 subnets []String Vpc 下的子网列表 vpcPeerings []String Vpc 互联的对端 Vpc 列表 enableExternal Bool Vpc 是否连接到外部交换机
VpcNatGateway¶
属性名称 类型 描述 apiVersion String 标准 Kubernetes 版本信息字段,所有自定义资源该值均为 kubeovn.io/v1 kind String 标准 Kubernetes 资源类型字段,本资源所有实例该值均为 VpcNatGateway
metadata ObjectMeta 标准 Kubernetes 资源元数据信息 spec VpcNatSpec Vpc 网关具体配置信息字段
VpcNatSpec¶
属性名称 类型 描述 vpc String Vpc 网关 Pod 所在的 Vpc 名称 subnet String Vpc 网关 Pod 所属的子网名称 lanIp String Vpc 网关 Pod 指定分配的 IP 地址 selector []String 标准 Kubernetes Selector 匹配信息 tolerations []VpcNatToleration 标准 Kubernetes 容忍信息
VpcNatToleration¶
属性名称 类型 描述 key String 容忍污点的 key 信息 operator String 取值为 Exists
或者 Equal
value String 容忍污点的 value 信息 effect String 容忍污点的作用效果,取值为 NoExecute
、NoSchedule
或者 PreferNoSchedule
tolerationSeconds Int64 添加污点后,Pod 还能继续在节点上运行的时间
以上容忍字段的含义,可以参考 Kubernetes 官方文档 污点和容忍度。
IptablesEIP¶
属性名称 类型 描述 apiVersion String 标准 Kubernetes 版本信息字段,所有自定义资源该值均为 kubeovn.io/v1 kind String 标准 Kubernetes 资源类型字段,本资源所有实例该值均为 IptablesEIP
metadata ObjectMeta 标准 Kubernetes 资源元数据信息 spec IptablesEipSpec Vpc 网关使用的 IptablesEIP 具体配置信息字段 status IptablesEipStatus Vpc 网关使用的 IptablesEIP 状态信息
IptablesEipSpec¶
属性名称 类型 描述 v4ip String IptablesEIP v4 地址 v6ip String IptablesEIP v6 地址 macAddress String IptablesEIP crd 记录分配的 mac 地址,没有实际使用 natGwDp String Vpc 网关名称
IptablesEipStatus¶
属性名称 类型 描述 ready Bool IptablesEIP 是否配置完成 ip String IptablesEIP 使用的 IP 地址,目前只支持了 IPv4 地址 redo String IptablesEIP crd 创建或者更新时间 nat String IptablesEIP 的使用类型,取值为 fip
、snat
或者 dnat
conditions []IptablesEIPCondition IptablesEIP 状态变化信息,具体字段参考文档开头 Condition 定义
IptablesFIPRule¶
属性名称 类型 描述 apiVersion String 标准 Kubernetes 版本信息字段,所有自定义资源该值均为 kubeovn.io/v1 kind String 标准 Kubernetes 资源类型字段,本资源所有实例该值均为 IptablesFIPRule
metadata ObjectMeta 标准 Kubernetes 资源元数据信息 spec IptablesFIPRuleSpec Vpc 网关使用的 IptablesFIPRule 具体配置信息字段 status IptablesFIPRuleStatus Vpc 网关使用的 IptablesFIPRule 状态信息
IptablesFIPRuleSpec¶
属性名称 类型 描述 eip String IptablesFIPRule 使用的 IptablesEIP 名称 internalIp String IptablesFIPRule 对应的内部的 IP 地址
IptablesFIPRuleStatus¶
属性名称 类型 描述 ready Bool IptablesFIPRule 是否配置完成 v4ip String IptablesEIP 使用的 v4 IP 地址 v6ip String IptablesEIP 使用的 v6 IP 地址 natGwDp String Vpc 网关名称 redo String IptablesFIPRule crd 创建或者更新时间 conditions []IptablesFIPRuleCondition IptablesFIPRule 状态变化信息,具体字段参考文档开头 Condition 定义
IptablesSnatRule¶
属性名称 类型 描述 apiVersion String 标准 Kubernetes 版本信息字段,所有自定义资源该值均为 kubeovn.io/v1 kind String 标准 Kubernetes 资源类型字段,本资源所有实例该值均为 IptablesSnatRule
metadata ObjectMeta 标准 Kubernetes 资源元数据信息 spec IptablesSnatRuleSpec Vpc 网关使用的 IptablesSnatRule 具体配置信息字段 status IptablesSnatRuleStatus Vpc 网关使用的 IptablesSnatRule 状态信息
IptablesSnatRuleSpec¶
属性名称 类型 描述 eip String IptablesSnatRule 使用的 IptablesEIP 名称 internalIp String IptablesSnatRule 对应的内部的 IP 地址
IptablesSnatRuleStatus¶
属性名称 类型 描述 ready Bool IptablesSnatRule 是否配置完成 v4ip String IptablesSnatRule 使用的 v4 IP 地址 v6ip String IptablesSnatRule 使用的 v6 IP 地址 natGwDp String Vpc 网关名称 redo String IptablesSnatRule crd 创建或者更新时间 conditions []IptablesSnatRuleCondition IptablesSnatRule 状态变化信息,具体字段参考文档开头 Condition 定义
IptablesDnatRule¶
属性名称 类型 描述 apiVersion String 标准 Kubernetes 版本信息字段,所有自定义资源该值均为 kubeovn.io/v1 kind String 标准 Kubernetes 资源类型字段,本资源所有实例该值均为 IptablesDnatRule
metadata ObjectMeta 标准 Kubernetes 资源元数据信息 spec IptablesDnatRuleSpec Vpc 网关使用的 IptablesDnatRule 具体配置信息字段 status IptablesDnatRuleStatus Vpc 网关使用的 IptablesDnatRule 状态信息
IptablesDnatRuleSpec¶
属性名称 类型 描述 eip Sting Vpc 网关配置 IptablesDnatRule 使用的 IptablesEIP 名称 externalPort Sting Vpc 网关配置 IptablesDnatRule 使用的外部端口 protocol Sting Vpc 网关配置 IptablesDnatRule 的协议类型 internalIp Sting Vpc 网关配置 IptablesDnatRule 使用的内部 IP 地址 internalPort Sting Vpc 网关配置 IptablesDnatRule 使用的内部端口
IptablesDnatRuleStatus¶
属性名称 类型 描述 ready Bool IptablesDnatRule 是否配置完成 v4ip String IptablesDnatRule 使用的 v4 IP 地址 v6ip String IptablesDnatRule 使用的 v6 IP 地址 natGwDp String Vpc 网关名称 redo String IptablesDnatRule crd 创建或者更新时间 conditions []IptablesDnatRuleCondition IptablesDnatRule 状态变化信息,具体字段参考文档开头 Condition 定义
VpcDns¶
属性名称 类型 描述 apiVersion String 标准 Kubernetes 版本信息字段,所有自定义资源该值均为 kubeovn.io/v1 kind String 标准 Kubernetes 资源类型字段,本资源所有实例该值均为 VpcDns
metadata ObjectMeta 标准 Kubernetes 资源元数据信息 spec VpcDnsSpec VpcDns 具体配置信息字段 status VpcDnsStatus VpcDns 状态信息
VpcDnsSpec¶
属性名称 类型 描述 vpc String VpcDns 所在的 Vpc 名称 subnet String VpcDns Pod 分配地址的 Subnet 名称
VpcDnsStatus¶
属性名称 类型 描述 conditions []VpcDnsCondition VpcDns 状态变化信息,具体字段参考文档开头 Condition 定义 active Bool VpcDns 是否正在使用
VpcDns 的详细使用文档,可以参考 自定义 VPC DNS。
SwitchLBRule¶
属性名称 类型 描述 apiVersion String 标准 Kubernetes 版本信息字段,所有自定义资源该值均为 kubeovn.io/v1 kind String 标准 Kubernetes 资源类型字段,本资源所有实例该值均为 SwitchLBRule
metadata ObjectMeta 标准 Kubernetes 资源元数据信息 spec SwitchLBRuleSpec SwitchLBRule 具体配置信息字段 status SwitchLBRuleStatus SwitchLBRule 状态信息
SwitchLBRuleSpec¶
属性名称 类型 描述 vip String SwitchLBRule 配置的 vip 地址 namespace String SwitchLBRule 的命名空间 selector []String 标准 Kubernetes Selector 匹配信息 sessionAffinity String 标准 Kubernetes Service 中 sessionAffinity 取值 ports []SlrPort SwitchLBRule 端口列表
SwitchLBRule 的详细配置信息,可以参考 自定义 VPC 内部负载均衡。
SlrPort¶
属性名称 类型 描述 name String 端口名称 port Int32 端口号 targetPort Int32 目标端口号 protocol String 协议类型
SwitchLBRuleStatus¶
属性名称 类型 描述 conditions []SwitchLBRuleCondition SwitchLBRule 状态变化信息,具体字段参考文档开头 Condition 定义 ports String SwitchLBRule 端口信息 service String SwitchLBRule 提供服务的 service 名称
安全组与 Vip¶
SecurityGroup¶
属性名称 类型 描述 apiVersion String 标准 Kubernetes 版本信息字段,所有自定义资源该值均为 kubeovn.io/v1 kind String 标准 Kubernetes 资源类型字段,本资源所有实例该值均为 SecurityGroup
metadata ObjectMeta 标准 Kubernetes 资源元数据信息 spec SecurityGroupSpec 安全组具体配置信息字段 status SecurityGroupStatus 安全组状态信息
SecurityGroupSpec¶
属性名称 类型 描述 ingressRules []*SgRule 入方向安全组规则 egressRules []*SgRule 出方向安全组规则 allowSameGroupTraffic Bool 同一安全组内的 lsp 是否可以互通,以及流量规则是否需要更新
SgRule¶
属性名称 类型 描述 ipVersion String IP 版本号,取值为 ipv4
或者 ipv6
protocol String 取值为 all
、icmp
、tcp
或者 udp
priority Int Acl 优先级,取值范围为 1-200,数值越小,优先级越高 remoteType String 取值为 address
或者 securityGroup
remoteAddress String 对端地址 remoteSecurityGroup String 对端安全组 portRangeMin Int 端口范围起始值,最小取值为 1 portRangeMax Int 端口范围最大值,最大取值为 65535 policy String 取值为 allow
或者 drop
SecurityGroupStatus¶
属性名称 类型 描述 portGroup String 安全组对应的 port-group 名称 allowSameGroupTraffic Bool 同一安全组内的 lsp 是否可以互通,以及安全组的流量规则是否需要更新 ingressMd5 String 入方向安全组规则 MD5 取值 egressMd5 String 出方向安全组规则 MD5 取值 ingressLastSyncSuccess Bool 入方向规则上一次同步是否成功 egressLastSyncSuccess Bool 出方向规则上一次同步是否成功
Vip¶
属性名称 类型 描述 apiVersion String 标准 Kubernetes 版本信息字段,所有自定义资源该值均为 kubeovn.io/v1 kind String 标准 Kubernetes 资源类型字段,本资源所有实例该值均为 Vip
metadata ObjectMeta 标准 Kubernetes 资源元数据信息 spec VipSpec Vip 具体配置信息字段 status VipStatus Vip 状态信息
VipSpec¶
属性名称 类型 描述 namespace String Vip 所在命名空间 subnet String Vip 所属子网 v4ip String Vip v4 IP 地址 v6ip String Vip v6 IP 地址 macAddress String Vip mac 地址 parentV4ip String 目前没有使用 parentV6ip String 目前没有使用 parentMac String 目前没有使用 attachSubnets []String 该字段废弃,不再使用
VipStatus¶
属性名称 类型 描述 conditions []VipCondition Vip 状态变化信息,具体字段参考文档开头 Condition 定义 ready Bool Vip 是否准备好 v4ip String Vip v4 IP 地址,应该和 spec 字段取值一致 v6ip String Vip v6 IP 地址,应该和 spec 字段取值一致 mac String Vip mac 地址,应该和 spec 字段取值一致 pv4ip String 目前没有使用 pv6ip String 目前没有使用 pmac String 目前没有使用
OvnEip¶
属性名称 类型 描述 apiVersion String 标准 Kubernetes 版本信息字段,所有自定义资源该值均为 kubeovn.io/v1 kind String 标准 Kubernetes 资源类型字段,本资源所有实例该值均为 OvnEip
metadata ObjectMeta 标准 Kubernetes 资源元数据信息 spec OvnEipSpec 默认 Vpc 使用 OvnEip 具体配置信息字段 status OvnEipStatus 默认 Vpc 使用 OvnEip 状态信息
OvnEipSpec¶
属性名称 类型 描述 externalSubnet String OvnEip 所在的子网名称 v4ip String OvnEip IP 地址 macAddress String OvnEip Mac 地址 type String OvnEip 使用类型,取值有 fip
、snat
或者 lrp
OvnEipStatus¶
属性名称 类型 描述 conditions []OvnEipCondition 默认 Vpc OvnEip 状态变化信息,具体字段参考文档开头 Condition 定义 v4ip String OvnEip 使用的 v4 IP 地址 macAddress String OvnEip 使用的 Mac 地址
OvnFip¶
属性名称 类型 描述 apiVersion String 标准 Kubernetes 版本信息字段,所有自定义资源该值均为 kubeovn.io/v1 kind String 标准 Kubernetes 资源类型字段,本资源所有实例该值均为 OvnFip
metadata ObjectMeta 标准 Kubernetes 资源元数据信息 spec OvnFipSpec 默认 Vpc 使用 OvnFip 具体配置信息字段 status OvnFipStatus 默认 Vpc 使用 OvnFip 状态信息
OvnFipSpec¶
属性名称 类型 描述 ovnEip String OvnFip 绑定的 OvnEip 名称 ipName String OvnFip 绑定 Pod 对应的 IP crd 名称
OvnFipStatus¶
属性名称 类型 描述 ready Bool OvnFip 是否配置完成 v4Eip String OvnFip 绑定的 OvnEip 名称 v4Ip String OvnFip 当前使用的 OvnEip 地址 macAddress String OvnFip 配置的 Mac 地址 vpc String OvnFip 所在的 Vpc 名称 conditions []OvnFipCondition OvnFip 状态变化信息,具体字段参考文档开头 Condition 定义
OvnSnatRule¶
属性名称 类型 描述 apiVersion String 标准 Kubernetes 版本信息字段,所有自定义资源该值均为 kubeovn.io/v1 kind String 标准 Kubernetes 资源类型字段,本资源所有实例该值均为 OvnSnatRule
metadata ObjectMeta 标准 Kubernetes 资源元数据信息 spec OvnSnatRuleSpec 默认 Vpc OvnSnatRule 具体配置信息字段 status OvnSnatRuleStatus 默认 Vpc OvnSnatRule 状态信息
OvnSnatRuleSpec¶
属性名称 类型 描述 ovnEip String OvnSnatRule 绑定的 OvnEip 名称 vpcSubnet String OvnSnatRule 配置的子网名称 ipName String OvnSnatRule 绑定 Pod 对应的 IP crd 名称
OvnSnatRuleStatus¶
属性名称 类型 描述 ready Bool OvnSnatRule 是否配置完成 v4Eip String OvnSnatRule 绑定的 OvnEip 地址 v4IpCidr String 在 logical-router 中配置 snat 转换使用的 cidr 地址 vpc String OvnSnatRule 所在的 Vpc 名称 conditions []OvnSnatRuleCondition OvnSnatRule 状态变化信息,具体字段参考文档开头 Condition 定义
微信群 Slack Twitter Support Meeting
评论
版本管理¶
Kube-OVN 目前主要发布 Minor 版本和 Patch 版本。Minor 版本中会有新功能的增加,OVN/OVS 大版本升级,内部架构调整,API 变化。Patch 版本主要进行 Bug 修复,安全漏洞修复,依赖升级,同时兼容之前的 API。
维护策略¶
Kube-OVN 目前会持续维护主干分支和最近两个发版分支,例如 master
, release-1.12
,release-1.11
。其中最新发版分支(例如 release-1.12
)会进行较为频繁的迭代和发版,所有 Bug 修复,安全漏洞和依赖升级都会尽可能 backport 到最新发版分支。
前一个发版分支(例如 release-1.11
)会 backport 较为重大的 Bug 修复以及影响面较大的安全漏洞修复。
发版周期¶
Minor 版以主干分支是否有重大新功或重大的架构调整完成为契机按需发版,目前约为半年一次发布。Patch 版本根据分支 Bug 修复情况触发,一般会在 Bug 修复进入后一周内发布。
Patch 版本发布方式¶
目前 Patch 版本大部分工作都可以通过 hack/release.sh 脚本以自动化的方式来实现,主要发布步骤描述如下:
- 检查当前分支 Build 情况(自动化)
- 推送新 tag 镜像到 Docker Hub(自动化)
- 推送新 tag 代码到 Github(自动化)
- 修改代码中的版本信息(自动化)
- 修改文档仓库版本信息(自动化)
- 生成 Release Note PR(自动化)
- 合并 Release Note (手动)
- 手动 Merge github action 生成的 Release Note PR
- 修改 Github Release 信息(手动)
- 在 Github Release 页面编辑新生成的 Release,将标题修改为对应版本号(例如
v1.12.12
),并复制上一步生成的 Release Note 到 Release 详情
Minor 版本发布方式¶
目前 Minor 分支主要工作还需要通过手动的方式来完成,主要发布步骤描述如下:
- 在 Github 上推送一个新的发布分支,例如
release-1.13
(手动) - 将主干分支的
VERSION
, dist/images/install.sh
, charts/kube-ovn/values.yaml
和 charts/kube-ovn/Chart.yaml
中的版本信息修改为下个 Minor 版本,例如 v1.14.0
(手动) - 推送新 tag 镜像到 Docker Hub (手动)
- 在发版分支推送新 tag 代码到 Github (手动)
- 在文档仓库新建发版分支,例如
v1.13
,修改 mkdocs.yml
文件中的 version
和 branch
信息 (手动) - 生成 Release Note PR(自动化)
- 合并 Release Note (手动)
- 手动 Merge github action 生成的 Release Note PR
- 修改 Github Release 信息(手动)
- 在 Github Release 页面编辑新生成的 Release,将标题修改为对应版本号(例如
v1.13.0
),并复制上一步生成的 Release Note 到 Release 详情 - 修改发版分支的
VERSION
文件版本信息为下一个 Patch 版本,例如 v1.13.1
微信群 Slack Twitter Support Meeting
评论
版本管理¶
Kube-OVN 目前主要发布 Minor 版本和 Patch 版本。Minor 版本中会有新功能的增加,OVN/OVS 大版本升级,内部架构调整,API 变化。Patch 版本主要进行 Bug 修复,安全漏洞修复,依赖升级,同时兼容之前的 API。
维护策略¶
Kube-OVN 目前会持续维护主干分支和最近两个发版分支,例如 master
, release-1.12
,release-1.11
。其中最新发版分支(例如 release-1.12
)会进行较为频繁的迭代和发版,所有 Bug 修复,安全漏洞和依赖升级都会尽可能 backport 到最新发版分支。
前一个发版分支(例如 release-1.11
)会 backport 较为重大的 Bug 修复以及影响面较大的安全漏洞修复。
发版周期¶
Minor 版以主干分支是否有重大新功或重大的架构调整完成为契机按需发版,目前约为半年一次发布。Patch 版本根据分支 Bug 修复情况触发,一般会在 Bug 修复进入后一周内发布。
Patch 版本发布方式¶
目前 Patch 版本大部分工作都可以通过 hack/release.sh 脚本以自动化的方式来实现,主要发布步骤描述如下:
- 检查当前分支 Build 情况(自动化)
- 推送新 tag 镜像到 Docker Hub(自动化)
- 推送新 tag 代码到 Github(自动化)
- 修改代码中的版本信息(自动化)
- 修改文档仓库版本信息(自动化)
- 生成 Release Note PR(自动化)
- 合并 Release Note (手动)
- 手动 Merge github action 生成的 Release Note PR
- 修改 Github Release 信息(手动)
- 在 Github Release 页面编辑新生成的 Release,将标题修改为对应版本号(例如
v1.12.12
),并复制上一步生成的 Release Note 到 Release 详情
Minor 版本发布方式¶
目前 Minor 分支主要工作还需要通过手动的方式来完成,主要发布步骤描述如下:
- 在 Github 上推送一个新的发布分支,例如
release-1.13
(手动) - 将主干分支的
VERSION
, dist/images/install.sh
, charts/kube-ovn/values.yaml
和 charts/kube-ovn/Chart.yaml
中的版本信息修改为下个 Minor 版本,例如 v1.14.0
(手动) - 推送新 tag 镜像到 Docker Hub (手动)
- 在发版分支推送新 tag 代码到 Github (手动)
- 在文档仓库新建发版分支,例如
v1.13
,修改 mkdocs.yml
文件中的 version
和 branch
信息 (手动) - 生成 Release Note PR(自动化)
- 合并 Release Note (手动)
- 手动 Merge github action 生成的 Release Note PR
- 修改 Github Release 信息(手动)
- 在 Github Release 页面编辑新生成的 Release,将标题修改为对应版本号(例如
v1.13.0
),并复制上一步生成的 Release Note 到 Release 详情 - 修改发版分支的
VERSION
文件版本信息为下一个 Patch 版本,例如 v1.13.1
微信群 Slack Twitter Support Meeting
评论
Kube-OVN RoadMap¶
This document defines high level goals for Kube-OVN project. We welcome community contributors to discuss and update this Roadmap through Issues.
Network Datapath¶
Kube-OVN currently supports two network modes, Overlay and Underlay. We hope to improve the stability, performance, and compatibility with the ecosystem of these two network modes in Kubernetes.
- Improved Datapath network performance
- Keeping up with the latest network API features in the community
- Enhanced network monitoring and visualization capabilities
- Addition of automated test cases for various scenarios
VPC Network¶
VPC network is a key feature of Kube-OVN, many functions have been used in production environment, and we hope to increase the maturity of these functions and improve the user experiences.
- Standardize multiple gateway solutions and provide the best egress practice
- Provide more VPC internal basic network capabilities and solutions, such as DNS, DHCP, LoadBalancer, etc.
- Simplify VPC operation complexity and provide a more comprehensive CLI
- Supplement automated test cases for various scenarios
User Experience¶
Improve the user experience of Kubernetes cni, making container networking simpler, more reliable, and efficient.
- Helm/Operator to automate daily operations
- More organized metrics and grafana dashboard
- Troubleshooting tools that can automatically find known issues
- Integrated with other projects like kubeaz, kubekey, sealos etc.
微信群 Slack Twitter Support Meeting
评论
Kube-OVN RoadMap¶
This document defines high level goals for Kube-OVN project. We welcome community contributors to discuss and update this Roadmap through Issues.
Network Datapath¶
Kube-OVN currently supports two network modes, Overlay and Underlay. We hope to improve the stability, performance, and compatibility with the ecosystem of these two network modes in Kubernetes.
- Improved Datapath network performance
- Keeping up with the latest network API features in the community
- Enhanced network monitoring and visualization capabilities
- Addition of automated test cases for various scenarios
VPC Network¶
VPC network is a key feature of Kube-OVN, many functions have been used in production environment, and we hope to increase the maturity of these functions and improve the user experiences.
- Standardize multiple gateway solutions and provide the best egress practice
- Provide more VPC internal basic network capabilities and solutions, such as DNS, DHCP, LoadBalancer, etc.
- Simplify VPC operation complexity and provide a more comprehensive CLI
- Supplement automated test cases for various scenarios
User Experience¶
Improve the user experience of Kubernetes cni, making container networking simpler, more reliable, and efficient.
- Helm/Operator to automate daily operations
- More organized metrics and grafana dashboard
- Troubleshooting tools that can automatically find known issues
- Integrated with other projects like kubeaz, kubekey, sealos etc.
微信群 Slack Twitter Support Meeting
评论
隧道协议说明¶
Kube-OVN 使用 OVN/OVS 作为数据平面实现,目前支持 Geneve
,Vxlan
和 STT
三种隧道封装协议。 这三种协议在功能,性能和易用性上存在着区别,本文档将介绍三种协议在使用中的差异,用户可根据自己的情况进行选择。 这三个协议在 OVN 设计上的区别可以参考 OVN Architecture Design Decision。
Geneve¶
Geneve
协议为 Kube-OVN 部署时选择的默认隧道协议,也是 OVN 默认推荐的隧道协议。该协议在内核中得到了广泛的支持, 并可以利用现代网卡的通用 Offload 能力进行加速。由于 Geneve
有着可变长的头部,可以使用 24bit 空间来标志不同的 datapath 用户可以创建更多数量的虚拟网络,单个 datapath 下支持 32768 个端口。
如果使用 Mellanox 或芯启源的智能网卡 OVS 卸载,Geneve
需要较高版本的内核支持,需要选择 5.4 以上的上游内核, 或 backport 了该功能的其他兼容内核。
由于使用 UDP 进行封装,该协议在处理 TCP over UDP 时不能很好的利用现代网卡的 TCP 相关卸载,在处理大包时会消耗较多 CPU 资源。
Vxlan¶
Vxlan
为上游 OVN 近期支持的协议,该协议在内核中得到了广泛的支持,并可以利用现代网卡的通用 Offload 能力进行加速。。 由于该协议头部长度有限,并且 OVN 需要使用额外的空间进行编排,datapath 的数量存在限制,最多只能创建 4096 个 datapath, 每个 datapath 下最多 4096 个端口。同时由于空间有限,基于 inport
的 ACL 没有进行支持。
如果使用 Mellanox 或芯启源的智能网卡 OVS 卸载,Vxlan
的卸载在常见内核中已获得支持。
由于使用 UDP 进行封装,该协议在处理 TCP over UDP 时不能很好的利用现代网卡的 TCP 相关卸载,在处理大包时会消耗较多 CPU 资源。
STT¶
STT
协议为 OVN 较早支持的隧道协议,该协议使用类 TCP 的头部,可以充分利用现代网卡通用的 TCP 卸载能力,大幅提升 TCP 的吞吐量。同时该协议头部较长可支持完整的 OVN 能力和大规模的 datapath。
该协议未在内核中支持,若要使用需要额外编译 OVS 内核模块,并在升级内核时对应再次编译新版本内核模块。
该协议目前未被智能网卡支持,无法使用 OVS 的卸载能力。
参考资料¶
微信群 Slack Twitter Support Meeting
评论
隧道协议说明¶
Kube-OVN 使用 OVN/OVS 作为数据平面实现,目前支持 Geneve
,Vxlan
和 STT
三种隧道封装协议。 这三种协议在功能,性能和易用性上存在着区别,本文档将介绍三种协议在使用中的差异,用户可根据自己的情况进行选择。 这三个协议在 OVN 设计上的区别可以参考 OVN Architecture Design Decision。
Geneve¶
Geneve
协议为 Kube-OVN 部署时选择的默认隧道协议,也是 OVN 默认推荐的隧道协议。该协议在内核中得到了广泛的支持, 并可以利用现代网卡的通用 Offload 能力进行加速。由于 Geneve
有着可变长的头部,可以使用 24bit 空间来标志不同的 datapath 用户可以创建更多数量的虚拟网络,单个 datapath 下支持 32768 个端口。
如果使用 Mellanox 或芯启源的智能网卡 OVS 卸载,Geneve
需要较高版本的内核支持,需要选择 5.4 以上的上游内核, 或 backport 了该功能的其他兼容内核。
由于使用 UDP 进行封装,该协议在处理 TCP over UDP 时不能很好的利用现代网卡的 TCP 相关卸载,在处理大包时会消耗较多 CPU 资源。
Vxlan¶
Vxlan
为上游 OVN 近期支持的协议,该协议在内核中得到了广泛的支持,并可以利用现代网卡的通用 Offload 能力进行加速。。 由于该协议头部长度有限,并且 OVN 需要使用额外的空间进行编排,datapath 的数量存在限制,最多只能创建 4096 个 datapath, 每个 datapath 下最多 4096 个端口。同时由于空间有限,基于 inport
的 ACL 没有进行支持。
如果使用 Mellanox 或芯启源的智能网卡 OVS 卸载,Vxlan
的卸载在常见内核中已获得支持。
由于使用 UDP 进行封装,该协议在处理 TCP over UDP 时不能很好的利用现代网卡的 TCP 相关卸载,在处理大包时会消耗较多 CPU 资源。
STT¶
STT
协议为 OVN 较早支持的隧道协议,该协议使用类 TCP 的头部,可以充分利用现代网卡通用的 TCP 卸载能力,大幅提升 TCP 的吞吐量。同时该协议头部较长可支持完整的 OVN 能力和大规模的 datapath。
该协议未在内核中支持,若要使用需要额外编译 OVS 内核模块,并在升级内核时对应再次编译新版本内核模块。
该协议目前未被智能网卡支持,无法使用 OVS 的卸载能力。
参考资料¶
微信群 Slack Twitter Support Meeting
评论
一键安装¶
Kube-OVN 提供了一键安装脚本,可以帮助你快速安装一个高可用,生产就绪的 Kube-OVN 容器网络,默认部署为 Overlay 类型网络。
从 Kube-OVN v1.12.0 版本开始,支持 Helm Chart 安装,默认部署为 Overlay 类型网络。
如果默认网络需要搭建 Underlay/Vlan 网络,请参考 Underlay 网络支持。
安装前请参考准备工作确认环境配置正确。
脚本安装¶
下载安装脚本¶
我们推荐在生产环境使用稳定的 release 版本,请使用下面的命令下载稳定版本安装脚本:
wget https://raw.githubusercontent.com/kubeovn/kube-ovn/release-1.12/dist/images/install.sh
如果对 master 分支的最新功能感兴趣,想使用下面的命令下载开发版本部署脚本:
wget https://raw.githubusercontent.com/kubeovn/kube-ovn/master/dist/images/install.sh
修改配置参数¶
使用编辑器打开脚本,并修改下列变量为预期值:
REGISTRY="kubeovn" # 镜像仓库地址
-VERSION="v1.12.29" # 镜像版本/Tag
+VERSION="v1.12.30" # 镜像版本/Tag
POD_CIDR="10.16.0.0/16" # 默认子网 CIDR 不要和 SVC/NODE/JOIN CIDR 重叠
SVC_CIDR="10.96.0.0/12" # 需要和 apiserver 的 service-cluster-ip-range 保持一致
JOIN_CIDR="100.64.0.0/16" # Pod 和主机通信网络 CIDR,不要和 SVC/NODE/POD CIDR 重叠
@@ -55,7 +55,7 @@
# 高可用集群安装
$ helm install kube-ovn kubeovn/kube-ovn --set MASTER_NODES=${Node0IP}\,${Node1IP}\,${Node2IP} --set replicaCount=3
-
微信群 Slack Twitter Support Meeting
评论
准备工作¶
Kube-OVN 是一个符合 CNI 规范的网络组件,其运行需要依赖 Kubernetes 环境及对应的内核网络模块。 以下是通过测试的操作系统和软件版本,环境配置和所需要开放的端口信息。
软件版本¶
- Kubernetes >= 1.23。
- Docker >= 1.12.6, Containerd >= 1.3.4。
- 操作系统: CentOS 7/8, Ubuntu 16.04/18.04/20.04。
- 其他 Linux 发行版,需要检查一下内核模块是否存在
geneve
, openvswitch
, ip_tables
和 iptable_nat
,Kube-OVN 正常工作依赖上述模块。
注意事项:
- 如果内核版本为 3.10.0-862 内核
netfilter
模块存在 bug 会导致 Kube-OVN 内置负载均衡器无法工作,需要对内核升级,建议使用 CentOS 官方对应版本最新内核保证系统的安全。相关内核 bug 参考 Floating IPs broken after kernel upgrade to Centos/RHEL 7.5 - DNAT not working。 - Rocky Linux 8.6 的内核 4.18.0-372.9.1.el8.x86_64 存在 TCP 通信问题 TCP connection failed in Rocky Linux 8.6,请升级内核至 4.18.0-372.13.1.el8_6.x86_64 或更高版本。
- 如果内核版本为 4.4 则对应的内核
openvswitch
模块存在问题,建议升级或手动编译 openvswitch
新版本模块进行更新 - Geneve 隧道建立需要检查 IPv6,可通过
cat /proc/cmdline
检查内核启动参数, 相关内核 bug 请参考 Geneve tunnels don't work when ipv6 is disabled。
环境配置¶
- Kernel 启动需要开启 IPv6, 如果 kernel 启动参数包含
ipv6.disable=1
需要将其设置为 0。 kube-proxy
正常工作,Kube-OVN 可以通过 Service ClusterIP 访问到 kube-apiserver
。 - 确认 kubelet 配置参数开启了 CNI,并且配置在标准路径下, kubelet 启动时应包含如下参数
--network-plugin=cni --cni-bin-dir=/opt/cni/bin --cni-conf-dir=/etc/cni/net.d
。 - 确认未安装其他网络插件,或者其他网络插件已经被清除,检查
/etc/cni/net.d/
路径下无其他网络插件配置文件。如果之前安装过其他网络插件,建议删除后重启机器清理残留网络资源。
端口信息¶
组件 端口 用途 ovn-central 6641/tcp ovn nb db server 监听端口 ovn-central 6642/tcp ovn sb db server 监听端口 ovn-central 6643/tcp ovn northd server 监听端口 ovn-central 6644/tcp ovn raft server 监听端口 ovn-ic 6645/tcp ovn ic nb db server 监听端口 ovn-ic 6646/tcp ovn ic sb db server 监听端口 ovs-ovn Geneve 6081/udp, STT 7471/tcp, Vxlan 4789/udp 隧道端口 kube-ovn-controller 10660/tcp 监控监听端口 kube-ovn-daemon 10665/tcp 监控监听端口 kube-ovn-monitor 10661/tcp 监控监听端口
微信群 Slack Twitter Support Meeting
评论
准备工作¶
Kube-OVN 是一个符合 CNI 规范的网络组件,其运行需要依赖 Kubernetes 环境及对应的内核网络模块。 以下是通过测试的操作系统和软件版本,环境配置和所需要开放的端口信息。
软件版本¶
- Kubernetes >= 1.23。
- Docker >= 1.12.6, Containerd >= 1.3.4。
- 操作系统: CentOS 7/8, Ubuntu 16.04/18.04/20.04。
- 其他 Linux 发行版,需要检查一下内核模块是否存在
geneve
, openvswitch
, ip_tables
和 iptable_nat
,Kube-OVN 正常工作依赖上述模块。
注意事项:
- 如果内核版本为 3.10.0-862 内核
netfilter
模块存在 bug 会导致 Kube-OVN 内置负载均衡器无法工作,需要对内核升级,建议使用 CentOS 官方对应版本最新内核保证系统的安全。相关内核 bug 参考 Floating IPs broken after kernel upgrade to Centos/RHEL 7.5 - DNAT not working。 - Rocky Linux 8.6 的内核 4.18.0-372.9.1.el8.x86_64 存在 TCP 通信问题 TCP connection failed in Rocky Linux 8.6,请升级内核至 4.18.0-372.13.1.el8_6.x86_64 或更高版本。
- 如果内核版本为 4.4 则对应的内核
openvswitch
模块存在问题,建议升级或手动编译 openvswitch
新版本模块进行更新 - Geneve 隧道建立需要检查 IPv6,可通过
cat /proc/cmdline
检查内核启动参数, 相关内核 bug 请参考 Geneve tunnels don't work when ipv6 is disabled。
环境配置¶
- Kernel 启动需要开启 IPv6, 如果 kernel 启动参数包含
ipv6.disable=1
需要将其设置为 0。 kube-proxy
正常工作,Kube-OVN 可以通过 Service ClusterIP 访问到 kube-apiserver
。 - 确认 kubelet 配置参数开启了 CNI,并且配置在标准路径下, kubelet 启动时应包含如下参数
--network-plugin=cni --cni-bin-dir=/opt/cni/bin --cni-conf-dir=/etc/cni/net.d
。 - 确认未安装其他网络插件,或者其他网络插件已经被清除,检查
/etc/cni/net.d/
路径下无其他网络插件配置文件。如果之前安装过其他网络插件,建议删除后重启机器清理残留网络资源。
端口信息¶
组件 端口 用途 ovn-central 6641/tcp ovn nb db server 监听端口 ovn-central 6642/tcp ovn sb db server 监听端口 ovn-central 6643/tcp ovn northd server 监听端口 ovn-central 6644/tcp ovn raft server 监听端口 ovn-ic 6645/tcp ovn ic nb db server 监听端口 ovn-ic 6646/tcp ovn ic sb db server 监听端口 ovs-ovn Geneve 6081/udp, STT 7471/tcp, Vxlan 4789/udp 隧道端口 kube-ovn-controller 10660/tcp 监控监听端口 kube-ovn-daemon 10665/tcp 监控监听端口 kube-ovn-monitor 10661/tcp 监控监听端口
微信群 Slack Twitter Support Meeting
评论