OVN

OVN路由器对等连接

公有云网络中通过VPC来实现网络的隔离,VPC可以对应到OVN虚拟网络逻辑路由器,那么如何来实现两个路由器下子网通过路由方式直接访问呢?下面我来一起看看OVN如何配置的。 添加一个新的路由器和交换机 sudo ovn-nbctl create Logical_Router name=router2 options:chassis=6fa2da75-1393-4efe-984d-0c0310b95ad3 fecc0e10-0e9e-440e-aaac-5bb667bb2991 sudo ovn-nbctl ls-add lswitch3 连接路由器与交换机 # 路由器上添加一个端口 sudo ovn-nbctl lrp-add router2 lr2-ls3 52:54:00:c1:68:90 10.2.0.1/24 # 交换机上添加一个端口,类型为router,与路由器端口关联 sudo ovn-nbctl lsp-add lswitch3 ls3-lr2 sudo ovn-nbctl lsp-set-type ls3-lr2 router sudo ovn-nbctl lsp-set-addresses ls3-lr2 52:54:00:c1:68:90 sudo ovn-nbctl lsp-set-options ls3-lr2 router-port=lr2-ls3 在节点上添加一个ovs internal port # 交换机添加一个端口 sudo ovn-nbctl lsp-add lswitch3 ls3-vm2 sudo ovn-nbctl lsp-set-addresses ls3-vm2 "02:ac:10:ff:01:37 10.2.0.70" sudo ovn-nbctl lsp-set-port-security ls3-vm2 "02:ac:10:ff:01:37 10.2.0.70" # 主机上添加vm2接口,与交换机连接 sudo ifconfig br-int up sudo ovs-vsctl add-port br-int vm2 -- set interface vm2 type=internal sudo ip netns add vm2 sudo ip link set vm2 netns vm2 sudo ip netns exec vm2 ip link set lo up sudo ip netns exec vm2 ip link set vm2 up sudo ip netns exec vm2 ip link set vm2 address 02:ac:10:ff:01:37 sudo ip netns exec vm2 ip addr add 10.

继续阅读

容器如何使用虚拟化网络

前面文章介绍了Kube-OVN基于OVS/OVN将网络虚拟化带入云原生领域。下面我们通过下面的实验场景来看一下容器如何使用虚拟化网络的,从而了解Kube-OVN的基本工作原理。 实验环境 实验使用的是两台虚拟机:ovn-1为控制节点和计算节点,IP地址为:192.168.0.115。ovn-2为计算节点,IP地址为:192.168.0.114。 实验场景 1,两个主机上进入网络命名空间,配置不同网段进行通信 2,Docker运行容器,通过OVS internal port进行通信 3,Docker运行容器,通过veth pair进行通信 安装部署 #控制节点和计算节点 sudo apt install net-tools sudo apt-get install python-six openssl -y sudo apt-get install openvswitch-switch openvswitch-common -y sudo systemctl disable apparmor #控制节点 sudo apt-get install ovn-central ovn-common ovn-host -y #计算节点 sudo apt-get install ovn-host ovn-common -y 配置ovn 设置ovn数据库允许tcp进行连接,默认只允许socket本地访问。 #控制节点 sudo ovn-nbctl set-connection ptcp:6641:0.0.0.0 -- set connection . inactivity_probe=60000 sudo ovn-sbctl set-connection ptcp:6642:0.0.0.0 -- set connection . inactivity_probe=60000 sudo ovs-appctl -t ovsdb-server ovsdb-server/add-remote ptcp:6640:192.

继续阅读

Kube-OVN如何实现Pod和主机网络连通

下面从Kube-OVN代码看一下如何实现Pod和主机网络连通的,再在实验环境中按照Kube-OVN方式进行实验。 | Kube-OVN初始化ovn0 Kube-OVN在主机上添加一个OVS的internal port:ovn0,实现主机和OVS网络的通信。 1,将ovn0连接到OVS集成网桥br-int,类型为internal port,与交换机端口关联。 2,配置ovn0的MAC, IP, MTU并启动接口。 // InitNodeGateway init ovn0 func InitNodeGateway(config *Configuration) error { ... return configureNodeNic(portName, ipAddr, gw, mac, config.MTU) } func configureNodeNic(portName, ip, gw string, macAddr net.HardwareAddr, mtu int) error { ipStr := util.GetIpWithoutMask(ip) raw, err := ovs.Exec(ovs.MayExist, "add-port", "br-int", util.NodeNic, "--", "set", "interface", util.NodeNic, "type=internal", "--", "set", "interface", util.NodeNic, fmt.Sprintf("external_ids:iface-id=%s", portName), fmt.Sprintf("external_ids:ip=%s", ipStr)) if err != nil { klog.Errorf("failed to configure node nic %s: %v, %q", portName, err, raw) return fmt.

继续阅读

kube-ovn实现Kubernetes多租户网络管理

