19.2. OVN-Kubernetes 架构
19.2.1. OVN-Kubernetes 架构简介
下图显示了 OVN-Kubernetes 架构。
图 19.1. OVK-Kubernetes 架构
主要组件是:
- Cloud Management System (CMS) - OVN 的特定平台客户端,为 OVN 集成提供 CMS 特定的插件。该插件将云管理系统的逻辑网络配置概念转换为 OVN 理解的 CMS 配置数据库中。
- 
							OVN 北向数据库(nbdb)容器 - 存储由 CMS 插件传递的逻辑网络配置。
- 
							OVN 南向数据库(sbdb)容器 - 存储每个节点上的 Open vSwitch (OVS)系统的物理和逻辑网络配置状态,包括绑定它们的表。
- 
							OVN 北向守护进程 (ovn-northd) - 这是nbdb容器和sbdb容器之间的中介客户端。它以传统网络概念的形式将逻辑网络配置(从nbdb容器)转换为sbdb容器中的逻辑数据路径流。ovn-northd守护进程的容器名称为northd,它在ovnkube-nodepod 中运行。
- 
							ovn-controller - 这是与 OVS 和 hypervisor 交互的 OVN 代理,适用于 sbdb容器所需的任何信息或更新。ovn-controller从sbdb容器读取逻辑流,将它们转换为OpenFlow流,并将它们发送到节点的 OVS 守护进程。容器名称为ovn-controller,它在ovnkube-nodepod 中运行。
OVN 北向数据库、北向数据库和南向数据库在集群中的每个节点上运行,大部分包含对该节点本地的和进程信息。
					OVN 北向数据库具有通过云管理系统(CMS)传递到它的逻辑网络配置。OVN 北向数据库包含网络的当前状态,以逻辑端口、逻辑交换机、逻辑路由器等形式显示。ovn-northd (northd 容器) 连接到 OVN 北向数据库和 OVN 南向数据库。它以传统网络概念的形式将逻辑网络配置转换为 OVN 北向数据库中的逻辑数据路径流。
				
					OVN 南向数据库具有网络的物理和逻辑表示,并将它们连接在一起。它包含节点的机箱信息,以及其他结构,如连接到集群中其他节点所需的远程传输交换机端口。OVN 南向数据库还包含所有逻辑流。逻辑流与每个节点上运行的 ovn-controller 进程共享,ovn-controller 将它们转换为 OpenFlow 规则到程序 Open vSwitch(OVS)。
				
					Kubernetes control plane 节点在单独的节点上包含两个 ovnkube-control-plane pod,它为集群中的每个节点执行中央 IP 地址管理 (IPAM) 分配。在任何给定时间,只有一个 ovnkube-control-plane pod 是领导。
				
19.2.2. 列出 OVN-Kubernetes 项目中的所有资源
查找在 OVN-Kubernetes 项目中运行的资源和容器对于帮助您了解 OVN-Kubernetes 网络实施非常重要。
先决条件
- 
							使用具有 cluster-admin角色的用户访问集群。
- 
							已安装 OpenShift CLI(oc)。
流程
- 运行以下命令,以获取 OVN-Kubernetes 项目中的所有资源、端点和 - ConfigMap:- oc get all,ep,cm -n openshift-ovn-kubernetes - $ oc get all,ep,cm -n openshift-ovn-kubernetes- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 集群中的每个节点都有一个 - ovnkube-nodepod。- ovnkube-config配置映射具有 OpenShift Container Platform OVN-Kubernetes 配置。
- 运行以下命令,列出 - ovnkube-nodepod 中的所有容器:- oc get pods ovnkube-node-bcvts -o jsonpath='{.spec.containers[*].name}' -n openshift-ovn-kubernetes- $ oc get pods ovnkube-node-bcvts -o jsonpath='{.spec.containers[*].name}' -n openshift-ovn-kubernetes- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 预期输出 - ovn-controller ovn-acl-logging kube-rbac-proxy-node kube-rbac-proxy-ovn-metrics northd nbdb sbdb ovnkube-controller - ovn-controller ovn-acl-logging kube-rbac-proxy-node kube-rbac-proxy-ovn-metrics northd nbdb sbdb ovnkube-controller- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - ovnkube-nodepod 由几个容器组成。它负责托管北向数据库(- nbdb容器)、南向数据库(- sbdb容器)、北守护进程 (- northd容器)、- ovn-controller和- ovnkube-controller容器。- ovnkube-controller容器会监视 API 对象,如 pod、egress IP、命名空间、服务、端点、出口防火墙和网络策略。它还负责为该节点从可用子网池中分配 pod IP。
- 运行以下命令,列出 - ovnkube-control-planepod 中的所有容器:- oc get pods ovnkube-control-plane-65c6f55656-6d55h -o jsonpath='{.spec.containers[*].name}' -n openshift-ovn-kubernetes- $ oc get pods ovnkube-control-plane-65c6f55656-6d55h -o jsonpath='{.spec.containers[*].name}' -n openshift-ovn-kubernetes- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 预期输出 - kube-rbac-proxy ovnkube-cluster-manager - kube-rbac-proxy ovnkube-cluster-manager- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - ovnkube-control-planepod 有一个容器(- ovnkube-cluster-manager),它驻留在每个 OpenShift Container Platform 节点上。- ovnkube-cluster-manager容器分配 pod 子网,将子网 IP 传输交换机到集群中的每个节点。- kube-rbac-proxy容器监控- ovnkube-cluster-manager容器的指标。
19.2.3. 列出 OVN-Kubernetes 北向数据库内容
					每个节点都由该节点上 ovnkube-node pod 中运行的 ovnkube-controller 容器控制。若要了解 OVN 逻辑网络实体,您需要检查作为容器在该节点上的 ovnkube-node pod 中运行的北向数据库,以查看您要查看的节点中的对象。
				
