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 集成

在一些情况下,用户需要使用 OpenStack 运行虚拟机,使用 Kubernetes 运行容器,并需要容器和虚机之间网络互通并处于统一控制平面下。如果 OpenStack Neutron 侧同样使用 OVN 作为底层网络控制,那么 Kube-OVN 可以使用集群互联和共享底层 OVN 两种方式打通 OpenStack 和 Kubernetes 的网络。

集群互联

该模式和使用 OVN-IC 进行多集群互联打通两个 Kubernetes 集群网络方式类似,只不过将集群两端换成 OpenStack 和 Kubernetes。

前提条件

  1. 自动互联模式下 OpenStack 和 Kubernetes 内的子网 CIDR 不能相互重叠。
  2. 需要存在一组机器可以被每个集群通过网络访问,用来部署跨集群互联的控制器。
  3. 每个集群需要有一组可以通过 IP 进行跨集群互访的机器作为之后的网关节点。
  4. 该方案只打通 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.29 bash start-ic-db.sh
+       

OpenStack 集成

在一些情况下,用户需要使用 OpenStack 运行虚拟机,使用 Kubernetes 运行容器,并需要容器和虚机之间网络互通并处于统一控制平面下。如果 OpenStack Neutron 侧同样使用 OVN 作为底层网络控制,那么 Kube-OVN 可以使用集群互联和共享底层 OVN 两种方式打通 OpenStack 和 Kubernetes 的网络。

集群互联

该模式和使用 OVN-IC 进行多集群互联打通两个 Kubernetes 集群网络方式类似,只不过将集群两端换成 OpenStack 和 Kubernetes。

