第 1 章 了解网络设置
了解如何将网络自定义和默认设置应用到红帽构建的 MicroShift 部署。每个节点都包含在单个机器和单个红帽构建 MicroShift 中,因此每个部署都需要单独的配置、Pod 和设置。
集群管理员有几个选项用于公开集群内的应用程序到外部流量并确保网络连接:
- 服务,如 NodePort
-
API 资源,如
Ingress
和Route
默认情况下,Kubernetes 为 pod 内运行的应用分配内部 IP 地址。Pod 及其容器之间可以有网络流量,但集群外的客户端无法直接访问容器集,除非通过一个服务(如 NodePort)公开。
1.1. 关于 OVN-Kubernetes 网络插件
OVN-Kubernetes 是红帽构建的 MicroShift 部署的默认网络解决方案。OVN-Kubernetes 是 pod 和基于 Open Virtual Network (OVN) 的服务的虚拟网络。OVN-Kubernetes Container Network Interface (CNI) 插件是集群的网络插件。使用 OVN-Kubernetes 网络插件的集群也会在节点上运行 Open vSwitch (OVS)。OVN 在节点上配置 OVS,以实施声明的网络配置。
1.1.1. 网络拓扑
OVN-Kubernetes 提供基于 overlay 的网络实现。此覆盖包括基于 OVS 的服务和 NetworkPolicy 实施。覆盖网络使用 geneve 隧道,因此 pod 最大传输单元 (MTU) 被设置为小于主机上物理接口的更小,以删除隧道标头。
OVS 作为 systemd 服务在 MicroShift 节点的红帽构建上运行。OVS RPM 软件包作为对 microshift-networking
RPM 软件包的依赖项安装。安装了 microshift-networking
RPM 时,OVS 会立即启动。
1.1.1.1. IP 转发
启动时,ovnkube-master
容器会自动启用主机网络 sysctl net.ipv4.ip_forward
内核参数。这需要将传入的流量转发到 CNI。例如,如果禁用了 ip_forward
,则从集群外部访问 NodePort 服务会失败。
1.1.2. 网络性能优化
默认情况下,将三个性能优化应用到 OVS 服务,以最大程度降低资源消耗:
-
ovs-vswitchd.service
和ovsdb-server.service
的 CPU 关联性 -
no-mlockall
到openvswitch.service
-
将处理程序和
revalidator
线程限制为ovs-vswitchd.service
1.1.3. 网络功能
红帽构建的 MicroShift 4.12 提供的网络功能包括:
- Kubernetes 网络策略
- 动态节点 IP
- 指定主机接口上的集群网络
- 二级网关接口
- 双堆栈
红帽构建的 MicroShift 4.12 不提供网络功能:
- egress IP/firewall/qos: 禁用
- 混合网络:不支持
- IPsec: 不支持
- 硬件卸载:不支持
1.1.4. 红帽构建的 MicroShift 网络组件和服务概述
本简要概述在红帽构建的 MicroShift 中介绍网络组件及其操作。microshift-networking
RPM 是一个软件包,可自动拉取任何与网络相关的依赖项和 systemd 服务来初始化网络,例如 microshift-ovs-init
systemd 服务。
- NetworkManager
-
NetworkManager 需要在红帽构建的 MicroShift 节点上设置初始网关桥接。NetworkManager 和
NetworkManager-ovs
RPM 软件包作为依赖项安装到microshift-networking
RPM 软件包,该软件包包含必要的配置文件。红帽构建的 MicroShift 中的 NetworkManager 使用keyfile
插件,并在安装microshift-networking
RPM 软件包后重启。 - microshift-ovs-init
-
microshift-ovs-init.service
由microshift-networking
RPM 软件包安装,作为依赖的 systemd 服务到 microshift.service。它负责设置 OVS 网关网桥。 - OVN 容器
两个 OVN-Kubernetes 守护进程集由红帽构建的 MicroShift 渲染和应用。
-
ovnkube-master 包含
northd
,nbdb
,sbdb
和ovnkube-master
容器。 ovnkube-node ovnkube-node 包含 OVN-Controller 容器。
在红帽构建的 MicroShift 引导后,OVN-Kubernetes 守护进程集会在
openshift-ovn-kubernetes
命名空间中部署。
-
ovnkube-master 包含
- 打包
OVN-Kubernetes 清单和启动逻辑内置在 MicroShift 的红帽构建中。
microshift-networking
RPM 中包含的 systemd 服务和配置包括:-
/etc/NetworkManager/conf.d/microshift-nm.conf
for NetworkManager.service -
/etc/systemd/system/ovs-vswitchd.service.d/microshift-cpuaffinity.conf
for ovs-vswitchd.service -
/etc/systemd/system/ovsdb-server.service.d/microshift-cpuaffinity.conf
-
/usr/bin/configure-ovs-microshift.sh
用于 microshift-ovs-init.service -
/usr/bin/configure-ovs.sh
用于 microshift-ovs-init.service -
/etc/crio/crio.conf.d/microshift-ovn.conf
用于 CRI-O 服务
-
1.1.5. 网桥映射
网桥映射允许提供商网络流量访问物理网络。流量离开提供商网络,到达 br-int
网桥。br-int
和 br-ex
之间的跳接端口允许流量遍历提供商网络和边缘网络。Kubernetes pod 通过虚拟以太网对连接到 br-int
网桥:一个虚拟以太网对端附加到 pod 命名空间,另一个端点连接到 br-int
网桥。
1.1.5.1. 主网关接口
您可以在 ovn.yaml
配置文件中将所需的主机接口名称指定为 gatewayInterface
。指定的接口在 OVS 网桥 br-ex 中添加,它充当 CNI 网络的网关桥接。
1.1.5.2. 二级网关接口
您可以在 ovn.yaml
配置文件中为集群入口和出口设置一个额外的主机接口。第二个 OVS 网桥 br-ex1
中添加了额外的接口。集群 pod 流量根据目标 IP 到 br-ex1 自动路由额外的主机子网。
根据 CNI 配置创建两个或多个 OVS 网桥:
- 默认部署
-
在
ovn.yaml
配置文件中没有指定externalGatewayInterface
。 -
创建
br-ex
和br-int
这两个 OVS 网桥。
-
在
- 自定义部署
-
externalGatewayInterface
在ovn.yaml
配置文件中是用户指定的。 -
创建三个 OVS 网桥:
br-ex
、br-ex1
和br-int
。
-
br-ex 网桥由 microshift-ovs-init.service
创建,或者手动创建。br-ex 网桥包含静态编程的 openflow 规则,用于区分进出主机网络 (underlay) 和 OVN 网络 (overlay) 的流量。
br-int
网桥由 ovnkube-master
容器创建。br-int
网桥包含动态编程的 openflow 规则,这些规则处理集群网络流量。