先决条件
- 
							使用具有 cluster-admin角色的用户访问集群。
- 
							已安装 OpenShift CLI(oc)。
						要在集群中运行 ovn nbctl 或 sbctl 命令,您必须在相关节点上的 nbdb 或 sbdb 容器中打开远程 shell
					
- 运行以下命令列出 pod: - oc get po -n openshift-ovn-kubernetes - $ oc get po -n openshift-ovn-kubernetes- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 可选: 要使用节点信息列出 pod,请运行以下命令: - oc get pods -n openshift-ovn-kubernetes -owide - $ oc get pods -n openshift-ovn-kubernetes -owide- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 运行以下命令,进入 pod 以查看北向数据库: - oc rsh -c nbdb -n openshift-ovn-kubernetes ovnkube-node-55xs2 - $ oc rsh -c nbdb -n openshift-ovn-kubernetes ovnkube-node-55xs2- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 运行以下命令以显示北向数据库中的所有对象: - ovn-nbctl show - $ ovn-nbctl show- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 此处列出输出太长。列表中包含 NAT 规则、逻辑交换机、负载均衡器等。 - 您可以使用以下可选命令缩小并专注于特定组件: - 运行以下命令以显示逻辑路由器列表: - oc exec -n openshift-ovn-kubernetes -it ovnkube-node-55xs2 \ -c northd -- ovn-nbctl lr-list - $ oc exec -n openshift-ovn-kubernetes -it ovnkube-node-55xs2 \ -c northd -- ovn-nbctl lr-list- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - 45339f4f-7d0b-41d0-b5f9-9fca9ce40ce6 (GR_ci-ln-t487nnb-72292-mdcnq-master-2) 96a0a0f0-e7ed-4fec-8393-3195563de1b8 (ovn_cluster_router) - 45339f4f-7d0b-41d0-b5f9-9fca9ce40ce6 (GR_ci-ln-t487nnb-72292-mdcnq-master-2) 96a0a0f0-e7ed-4fec-8393-3195563de1b8 (ovn_cluster_router)- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 注意- 在这个输出中,您可以看到每个节点中存在路由器,再加上 - ovn_cluster_router。
- 运行以下命令以显示逻辑交换机列表: - oc exec -n openshift-ovn-kubernetes -it ovnkube-node-55xs2 \ -c nbdb -- ovn-nbctl ls-list - $ oc exec -n openshift-ovn-kubernetes -it ovnkube-node-55xs2 \ -c nbdb -- ovn-nbctl ls-list- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - bdd7dc3d-d848-4a74-b293-cc15128ea614 (ci-ln-t487nnb-72292-mdcnq-master-2) b349292d-ee03-4914-935f-1940b6cb91e5 (ext_ci-ln-t487nnb-72292-mdcnq-master-2) 0aac0754-ea32-4e33-b086-35eeabf0a140 (join) 992509d7-2c3f-4432-88db-c179e43592e5 (transit_switch) - bdd7dc3d-d848-4a74-b293-cc15128ea614 (ci-ln-t487nnb-72292-mdcnq-master-2) b349292d-ee03-4914-935f-1940b6cb91e5 (ext_ci-ln-t487nnb-72292-mdcnq-master-2) 0aac0754-ea32-4e33-b086-35eeabf0a140 (join) 992509d7-2c3f-4432-88db-c179e43592e5 (transit_switch)- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 注意- 在这个输出中,您可以看到每个节点的 ext 交换机以及节点名称本身和 join 开关。 
- 运行以下命令以显示负载均衡器列表: - oc exec -n openshift-ovn-kubernetes -it ovnkube-node-55xs2 \ -c nbdb -- ovn-nbctl lb-list - $ oc exec -n openshift-ovn-kubernetes -it ovnkube-node-55xs2 \ -c nbdb -- ovn-nbctl lb-list- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 注意- 在这个截断的输出中,您可以看到有许多 OVN-Kubernetes 负载均衡器。OVN-Kubernetes 中的负载均衡器是服务的表示。 
 
