ovn-ovs
2021-04-07 15:28:55 0 举报
ovn-ovs
作者其他创作
大纲/内容
2、创建management port(对应图中k8s1)这部分的主要内容为master node创建一个logical switch用于连接distributed router。这个switch仅有一个logical port(A OVS internal interface),它有如下用途:通过该logical port可以用私有IP访问其他node上运行的容器当在master node上创建该port时,集群中的容器就不用通过NAT也能访问k8s daemon了node可以用pod的IP地址对pod进行health-check具体操作步骤如下:1 创建一个router port,并且给它分配该local_subnet(该node分配到的IP地址区间)的第一个地址。2 创建一个logical switch并且设置它的子网范围,名字就为node_name3 将该logical switch连接到router上4 如果br-int不存在,则创建之,并且在它上面创建一个OVS internal interface,名字为\"k8s-%s\" % (node_name[:11])5 创建一个OVN logical port,名字为\"k8s-\" + node_name,之后再对上文的internal interface进行配置6 首先启动该interface,如果该interface之前就已经存在了,就删除其上的路由和IP,再给该interface配置IP,并添加到达整个集群的路由7 最后,将load balancer添加到logical switch上
Pod 下发到 apiserver 后 kube-ovn-controller 会 watch 的新生成了一个 Pod,然后调用 ovn-nb 的接口去创建一个虚拟交换机接口,成功后将 OVN 分配的 IP、Mac、GW 等信息反写到这个 Pod 的 Annotation 中。
join
node_local_switch
ovs bridgebr-int 在linux中仅为一个网卡设备并非Linux bridgeovs-system对应datapath的端口
veth pair
add/del
kubelet
api-server
kube-ovn-cniserver/daemonset
gateway 配置流程(对应图中GR_k8s1)1 不能同时指定参数args.physical_interface和args.bridge_interface,两个参数代表了两种方式2 首先判断gateway router之前是否已经有被创建,如果没有的话,创建之,且名字为\"GR_%s\" % (node_name)3 接着再将gateway router和上文中的\"join\"相连接4 在gateway router中添加静态路由,将distributed router作为nexthop,而gateway和各个distributed router构成的子网为100.64.1.0/24,连接端口的ip地址通过generate_gateway_ip()生成5 在distributed router中添加静态路由,并且将第一个gateway router作为默认网关6 为每个gateway router创建两个north-south load-balancer7 创建一个external switch用于连接physical interface,名字为\"ext_%s\" % (node_name)8 当我们使用网桥方案,例如将eth0绑定到网桥breth0上,首先进行操作,保证网桥mac地址不变(因为通常有新端口加入时,网桥的端口会发生变化)9 设置iface_id为\"%s_%s\
linux 协议栈
ovn-default
kube-scheduler
type:localnet的网卡
pod
brens192 网卡10.48.51.217
onv-cluster 静态路由表[root@control-plane crx]# kubectl ko nbctl lr-route-list ovn-clusterIPv4 Routes 192.168.152.130 100.64.0.2 dst-ip 10.16.0.3 100.64.0.2 src-ip 10.16.0.4 100.64.0.2 src-ip 10.16.0.5 100.64.0.2 src-ip 10.16.0.6 100.64.0.2 src-ip 10.16.0.7 100.64.0.2 src-ip 10.16.0.8 100.64.0.2 src-ip
ovn_cluster_router NAT配置sh-5.1# ovn-nbctl lr-nat-list ovn_cluster_routerTYPE EXTERNAL_IP EXTERNAL_PORT LOGICAL_IP EXTERNAL_MAC LOGICAL_PORTdnat_and_snat 169.254.0.15 10.233.65.2 66:5d:92:8f:06:f2 k8s-k8s1dnat_and_snat 169.254.6.23 10.233.64.2 9e:ce:a5:a3:57:95 k8s-k8s2
ovn0网卡会给一个node网段,这个网段与宿主机网段不同
brens192 网卡
br-int
pod信息node/namespace/service/endpoint/networkpolicy
10.48.51.217/24
GR_k8s1
ovn-k8s-gw0 网卡
switch 4efd2cfd-6e25-473d-8767-9d6afb931ea5 (k8s1) port stor-k8s1 type: router addresses: [\"0a:58:0a:e9:41:01\"] router-port: rtos-k8s1router bad24c8e-5d63-4509-b88e-eaf8e4339546 (ovn_cluster_router) port rtos-k8s1 mac: \"0a:58:0a:e9:41:01\" networks: [\"10.233.65.1/24\
k8s1
100.64.0.1/16
宿主机网卡,与虚拟node网卡通过linux 路由表进行路由
get
containernamespaceovsdb中存储的是root ns中verh pair容器ns的verh pair在ovs中没有体现
br-local ovs bridge
distributed router
rootns
ns1 switch
rtoj-GR_k8s1
ext_k8s2
在节点上,先调用CRI创建pod,再调用cni进行网络配置。kube-ovn-cni 本身是很薄的一层,主要工作是适配 CNI 的协议和 Kubelet 对接,将标准的 cni add/del 命令发送到每台机器上的 kube-ovn-cniserver 进行后续处理。
ovn-k8s-mp0 网卡10.233.65.2
ens192网卡
ovn-cluster
OVS
kube-ovn-cni/二进制文件
ovn_cluster_router169.254.0.2/20
brens192 ovs bridge
ext_k8s1
watch Kubernetes 内所有和网络相关的资源变化,例如 Pod、Node、Namespace、Service、Endpoint 和 NetworkPolicy。每当资源发生变化 kube-ovn-controller 会计算预期的状态,并将网络对应的变化翻译成 OVN 北向数据库的资源对象。同时 kube-ovn-controller 会将配置具体网络的信息,例如分配的 IP、Mac、网关等信息再以 Annotation 的方式回写到 Kubernetes 的资源里,方便后续的处理。
ovn0网卡
CNIServer 会反查 Pod 的 Annotation 获得具体的 IP 和 Mac 信息来配置本地的 OVS 和容器网卡,完成整个工作流。
100.64.0.2/16
k8s-k8s1 10.233.65.2
OVN-NB
list/watch
分布式网关
GR_k8s2gateway router
k8s2
1、master初始化 (对应图中ovn_cluster_router和join)以node name创建一个distributed logical router创建两个load balancer用于处理east-west traffic,一个处理TCP,另一个处理UDP创建一个名为\"join\"的logical switch用于连接gateway router和distributed router。\"join\"的IP地址范围为100.64.1.0/24将distributed router和\"join\"相连接
ens192 网卡
ovn_cluster_router 静态路由sh-5.1# ovn-nbctl lr-route-list ovn_cluster_routerIPv4 Routes 100.64.0.2 100.64.0.2 dst-ip 100.64.0.3 100.64.0.3 dst-ip 10.233.64.0/24 10.233.64.2 src-ip 10.233.65.0/24 10.233.65.2 src-ipIPv6 Routes fd98::2 fd98::2 dst-ip fd98::3 fd98::3 dst-ip
ovs-system
rtoe-GR_k8s2
rtoj-GR_k8s2
update ovn object
kube-ovn-controller/deployment/webhook
br-local网卡
ns2 switch
rtoj-ovn_cluster_router
0 条评论
下一页