Kube-OVN组件

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

文章目录

介绍

kube-ovn是基于ovn开发的。https://man7.org/linux/man-pages/man7/ovn-architecture.7.html

ovn架构

在这里插入图片描述
组件说明
OVN/CMS Plugin操作北向数据库的一个组件对应kube-ovn中的kube-ovn-controller组件
OVN Northbound DB重要的组件里边存储逻辑数据例如logical switches,routers, ACL等
ovn-northd类似于一个集中控制器把上层notrh DB的数据翻译成下层south DB里边
OVN Southbound DB南向数据库存储数据分三类

  • 1.物理网络数据例如主机地址、tunnel封装格式。数据来自于底层ovn-controller组件向上发送的
  • 2.逻辑网络数据报文如何在逻辑网络里转发。数据来自于北向数据库
  • 3.物理网络与逻辑网络绑定的关系例如逻辑端口关联到哪个主机。

数据平面每个主机运行3个组件ovn-controller/ovs-vswitchd/ovsdb-server
ovn-controller是ovn的agent运行在每台节点北向会把物理网络数据写到south DB南向会把south DB的数据转换成openflow配到本地ovsdb table实现报文转发
ovs-vswitchd是ovs的核心组件和datapath的内核模块一起实现ovs基于流的数据交换与ovn-controller通信
ovsdb通过ovsdb协议与ovsdb server通信使用Netlink和内核模块通信

kube-ovn架构

在这里插入图片描述
组件说明
Cluster Router
Node Switch
ns Switch每个namespace绑定一个switch
每台节点上有eth0、ovn0挂载Node Switch主机网络与容器网络互通使用——》连接到ClusterRouter
控制平面

  • Deployment kube-ovn-controller基于go实现的控制器监听容器创建删除事件等
  • Deployment ovn-centralovn控制平面组件打包成docker镜像运行

数据平面

  • Daemonset kube-ovn-cni运行在每台节点cni插件用于pod做ip分配管理
  • Daemonset ovs-ovn是ovn官方组件运行南向组件ovn-controller、ovs-vswitchd、ovsdb-server

协作的网络组件

  • kube-proxy 本地node port访问使用
  • coredns 服务发现、域名解析

kube-ovn数据流向

kube-ovn数据流向
主机上参与的设备

  • eth0 主机网卡
  • genev_sys_6081 ovn生产的tunnel设备overylay模型各个节点通信依赖tunnel
    • genev协议加速数据包转发效率
  • ovn0 eth0的veth挂载在ovs bri-int网桥

三种场景

  • Pod <——>Pod同主机/跨主机
    ○ 同主机通信通过ovs的bridge int网桥做的二层转发
    ○ 跨主机先通过pod网卡发送到genev_sys_6081设备做genev封装——》发往eth0——》发往对端eth0网卡然后genev_sys_6081解封装然后发到对端pod

  • Pod——>Service IP
    ○ Pod转发到podservice IP对应ovn的loadbancer虚拟IP还是会转发到pod

  • Pod <——>Host主机 host/其他外部地址
    ○ host是集群里的一台节点通过策略路由默认出主机的口有一个分布式网关Pod访问非集群网络及非主机IP的时候从pod所在主机的ovn0网卡走主机默认路由出去。如果是集中式网关会走向特定主机路由

在这里插入图片描述

软件版本及注意事项

● Kubernetes >= 1.16
● Docker >= 1.12.6, Containerd >= 1.3.4
● 操作系统: CentOS 7/8, Ubuntu 16.04/18.04/20.04
● 其他 Linux 发行版需要检查一下内核模块是否存在 geneve, openvswitch, ip_tables, iptable_nat
● Kernel 启动需要开启 ipv6, 如果 kernel 启动参数包含 ipv6.disable=1 需要将其设置为 0
● Kube-Proxy 正常工作Kube-OVN 可以通过 SVC IP 访问到 Apiserver
● 确认 kubelet 配置参数开启了 CNI并且配置在标准路径下, kubelet 启动时包含了如下参数 --network-plugin=cni --cni-bin-dir=/opt/cni/bin --cni-conf-dir=/etc/cni/net.d
● 确认未安装其他网络插件或者其他网络插件已经被清除检查 /etc/cni/net.d/ 路径下无其他网络插件配置文件。如果之前安装过其他网络插件建议删除后重启机器清理残留网络资源。

Kube-OVN 所使用的的主机端口需要防火墙放开

组件端口用途
ovn-central6641/tcp, 6642/tcp, 6643/tcp, 6644/tcpovn-db 和 raft server
ovs-ovnGeneve 6081/udp, STT 7471/tcp, Vxlan 4789/udp隧道端口
kube-ovn-controller10660/tcp监控
kube-ovn-daemon10665/tcp监控
kube-ovn-monitor10661/tcp监控