- 运行以下命令,以显示可用于命令 - ovn-nbctl的选项:- oc exec -n openshift-ovn-kubernetes -it ovnkube-node-55xs2 \ -c nbdb ovn-nbctl --help - $ oc exec -n openshift-ovn-kubernetes -it ovnkube-node-55xs2 \ -c nbdb ovn-nbctl --help- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
19.2.4. ovn-nbctl 的命令行参数检查北向数据库内容
					下表描述了可与 ovn-nbctl 一起使用的命令行参数,以检查北向数据库的内容。
				
						在您要查看内容的 pod 中打开一个远程 shell,然后运行 ovn-nbctl 命令。
					
| 参数 | 描述 | 
|---|---|
| 
									 | 从特定节点看到的北向数据库内容概述。 | 
| 
									 | 显示与指定交换机或路由器关联的详细信息。 | 
| 
									 | 显示逻辑路由器。 | 
| 
									 | 
									使用  | 
| 
									 | 显示指定路由器的网络地址转换详情。 | 
| 
									 | 显示逻辑交换机 | 
| 
									 | 
									使用  | 
| 
									 | 获取逻辑端口的类型。 | 
| 
									 | 显示负载平衡器。 | 
19.2.5. 列出 OVN-Kubernetes 南向数据库内容
					每个节点都由该节点上 ovnkube-node pod 中运行的 ovnkube-controller 容器控制。若要了解 OVN 逻辑网络实体,您需要检查作为容器在该节点上的 ovnkube-node pod 中运行的北向数据库,以查看您要查看的节点中的对象。
				
先决条件
- 
							使用具有 cluster-admin角色的用户访问集群。
- 
							已安装 OpenShift CLI(oc)。
						要在集群中运行 ovn nbctl 或 sbctl 命令,您必须在相关节点上的 nbdb 或 sbdb 容器中打开远程 shell
					
- 运行以下命令列出 pod: - oc get po -n openshift-ovn-kubernetes - $ oc get po -n openshift-ovn-kubernetes- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 可选: 要使用节点信息列出 pod,请运行以下命令: - oc get pods -n openshift-ovn-kubernetes -owide - $ oc get pods -n openshift-ovn-kubernetes -owide- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 进入 pod 以查看南向数据库: - oc rsh -c sbdb -n openshift-ovn-kubernetes ovnkube-node-55xs2 - $ oc rsh -c sbdb -n openshift-ovn-kubernetes ovnkube-node-55xs2- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 运行以下命令以显示南向数据库中的所有对象: - ovn-sbctl show - $ ovn-sbctl show- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 此详细输出显示了附加到机箱的机箱和端口,本例中为所有路由器端口以及像主机网络一样运行的任何内容。任何 pod 使用源网络地址转换(SNAT)与更广泛的网络通信。其 IP 地址转换为运行 Pod 的节点的 IP 地址,然后发送到网络。 - 除了机箱信息外,南向数据库还具有所有逻辑流,这些逻辑流随后发送到每个节点上运行的 - ovn-controller。- ovn-controller将逻辑流转换为开放流规则,最终程序- OpenvSwitch以便您的 pod 可以遵循开放流规则,并使其从网络移出。
- 运行以下命令以 - ovn-sbctl命令显示可用的选项:- oc exec -n openshift-ovn-kubernetes -it ovnkube-node-55xs2 \ -c sbdb ovn-sbctl --help - $ oc exec -n openshift-ovn-kubernetes -it ovnkube-node-55xs2 \ -c sbdb ovn-sbctl --help- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
19.2.6. ovn-sbctl 的命令行参数,以检查南向数据库内容
					下表描述了可用于 ovn-sbctl 的命令行参数,以检查南向数据库的内容。
				
						在您要查看内容的 pod 中打开一个远程 shell,然后运行 ovn-sbctl 命令。
					
| 参数 | 描述 | 
|---|---|
| 
									 | 从特定节点看到的南向数据库内容概述。 | 
| 
									 | 列出特定端口的南向数据库的内容。 | 
| 
									 | 列出逻辑流。 | 