前提条件

  1. 自动互联模式下 OpenStack 和 Kubernetes 内的子网 CIDR 不能相互重叠。
  2. 需要存在一组机器可以被每个集群通过网络访问,用来部署跨集群互联的控制器。
  3. 每个集群需要有一组可以通过 IP 进行跨集群互访的机器作为之后的网关节点。
  4. 该方案只打通 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. 1.11.16 之后版本部署的集群默认关闭了集群互联的开关,需要在部署脚本 install.sh 里修改下列变量:

    ENABLE_IC=true
    -

    打开开关后部署集群,会出现组件 deployment ovn-ic-controller。

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

  3. 需要存在一组机器可以被每个集群的 kube-ovn-controller 通过 IP 访问,用来部署跨集群互联的控制器。
  4. 每个集群需要有一组可以通过 IP 进行跨集群互访的机器作为之后的网关节点。
  5. 该功能只对默认 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.31az2az1 的远端地址为 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

    1. The subnet CIDRs within OpenStack and Kubernetes cannot overlap with each other in auto-route mode.
    2. 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.
    3. Each cluster needs to have a set of machines that can access each other across clusters via IP as the gateway nodes.
    4. 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

    1. The subnet CIDRs within OpenStack and Kubernetes cannot overlap with each other in auto-route mode.
    2. 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.
    3. Each cluster needs to have a set of machines that can access each other across clusters via IP as the gateway nodes.
    4. 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

    1. 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.

    2. 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.

    3. 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.
    4. Each cluster needs to have a set of machines that can access each other across clusters via IP as the gateway nodes.
    5. 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:

    1. Check the current branch build status (automated)
    2. Push the new tag image to Docker Hub (automated)
    3. Push the new tag code to GitHub (automated)
    4. Update the version information in the code (automated)
    5. Update the version information in the documentation repository (automated)
    6. Generate Release Note PR (automated)
    7. Merge Release Note (manual)
    8. Manually merge the GitHub action generated Release Note PR
    9. Modify the GitHub Release information (manual)
    10. 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:

    1. Push a new release branch on GitHub, e.g., release-1.13 (manual)
    2. 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)
    3. Push the new tag image to Docker Hub (manual)
    4. Push the new tag code to GitHub in the release branch (manual)
    5. 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)
    6. Generate Release Note PR (automated)
    7. Merge Release Note (manual)
    8. Manually merge the GitHub action generated Release Note PR
    9. Modify the GitHub Release information (manual)
    10. 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
    11. 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:

    1. Check the current branch build status (automated)
    2. Push the new tag image to Docker Hub (automated)
    3. Push the new tag code to GitHub (automated)
    4. Update the version information in the code (automated)
    5. Update the version information in the documentation repository (automated)
    6. Generate Release Note PR (automated)
    7. Merge Release Note (manual)
    8. Manually merge the GitHub action generated Release Note PR
    9. Modify the GitHub Release information (manual)
    10. 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:

    1. Push a new release branch on GitHub, e.g., release-1.13 (manual)
    2. 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)
    3. Push the new tag image to Docker Hub (manual)
    4. Push the new tag code to GitHub in the release branch (manual)
    5. 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)
    6. Generate Release Note PR (automated)
    7. Merge Release Note (manual)
    8. Manually merge the GitHub action generated Release Note PR
    9. Modify the GitHub Release information (manual)
    10. 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
    11. 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 二进制文件到每台机器,作为 kubeletkube-ovn-cni 之间的交互工具,将相应 CNI 请求 发送给 kube-ovn-cni 执行。该二进制文件默认会被复制到 /opt/cni/bin 目录下。

    kube-ovn-cni 会配置具体的网络来执行相应流量操作,主要工作包括:

    1. 配置 ovn-controllervswitchd
    2. 处理 CNI add/del 请求:
      1. 创建删除 veth 并和 OVS 端口绑定。
      2. 配置 OVS 端口信息。
      3. 更新宿主机的 iptables/ipset/route 等规则。
    3. 动态更新容器 QoS.
    4. 创建并配置 ovn0 网卡联通容器网络和主机网络。
    5. 配置主机网卡来实现 Vlan/Underlay/EIP 等功能。
    6. 动态配置集群互联网关。

    监控,运维工具和扩展组件

    该部分组件主要提供监控,诊断,运维操作以及和外部进行对接,对 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 二进制文件到每台机器,作为 kubeletkube-ovn-cni 之间的交互工具,将相应 CNI 请求 发送给 kube-ovn-cni 执行。该二进制文件默认会被复制到 /opt/cni/bin 目录下。

    kube-ovn-cni 会配置具体的网络来执行相应流量操作,主要工作包括:

    1. 配置 ovn-controllervswitchd
    2. 处理 CNI add/del 请求:
      1. 创建删除 veth 并和 OVS 端口绑定。
      2. 配置 OVS 端口信息。
      3. 更新宿主机的 iptables/ipset/route 等规则。
    3. 动态更新容器 QoS.
    4. 创建并配置 ovn0 网卡联通容器网络和主机网络。
    5. 配置主机网卡来实现 Vlan/Underlay/EIP 等功能。
    6. 动态配置集群互联网关。

    监控,运维工具和扩展组件

    该部分组件主要提供监控,诊断,运维操作以及和外部进行对接,对 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 中根据功能使用度,文档完善程度和测试覆盖程度将功能成熟度分为 AlphaBetaGA 三个阶段。

    成熟度定义

    对于 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 中根据功能使用度,文档完善程度和测试覆盖程度将功能成熟度分为 AlphaBetaGA 三个阶段。

    成熟度定义

    对于 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 状态值,取值为 TrueFalseUnknown
    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 协议,取值可以为 IPv4IPv6Dual
    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 模式下的网关类型,取值可以为 distributedcentralized
    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,可为 StatefulSetVirtualMachine 或空

    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 策略路由动作,取值为 allowdrop 或者 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 容忍污点的作用效果,取值为 NoExecuteNoSchedule 或者 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 的使用类型,取值为 fipsnat 或者 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 取值为 allicmptcp 或者 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 使用类型,取值有 fipsnat 或者 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 状态值,取值为 TrueFalseUnknown
    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 协议,取值可以为 IPv4IPv6Dual
    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 模式下的网关类型,取值可以为 distributedcentralized
    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,可为 StatefulSetVirtualMachine 或空

    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 策略路由动作,取值为 allowdrop 或者 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 容忍污点的作用效果,取值为 NoExecuteNoSchedule 或者 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 的使用类型,取值为 fipsnat 或者 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 取值为 allicmptcp 或者 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 使用类型,取值有 fipsnat 或者 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.12release-1.11。其中最新发版分支(例如 release-1.12)会进行较为频繁的迭代和发版,所有 Bug 修复,安全漏洞和依赖升级都会尽可能 backport 到最新发版分支。

    前一个发版分支(例如 release-1.11)会 backport 较为重大的 Bug 修复以及影响面较大的安全漏洞修复。

    发版周期

    Minor 版以主干分支是否有重大新功或重大的架构调整完成为契机按需发版,目前约为半年一次发布。Patch 版本根据分支 Bug 修复情况触发,一般会在 Bug 修复进入后一周内发布。

    Patch 版本发布方式

    目前 Patch 版本大部分工作都可以通过 hack/release.sh 脚本以自动化的方式来实现,主要发布步骤描述如下:

    1. 检查当前分支 Build 情况(自动化)
    2. 推送新 tag 镜像到 Docker Hub(自动化)
    3. 推送新 tag 代码到 Github(自动化)
    4. 修改代码中的版本信息(自动化)
    5. 修改文档仓库版本信息(自动化)
    6. 生成 Release Note PR(自动化)
    7. 合并 Release Note (手动)
    8. 手动 Merge github action 生成的 Release Note PR
    9. 修改 Github Release 信息(手动)
    10. 在 Github Release 页面编辑新生成的 Release,将标题修改为对应版本号(例如 v1.12.12),并复制上一步生成的 Release Note 到 Release 详情

    Minor 版本发布方式

    目前 Minor 分支主要工作还需要通过手动的方式来完成,主要发布步骤描述如下:

    1. 在 Github 上推送一个新的发布分支,例如 release-1.13 (手动)
    2. 将主干分支的 VERSION, dist/images/install.sh, charts/kube-ovn/values.yamlcharts/kube-ovn/Chart.yaml 中的版本信息修改为下个 Minor 版本,例如 v1.14.0 (手动)
    3. 推送新 tag 镜像到 Docker Hub (手动)
    4. 在发版分支推送新 tag 代码到 Github (手动)
    5. 在文档仓库新建发版分支,例如 v1.13,修改 mkdocs.yml 文件中的 versionbranch 信息 (手动)
    6. 生成 Release Note PR(自动化)
    7. 合并 Release Note (手动)
    8. 手动 Merge github action 生成的 Release Note PR
    9. 修改 Github Release 信息(手动)
    10. 在 Github Release 页面编辑新生成的 Release,将标题修改为对应版本号(例如 v1.13.0),并复制上一步生成的 Release Note 到 Release 详情
    11. 修改发版分支的 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.12release-1.11。其中最新发版分支(例如 release-1.12)会进行较为频繁的迭代和发版,所有 Bug 修复,安全漏洞和依赖升级都会尽可能 backport 到最新发版分支。

    前一个发版分支(例如 release-1.11)会 backport 较为重大的 Bug 修复以及影响面较大的安全漏洞修复。

    发版周期

    Minor 版以主干分支是否有重大新功或重大的架构调整完成为契机按需发版,目前约为半年一次发布。Patch 版本根据分支 Bug 修复情况触发,一般会在 Bug 修复进入后一周内发布。

    Patch 版本发布方式

    目前 Patch 版本大部分工作都可以通过 hack/release.sh 脚本以自动化的方式来实现,主要发布步骤描述如下:

    1. 检查当前分支 Build 情况(自动化)
    2. 推送新 tag 镜像到 Docker Hub(自动化)
    3. 推送新 tag 代码到 Github(自动化)
    4. 修改代码中的版本信息(自动化)
    5. 修改文档仓库版本信息(自动化)
    6. 生成 Release Note PR(自动化)
    7. 合并 Release Note (手动)
    8. 手动 Merge github action 生成的 Release Note PR
    9. 修改 Github Release 信息(手动)
    10. 在 Github Release 页面编辑新生成的 Release,将标题修改为对应版本号(例如 v1.12.12),并复制上一步生成的 Release Note 到 Release 详情

    Minor 版本发布方式

    目前 Minor 分支主要工作还需要通过手动的方式来完成,主要发布步骤描述如下:

    1. 在 Github 上推送一个新的发布分支,例如 release-1.13 (手动)
    2. 将主干分支的 VERSION, dist/images/install.sh, charts/kube-ovn/values.yamlcharts/kube-ovn/Chart.yaml 中的版本信息修改为下个 Minor 版本,例如 v1.14.0 (手动)
    3. 推送新 tag 镜像到 Docker Hub (手动)
    4. 在发版分支推送新 tag 代码到 Github (手动)
    5. 在文档仓库新建发版分支,例如 v1.13,修改 mkdocs.yml 文件中的 versionbranch 信息 (手动)
    6. 生成 Release Note PR(自动化)
    7. 合并 Release Note (手动)
    8. 手动 Merge github action 生成的 Release Note PR
    9. 修改 Github Release 信息(手动)
    10. 在 Github Release 页面编辑新生成的 Release,将标题修改为对应版本号(例如 v1.13.0),并复制上一步生成的 Release Note 到 Release 详情
    11. 修改发版分支的 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 作为数据平面实现,目前支持 GeneveVxlanSTT 三种隧道封装协议。 这三种协议在功能,性能和易用性上存在着区别,本文档将介绍三种协议在使用中的差异,用户可根据自己的情况进行选择。 这三个协议在 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 作为数据平面实现,目前支持 GeneveVxlanSTT 三种隧道封装协议。 这三种协议在功能,性能和易用性上存在着区别,本文档将介绍三种协议在使用中的差异,用户可根据自己的情况进行选择。 这三个协议在 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_tablesiptable_nat,Kube-OVN 正常工作依赖上述模块。

    注意事项

    1. 如果内核版本为 3.10.0-862 内核 netfilter 模块存在 bug 会导致 Kube-OVN 内置负载均衡器无法工作,需要对内核升级,建议使用 CentOS 官方对应版本最新内核保证系统的安全。相关内核 bug 参考 Floating IPs broken after kernel upgrade to Centos/RHEL 7.5 - DNAT not working
    2. 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 或更高版本。
    3. 如果内核版本为 4.4 则对应的内核 openvswitch 模块存在问题,建议升级或手动编译 openvswitch 新版本模块进行更新
    4. 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_tablesiptable_nat,Kube-OVN 正常工作依赖上述模块。

    注意事项

    1. 如果内核版本为 3.10.0-862 内核 netfilter 模块存在 bug 会导致 Kube-OVN 内置负载均衡器无法工作,需要对内核升级,建议使用 CentOS 官方对应版本最新内核保证系统的安全。相关内核 bug 参考 Floating IPs broken after kernel upgrade to Centos/RHEL 7.5 - DNAT not working
    2. 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 或更高版本。
    3. 如果内核版本为 4.4 则对应的内核 openvswitch 模块存在问题,建议升级或手动编译 openvswitch 新版本模块进行更新
    4. 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

    评论