kube-ovn-controller.yaml

      containers:
      - args:
        - --default-cidr=10.199.0.0/16
        - --default-exclude-ips=
        - --node-switch-cidr=100.64.0.0/16	#主机和容器通信使用
        - --network-type=geneve
        - --default-interface-name=
        - --default-vlan-id=100

kube-ovn-cni.yaml

  containers:
  - args:
    - --enable-mirror=false
    - --encap-checksum=true
    - --service-cluster-ip-range=10.96.0.0/12
    - --iface=eth0
    - --network-type=geneve
    - --default-interface-name=

高可用部署安装

https://github.com/kubeovn/kube-ovn/wiki/%E4%B8%80%E9%94%AE%E5%AE%89%E8%A3%85

kube-ovn运维

kube-ovn-pingerDaemonSet管理节点间周期性检查联通性
● Pod——Pod
● Pod——Host
● Pod——ApiServer
● Pod——DNS

查看Pod日志

~]# kubectl logs -f kube-ovn-pinger-sz8s5 -nkube-system --tail 20
在这里插入图片描述

组件监控

https://github.com/kubeovn/kube-ovn/tree/master/dist/monitoring

kubectl ko插件

[root@VM-2-29-centos ~]# kubectl ko
kubectl ko {subcommand} [option...]
Available Subcommands:
  [nb|sb] [status|kick|backup|dbstatus|restore]     ovn-db operations show cluster status, kick stale server, backup database, get db consistency status or restore ovn nb db when met 'inconsistent data' error
  nbctl [ovn-nbctl options ...]    invoke ovn-nbctl
  sbctl [ovn-sbctl options ...]    invoke ovn-sbctl
  vsctl {nodeName} [ovs-vsctl options ...]   invoke ovs-vsctl on the specified node
  ofctl {nodeName} [ovs-ofctl options ...]   invoke ovs-ofctl on the specified node
  dpctl {nodeName} [ovs-dpctl options ...]   invoke ovs-dpctl on the specified node
  appctl {nodeName} [ovs-appctl options ...]   invoke ovs-appctl on the specified node
  tcpdump {namespace/podname} [tcpdump options ...]     capture pod traffic
  trace {namespace/podname} {target ip address} {icmp|tcp|udp} [target tcp or udp port]    trace ovn microflow of specific packet
  diagnose {all|node} [nodename]    diagnose connectivity of all nodes or a specific node
  reload restart all kube-ovn components

kubectl ko nbctl
~]# kubectl ko nbctl show	#查看逻辑交换机路由器Pod IP
~]# kubectl ko nbctl ls-lb-list ovn-default	#查看ovn中LB vip映射

ACL检查
~]# kubectl ko nbctl acl-list ovn-default
~]# kubectl ko nbctl list port group	#查看networkpolicy
~]# kubectl ko nbctl --type=port-group acl-list oneportgroup
~]# kubectl ko nbctl list address_set

策略路由转发检查
~]# kubectl ko nbctl lr-route-list ovn-cluster
IPv4 Routes
                10.0.2.29                100.64.0.3 dst-ip	#主机地址——》ovn0网卡
                10.0.2.31                100.64.0.4 dst-ip
                10.0.2.42                100.64.0.2 dst-ip
                10.0.2.49                100.64.0.5 dst-ip

kubectl ko sbctl
~]# kubectl ko sbctl show	#查看各主机端口绑定的关系
~]# kubectl ko sbctl lflow-list	#查看流表

kubectl ko vsctl
~]# kubectl ko vsctl 10.0.2.29 show	#查看特定主机上端口绑定及tunnel信息

kubectl ko tcpdump
对Kube-ovn容器网络的任意Pod进行抓包
~]# kubectl ko tcpdump kube-system/coredns-d84bc975c-xd9mf

kubectl ko trace
对Logical flow的trace
~]# kubectl ko trace kube-system/coredns-d84bc975c-r8qps {target ip address}{icmp|tcp|udp}[target tcp or udp port]
示例~]# kubectl ko trace default/nginx-deployment-98cfc48cc-kknrg 8.8.8.8 icmp

kubectl ko diagnose  #对集群或者特定节点做一次快速巡检
~]# kubectl ko diagnose all

网络相关

~]# iperf3 -c 192.168.35.108 -p 5001 -b 10M -t 3600 -i 2 -P 1
参数说明
-c : 服务端的ip地址
-p : 端口号
-b : 每一次发送的数据大小
-t : 总的发送时间(单位秒)
-i : 发送数据的时间间隔(单位秒)
-P : 表示线程个数不指定则默认单线程

补发于2022-07-04

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6