19.2.7. OVN-Kubernetes 逻辑架构
					OVN 是网络虚拟化解决方案。它创建逻辑交换机和路由器。这些交换机和路由器是互连的,以创建任何网络拓扑。当您运行 ovnkube-trace 时,日志级别设置为 2 或 5 时,OVN-Kubernetes 逻辑组件会被公开。下图显示了如何在 OpenShift Container Platform 中连接路由器和交换机。
				
图 19.2. OVN-Kubernetes 路由器和交换机组件
涉及数据包处理的关键组件有:
- 网关路由器
- 
								网关路由器有时称为 L3 网关路由器,通常在分布式路由器和物理网络之间使用。网关路由器(包括其逻辑补丁端口)绑定到物理位置(而非分布式)或机箱。此路由器上的跳接端口称为 ovn-southbound 数据库(ovn-sbdb)中的 l3gateway 端口。
- 分布式逻辑路由器
- 分布式逻辑路由器和其后面的逻辑交换机(虚拟机和容器附加)有效驻留在每个虚拟机监控程序上。
- 加入本地交换机
- 加入本地交换机用于连接分布式路由器和网关路由器。它可减少分布式路由器中所需的 IP 地址数量。
- 使用跳接端口的逻辑交换机
- 带有补丁端口的逻辑交换机用于虚拟化网络堆栈。它们通过隧道连接远程逻辑端口。
- 使用 localnet 端口的逻辑交换机
- 使用 localnet 端口的逻辑交换机用于将 OVN 连接到物理网络。它们通过将数据包桥接到使用 localnet 端口直接连接的物理 L2 片段来连接远程逻辑端口。
- 补丁端口
- 跳接端口代表逻辑交换机和逻辑路由器之间以及对等逻辑路由器之间的连接。单个连接在每个此类连接点上都有一对跳接端口。
- l3gateway 端口
- 
								l3gateway 端口是 ovn-sbdb中用于网关路由器中使用的逻辑补丁端口的端口绑定条目。它们称为 l3gateway 端口,而不是跳接端口,而只是这些端口绑定到机箱,就像网关路由器本身一样。
- localnet 端口
- 
								桥接逻辑交换机上存在 localnet 端口,允许从每个 ovn-controller实例连接到本地可访问的网络。这有助于从逻辑交换机对物理网络的直接连接建模。逻辑交换机只能附加一个 localnet 端口。
19.2.7.1. 在本地主机上安装 network-tools
						在本地主机上安装 network-tools,以提供一组工具来调试 OpenShift Container Platform 集群网络问题。
					
流程
- 使用以下命令将 - network-tools存储库克隆到工作站:- git clone git@github.com:openshift/network-tools.git - $ git clone git@github.com:openshift/network-tools.git- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 更改到您刚才克隆的存储库的目录: - cd network-tools - $ cd network-tools- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 可选:列出所有可用的命令: - ./debug-scripts/network-tools -h - $ ./debug-scripts/network-tools -h- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
19.2.7.2. 运行 network-tools
						通过运行 network-tools 来获取逻辑交换机和路由器的信息。
					
先决条件
- 
								已安装 OpenShift CLI(oc)。
- 
								以具有 cluster-admin权限的用户身份登录集群。
- 
								您已在本地主机上安装了 network-tools。
流程
- 运行以下命令列出路由器: - ./debug-scripts/network-tools ovn-db-run-command ovn-nbctl lr-list - $ ./debug-scripts/network-tools ovn-db-run-command ovn-nbctl lr-list- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - 944a7b53-7948-4ad2-a494-82b55eeccf87 (GR_ci-ln-54932yb-72292-kd676-worker-c-rzj99) 84bd4a4c-4b0b-4a47-b0cf-a2c32709fc53 (ovn_cluster_router) - 944a7b53-7948-4ad2-a494-82b55eeccf87 (GR_ci-ln-54932yb-72292-kd676-worker-c-rzj99) 84bd4a4c-4b0b-4a47-b0cf-a2c32709fc53 (ovn_cluster_router)- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 运行以下命令列出 localnet 端口: - ./debug-scripts/network-tools ovn-db-run-command \ ovn-sbctl find Port_Binding type=localnet - $ ./debug-scripts/network-tools ovn-db-run-command \ ovn-sbctl find Port_Binding type=localnet- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 运行以下命令列出 - l3gateway端口:- ./debug-scripts/network-tools ovn-db-run-command \ ovn-sbctl find Port_Binding type=l3gateway - $ ./debug-scripts/network-tools ovn-db-run-command \ ovn-sbctl find Port_Binding type=l3gateway- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 运行以下命令列出跳接端口: - ./debug-scripts/network-tools ovn-db-run-command \ ovn-sbctl find Port_Binding type=patch - $ ./debug-scripts/network-tools ovn-db-run-command \ ovn-sbctl find Port_Binding type=patch- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
    