Kubernetes容器平台正在成为越来越多的数据中心基础平台,我们希望Kubernetes能够满足虚拟化平台的一些基本要求,比如实现了多租户的灵活的软件定义网络SDN。工作中一个项目在使用Kubernetes平台,所以考虑通过KubeVirt来管理虚拟机,同时使用kube-ovn来实现多租户网络隔离。下面我们一起来看看如何使用kube-ovn来管理网络。 基本概念 Underlay/Overlay网络 Underlay网络是指传统IT基础设施网络,是由交换机、路由器、负载均衡等设备组成的底层物理网络。Overlay网络是通过网络虚拟化技术,在Underlay网络上构建出的虚拟的逻辑网络。 OVS/OVN Open vSwitch(OVS)是一个多层软件交换机,OVS只里一个单机软件,没有集群的信息。Open Virtual Nework(OVN)提供了一个集中式的OVS控制器,从集群的角度对整个网络设施进行编排。 使用Kubernetes后会发现,Kubernetes网络功能缺少软件定义网络SDN能力,缺少VPC, Subnet, Nat, Route, SecurityGroup等常用功能。Kube-OVN基于OVN为Kubernetes网络提供了网络编排能力。 CNI 容器网络接口(Container Network Interface),由CoreOS提出的一种容器网络规范,主要内容是容器创建时的网络分配,和容器被删除时释放网络资源。CNI让网络层变得可插拔,只要遵循CNI的协议规范,容器管理平台就可以调用CNI插件可执行文件提供网络功能。Kubernetes网络模型采用了CNI容器网络接口规范。 macvlan macvlan是一种Linux内核的网络虚拟化技术,从一个主机接口虚拟出多个虚拟网络接口。macvlan可以在物理网卡构成的父接口上添加子接口,每个子接口都拥有独立的MAC地址和IP地址。容器可以通过绑定子接口,拥有与物理网络通信的能力。这解决了容器接入物理网络需求,比如我们需要通过docker运行gitlab服务,gitlab服务需要用到80,443,22端口,这些常用端口经常会产生冲突,那么我们可以通过docker命令创建一个macvlan驱动类型的网络来拥有独立MAC和IP地址。Kubernetes内置CNI插件包含了macvlan,配置使用macvlan CNI,可以让Kubernetes的Pod使用Underlay网络 。 Kube-OVN Kube-OVN插件将Kubernetes容器网络接入ovs网络。提供了vpc, router, switch, subnet管理能力。 Multus Multus CNI插件提供了Kubernetes Pod添加多块网卡的能力。容器同时接入多个不同的网络,解决了类似Ceph这种区分多个网络应用场景。 IPAM IP地址管理(IP Address Management),分配和维护IP地址,DNS,网关,路由等信息。CNI插件在执行过程中调用相应的IPAM插件,IPAM插件将IP相关信息返回到主CNI插件。IPAM插件减少了CNI插件重复编写相同代码管理IP的工作,而且解决了多个CNI插件统一集中IP管理的需求。 场景需求 1,通过VPC实现网络租户隔离 2,通过NAT网关SNAT访问外网 3,通过NAT网关DNAT暴露端口给外网访问 安装部署 安装Kube-OVN curl -O https://raw.githubusercontent.com/kubeovn/kube-ovn/release-1.10/yamls/crd.yaml curl -O https://raw.githubusercontent.com/kubeovn/kube-ovn/release-1.10/yamls/ovn.yaml curl -O https://raw.githubusercontent.com/kubeovn/kube-ovn/release-1.10/yamls/kube-ovn.yaml curl -O https://raw.githubusercontent.com/kubeovn/kube-ovn/master/charts/templates/kubeovn-crd.yaml sed -i 's/\$addresses/<Node IP>/g' ovn.yaml kubectl label node ubuntuserver1 kube-ovn/role=master kubectl apply -f crd.yaml kubectl apply -f kubeovn-crd.

继续阅读

OVN虚拟网络出网网关配置

SuKai in OVN

前一篇文章介绍了,OVN虚拟网络访问主机网络的方式,下面一起看一下Kube-OVN如何配置OVN虚拟网络访问外部网络的。 访问主机网络 1,每台主机上配置ovn0接口,通过internal port方式与虚拟网络连接。 2,主机上配置路由条目,将虚拟网段路由指向join子网网关地址,使主机能够路由到虚拟网络。 3,OVN路由器上配置默认路由到join子网网关地址,并配置策略路由条目:目标为主机地址到主机的ovn0接口重路由,使虚拟网络能够到主机网络。 # 策略路由方式, kube-ovn采用的是策略路由 sudo ovn-nbctl lr-policy-add router 30000 "ip4.dst == 192.168.10.89" reroute 100.64.0.3 sudo ovn-nbctl lr-policy-add router 30000 "ip4.dst == 192.168.10.40" reroute 100.64.0.2 # 静态路由方式 sudo ovn-nbctl lr-route-add router 192.168.10.89 100.64.0.3 sudo ovn-nbctl lr-route-add router 192.168.10.40 100.64.0.2 # 主机IP 192.168.10.89 ovn0接口IP 100.64.0.3 # 主机IP 192.168.10.40 ovn0接口IP 100.64.0.2 访问外部网络 有两种出网方式,分布式出网网关和集中式出网网关 1,配置路由策略,来源于虚拟网络子网网段到下一跳进行重路由,这里下一跳是主机的join子网ovn0地址。如果是分布式的可以根据不同的源地址指定到不同主机上,如果是集中式的,全部到某一台主机上路由出网。 2,网络地址转换MASQUERADE,当虚拟网络子网的数据包从主机网卡上访问外网时,源地址伪装为主机地址。 sudo ovn-nbctl lr-policy-add router 29000 "ip4.src == 10.0.0.0/24" reroute 100.64.0.2 sudo ovn-nbctl lr-policy-add router 29000 "ip4.

继续阅读