23.2. OVN-Kubernetes 架构
23.2.1. OVN-Kubernetes 架构简介 复制链接链接已复制到粘贴板!
下图显示了 OVN-Kubernetes 架构。
图 23.1. OVK-Kubernetes 架构
主要组件是:
- Cloud Management System (CMS) - OVN 的特定平台客户端,为 OVN 集成提供 CMS 特定的插件。该插件将云管理系统的逻辑网络配置概念转换为 OVN 理解的 CMS 配置数据库中。
-
OVN 北向数据库(
nbdb
) - 存储由 CMS 插件传递的逻辑网络配置。 -
OVN 南向数据库 (
sbdb
) - 存储每个节点上的 OpenVswitch (OVS)系统的物理和逻辑网络配置状态,包括绑定它们的表。 -
ovn-northd - 这是
nbdb
和sbdb
之间的中介客户端。它以传统网络概念的形式将逻辑网络配置(从nbdb
)转换为其下面的sbdb
中的逻辑数据路径流。容器名称为northd
,它在ovnkube-master
容器集内运行。 -
ovn-controller - 这是与 OVS 和 hypervisor 交互的 OVN 代理,适用于
sbdb
所需的任何信息或更新。ovn-controller
从sbdb
读取逻辑流,将它们转换为OpenFlow
流,并将它们发送到节点的 OVS 守护进程。容器名称为ovn-controller
,它在ovnkube-node
pod 中运行。
OVN 北向数据库具有通过云管理系统(CMS)传递到它的逻辑网络配置。OVN 北向数据库包含网络的当前状态,以逻辑端口、逻辑交换机、逻辑路由器等形式显示。ovn-northd
(northd
容器) 连接到 OVN 北向数据库和 OVN 南向数据库。它以传统网络概念的形式将逻辑网络配置转换为 OVN 北向数据库中的逻辑数据路径流。
OVN 南向数据库具有网络的物理和逻辑表示,并将它们连接在一起。集群中的每个节点都表示在南向数据库中,您可以看到连接到它的端口。它还包含所有逻辑流,逻辑流与在每个节点上运行的 ovn-controller
进程共享,ovn-controller
将它们转换为 OpenFlow
规则到程序 Open vSwitch
。
Kubernetes control plane 节点各自包含一个 ovnkube-master
pod,用于为 OVN 北向和南向数据库托管容器。所有 OVN 北向数据库形成一个 Raft
集群,所有南向数据库组成一个单独的 Raft
集群。在任何给定时间,单个 ovnkube-master
是领导机,其他 ovnkube-master
pod 都是 followers。
23.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 在 control plane 节点上运行三个
ovnkube-masters
,两个守护进程集用于部署ovnkube-master
和ovnkube-node
pod。集群中的每个节点都有一个ovnkube-node
pod。在本例中为 5 个,因为集群中的每个节点都有一个ovnkube-node
,因此集群中有五个节点。ovnkube-config
ConfigMap
具有由 online-master 和ovnkube-node
启动的 OpenShift Container Platform OVN-Kubernetes 配置。ovn-kubernetes-master
ConfigMap
具有当前在线 master 领导的信息。运行以下命令,列出
ovnkube-master
pod 中的所有容器:oc get pods ovnkube-master-9g7zt \ -o jsonpath='{.spec.containers[*].name}' -n openshift-ovn-kubernetes
$ oc get pods ovnkube-master-9g7zt \ -o jsonpath='{.spec.containers[*].name}' -n openshift-ovn-kubernetes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 预期输出
northd nbdb kube-rbac-proxy sbdb ovnkube-master ovn-dbchecker
northd nbdb kube-rbac-proxy sbdb ovnkube-master ovn-dbchecker
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ovnkube-master
pod 由几个容器组成。它负责托管北向数据库(nbdb
容器)、南向数据库(sbdb
容器),监视 pod、egressIP、命名空间、服务、端点、出口防火墙和网络策略并将其写入北向数据库(ovnkube-master
pod),以及管理 pod 子网分配给节点。运行以下命令,列出
ovnkube-node
pod 中的所有容器:oc get pods ovnkube-node-jg52r \ -o jsonpath='{.spec.containers[*].name}' -n openshift-ovn-kubernetes
$ oc get pods ovnkube-node-jg52r \ -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 kube-rbac-proxy-ovn-metrics ovnkube-node
ovn-controller ovn-acl-logging kube-rbac-proxy kube-rbac-proxy-ovn-metrics ovnkube-node
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ovnkube-node
pod 有一个容器 (ovn-controller
),它驻留在每个 OpenShift Container Platform 节点上。每个节点的ovn-controller
将 OVN 北向数据库连接到 OVN 南向数据库,以了解 OVN 配置。ovn-controller
将南向连接到ovs-vswitchd
作为 OpenFlow 控制器,以控制网络流量,以及本地ovsdb-server
,以允许它监控和控制 Open vSwitch 配置。
23.2.3. 列出 OVN-Kubernetes 北向数据库内容 复制链接链接已复制到粘贴板!
要理解逻辑流规则,您需要检查北向数据库,并了解哪些对象是如何转换为逻辑流规则。OVN Raft leader 上会显示最新信息,这个过程描述了如何找到 Raft 领导,然后查询它以列出 OVN 北向数据库内容。
先决条件
-
使用具有
cluster-admin
角色的用户访问集群。 -
安装了 OpenShift CLI (
oc
)。
流程
查找北向数据库的 OVN Raft 领导。
注意Raft 领导机存储最新信息。
运行以下命令列出 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 随机选择一个 master pod,并运行以下命令:
oc exec -n openshift-ovn-kubernetes ovnkube-master-7j97q \ -- /usr/bin/ovn-appctl -t /var/run/ovn/ovnnb_db.ctl \ --timeout=3 cluster/status OVN_Northbound
$ oc exec -n openshift-ovn-kubernetes ovnkube-master-7j97q \ -- /usr/bin/ovn-appctl -t /var/run/ovn/ovnnb_db.ctl \ --timeout=3 cluster/status OVN_Northbound
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令,查找在 IP Address
10.0.242.240
上运行的ovnkube-master
pod:oc get po -o wide -n openshift-ovn-kubernetes | grep 10.0.242.240 | grep -v ovnkube-node
$ oc get po -o wide -n openshift-ovn-kubernetes | grep 10.0.242.240 | grep -v ovnkube-node
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
ovnkube-master-gt4ms 6/6 Running 1 (143m ago) 150m 10.0.242.240 ip-10-0-242-240.ec2.internal <none> <none>
ovnkube-master-gt4ms 6/6 Running 1 (143m ago) 150m 10.0.242.240 ip-10-0-242-240.ec2.internal <none> <none>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ovnkube-master-gt4ms
pod 在 IP Address 10.0.242.240 上运行。
运行以下命令以显示北向数据库中的所有对象:
oc exec -n openshift-ovn-kubernetes -it ovnkube-master-gt4ms \ -c northd -- ovn-nbctl show
$ oc exec -n openshift-ovn-kubernetes -it ovnkube-master-gt4ms \ -c northd -- ovn-nbctl show
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此处列出输出太长。列表中包含 NAT 规则、逻辑交换机、负载均衡器等。
运行以下命令,以显示可用于命令
ovn-nbctl
的选项:oc exec -n openshift-ovn-kubernetes -it ovnkube-master-mk6p6 \ -c northd ovn-nbctl --help
$ oc exec -n openshift-ovn-kubernetes -it ovnkube-master-mk6p6 \ -c northd ovn-nbctl --help
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以使用以下命令缩小并专注于特定组件:
运行以下命令以显示逻辑路由器列表:
oc exec -n openshift-ovn-kubernetes -it ovnkube-master-gt4ms \ -c northd -- ovn-nbctl lr-list
$ oc exec -n openshift-ovn-kubernetes -it ovnkube-master-gt4ms \ -c northd -- ovn-nbctl lr-list
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意在这个输出中,您可以看到每个节点中存在路由器,再加上
ovn_cluster_router
。运行以下命令以显示逻辑交换机列表:
oc exec -n openshift-ovn-kubernetes -it ovnkube-master-gt4ms \ -c northd -- ovn-nbctl ls-list
$ oc exec -n openshift-ovn-kubernetes -it ovnkube-master-gt4ms \ -c northd -- ovn-nbctl ls-list
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意在这个输出中,您可以看到每个节点的 ext 交换机以及节点名称本身和 join 开关。
运行以下命令以显示负载均衡器列表:
oc exec -n openshift-ovn-kubernetes -it ovnkube-master-gt4ms \ -c northd -- ovn-nbctl lb-list
$ oc exec -n openshift-ovn-kubernetes -it ovnkube-master-gt4ms \ -c northd -- 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 中的负载均衡器是服务的表示。
23.2.4. ovn-nbctl 的命令行参数检查北向数据库内容 复制链接链接已复制到粘贴板!
下表描述了可与 ovn-nbctl
一起使用的命令行参数,以检查北向数据库的内容。
参数 | 描述 |
---|---|
| 北向数据库内容的概述。 |
| 显示与指定交换机或路由器关联的详细信息。 |
| 显示逻辑路由器。 |
|
使用 |
| 显示指定路由器的网络地址转换详情。 |
| 显示逻辑交换机 |
|
使用 |
| 获取逻辑端口的类型。 |
| 显示负载平衡器。 |
23.2.5. 列出 OVN-Kubernetes 南向数据库内容 复制链接链接已复制到粘贴板!
逻辑流规则存储在南向数据库中,后者是基础架构的一个表示形式。OVN Raft leader 上会显示最新信息,这个过程描述了如何找到 Raft 领导机并查询它以列出 OVN 南向数据库内容。
先决条件
-
使用具有
cluster-admin
角色的用户访问集群。 -
安装了 OpenShift CLI (
oc
)。
流程
查找南向数据库的 OVN Raft 领导。
注意Raft 领导机存储最新信息。
运行以下命令列出 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 随机选择一个 master pod,并运行以下命令来查找 OVN 南向 Raft 领导:
oc exec -n openshift-ovn-kubernetes ovnkube-master-7j97q \ -- /usr/bin/ovn-appctl -t /var/run/ovn/ovnsb_db.ctl \ --timeout=3 cluster/status OVN_Southbound
$ oc exec -n openshift-ovn-kubernetes ovnkube-master-7j97q \ -- /usr/bin/ovn-appctl -t /var/run/ovn/ovnsb_db.ctl \ --timeout=3 cluster/status OVN_Southbound
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令,查找在 IP Address
10.0.163.212
上运行的ovnkube-master
pod:oc get po -o wide -n openshift-ovn-kubernetes | grep 10.0.163.212 | grep -v ovnkube-node
$ oc get po -o wide -n openshift-ovn-kubernetes | grep 10.0.163.212 | grep -v ovnkube-node
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
ovnkube-master-mk6p6 6/6 Running 0 136m 10.0.163.212 ip-10-0-163-212.ec2.internal <none> <none>
ovnkube-master-mk6p6 6/6 Running 0 136m 10.0.163.212 ip-10-0-163-212.ec2.internal <none> <none>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ovnkube-master-mk6p6
pod 在 IP Address 10.0.163.212 上运行。
运行以下命令,以显示存储在南向数据库中的所有信息:
oc exec -n openshift-ovn-kubernetes -it ovnkube-master-mk6p6 \ -c northd -- ovn-sbctl show
$ oc exec -n openshift-ovn-kubernetes -it ovnkube-master-mk6p6 \ -c northd -- 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-master-mk6p6 \ -c northd -- ovn-sbctl --help
$ oc exec -n openshift-ovn-kubernetes -it ovnkube-master-mk6p6 \ -c northd -- ovn-sbctl --help
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.2.6. ovn-sbctl 的命令行参数,以检查南向数据库内容 复制链接链接已复制到粘贴板!
下表描述了可用于 ovn-sbctl
的命令行参数,以检查南向数据库的内容。
参数 | 描述 |
---|---|
| 南向数据库内容概述。 |
| 列出特定端口的南向数据库的内容。 |
| 列出逻辑流。 |
23.2.7. OVN-Kubernetes 逻辑架构 复制链接链接已复制到粘贴板!
OVN 是网络虚拟化解决方案。它创建逻辑交换机和路由器。这些交换机和路由器是互连的,以创建任何网络拓扑。当您运行 ovnkube-trace
时,日志级别设置为 2 或 5 时,OVN-Kubernetes 逻辑组件会被公开。下图显示了如何在 OpenShift Container Platform 中连接路由器和交换机。
图 23.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 端口。
23.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
23.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 输出示例
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