MicroShift is Developer Preview software only.
For more information about the support scope of Red Hat Developer Preview software, see Developer Preview Support Scope.网络
配置和管理集群网络
摘要
第 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-ovsRPM 软件包作为依赖项安装到microshift-networkingRPM 软件包,该软件包包含必要的配置文件。红帽构建的 MicroShift 中的 NetworkManager 使用keyfile插件,并在安装microshift-networkingRPM 软件包后重启。 - microshift-ovs-init
-
microshift-ovs-init.service由microshift-networkingRPM 软件包安装,作为依赖的 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-networkingRPM 中包含的 systemd 服务和配置包括:-
/etc/NetworkManager/conf.d/microshift-nm.conffor NetworkManager.service -
/etc/systemd/system/ovs-vswitchd.service.d/microshift-cpuaffinity.conffor 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 规则,这些规则处理集群网络流量。
1.2. 创建 OVN-Kubernetes 配置文件 复制链接链接已复制到粘贴板!
如果没有创建 OVN-Kubernetes 配置文件,红帽构建的 MicroShift 使用内置的默认 OVN-Kubernetes 值。您可以将 OVN-Kubernetes 配置文件写入 /etc/microshift/ovn.yaml。为您的配置提供了一个示例文件。
流程
要创建
ovn.yaml文件,请运行以下命令:$ sudo cp /etc/microshift/ovn.yaml.default /etc/microshift/ovn.yaml
$ sudo cp /etc/microshift/ovn.yaml.default /etc/microshift/ovn.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要列出您创建的配置文件的内容,请运行以下命令:
$ cat /etc/microshift/ovn.yaml.default
$ cat /etc/microshift/ovn.yaml.defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 带有默认值的 'yaml' 配置文件示例
ovsInit: disableOVSInit: false gatewayInterface: "" externalGatewayInterface: "" mtu: 1400
ovsInit: disableOVSInit: false gatewayInterface: ""1 externalGatewayInterface: ""2 mtu: 1400Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要自定义配置,请使用列出您可以使用的有效值:
Expand 表 1.1. 支持红帽构建的 MicroShift 的可选 OVN-Kubernetes 配置 字段 类型 默认值 描述 示例 ovsInit.disableOVSInitbool
false
跳过在
microshift-ovs-init.service中配置 OVS 网桥br-extrue 1
ovsInit.gatewayInterfaceAlpha
eth0
Ingress,即 API 网关
eth0
ovsInit.externalGatewayInterfaceAlpha
eth1
Ingress 将外部流量路由到节点内的服务和 pod
eth1
mtu
uint32
1400
用于 pod 的 MTU 值
1300
需要 OVS 网桥。当
disableOVSInit为 true 时,必须手动配置 OVS 网桥br-ex。重要如果更改了
ovn.yaml文件中的mtu配置值,您必须重启红帽构建的 MicroShift 的主机以应用更新的设置。
自定义 ovn.yaml 配置文件示例
ovsInit: disableOVSInit: true gatewayInterface: eth0 externalGatewayInterface: eth1 mtu: 1300
ovsInit:
disableOVSInit: true
gatewayInterface: eth0
externalGatewayInterface: eth1
mtu: 1300
当在 ovn.yaml 配置文件中将 disableOVSInit 设置为 true 时,必须手动配置 br-ex OVS 网桥。
1.3. 重启 ovnkube-master pod 复制链接链接已复制到粘贴板!
以下流程重启 ovnkube-master pod。
先决条件
-
已安装 OpenShift CLI (
oc)。 -
使用具有
cluster-admin角色的用户访问集群。 - 在使用 OVN-Kubernetes 网络插件配置的基础架构上安装集群。
- KUBECONFIG 环境变量被设置。
流程
使用以下步骤重启 ovnkube-master pod。
运行以下命令来访问远程集群:
export KUBECONFIG=$PWD/kubeconfig
$ export KUBECONFIG=$PWD/kubeconfigCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,查找您要重启的
ovnkube-masterpod 的名称:pod=$(oc get pods -n openshift-ovn-kubernetes | awk -F " " '/ovnkube-master/{print $1}')$ pod=$(oc get pods -n openshift-ovn-kubernetes | awk -F " " '/ovnkube-master/{print $1}')Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来删除
ovnkube-masterpod:oc -n openshift-ovn-kubernetes delete pod $pod
$ oc -n openshift-ovn-kubernetes delete pod $podCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令确认新的
ovnkube-masterpod 正在运行:oc get pods -n openshift-ovn-kubernetes
$ oc get pods -n openshift-ovn-kubernetesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 正在运行的 Pod 列表显示新的
ovnkube-masterpod 名称和年龄。
1.4. 在 HTTP (S)代理后部署红帽构建的 MicroShift 复制链接链接已复制到粘贴板!
在您要向 pod 添加基本匿名和安全措施时,请在 HTTP (S)代理后部署 MicroShift 集群的红帽构建。
在代理后面部署红帽构建的 MicroShift 时,您必须将主机操作系统配置为使用代理服务以及启动 HTTP (S)请求的所有组件。
所有特定于用户的工作负载或带有出口流量的 pod (如访问云服务)都必须配置为使用代理。红帽构建的 MicroShift 中没有内置透明代理出口流量。
1.5. 在 CRI-O 容器运行时中使用代理 复制链接链接已复制到粘贴板!
要在 CRI-O 中使用 HTTP(S) 代理,您需要设置 HTTP_PROXY 和 HTTPS_PROXY 环境变量。您还可以设置 NO_PROXY 变量,将主机列表排除在代理之外。
流程
在
/etc/systemd/system/crio.service.d/00-proxy.conf文件中添加以下设置:Environment=NO_PROXY="localhost,127.0.0.1" Environment=HTTP_PROXY="http://$PROXY_USER:$PROXY_PASSWORD@$PROXY_SERVER:$PROXY_PORT/" Environment=HTTPS_PROXY="http://$PROXY_USER:$PROXY_PASSWORD@$PROXY_SERVER:$PROXY_PORT/"
Environment=NO_PROXY="localhost,127.0.0.1" Environment=HTTP_PROXY="http://$PROXY_USER:$PROXY_PASSWORD@$PROXY_SERVER:$PROXY_PORT/" Environment=HTTPS_PROXY="http://$PROXY_USER:$PROXY_PASSWORD@$PROXY_SERVER:$PROXY_PORT/"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重新载入配置设置:
sudo systemctl daemon-reload
$ sudo systemctl daemon-reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启 CRI-O 服务以应用设置:
sudo systemctl restart crio
$ sudo systemctl restart crioCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.6. 从正在运行的集群获取 OVS 接口的快照 复制链接链接已复制到粘贴板!
快照代表 OVS 接口在特定时间点的状态和数据。
流程
- 要查看正在运行的红帽构建的 MicroShift 集群的 OVS 接口快照,请使用以下命令:
sudo ovs-vsctl show
$ sudo ovs-vsctl show
正在运行的集群中的 OVS 接口示例
1.7. 多播 DNS 协议 复制链接链接已复制到粘贴板!
多播 DNS 协议 (mDNS) 允许使用在 5353/UDP 端口上公开的多播进行名称解析和服务发现。
红帽构建的 MicroShift 包括了一个嵌入式 mDNS 服务器用于部署场景,在这种情况下,无法重新配置权威 DNS 服务器,将客户端指向红帽构建的 MicroShift 上的服务。嵌入式 DNS 服务器允许红帽构建的 MicroShift 公开的 .local 域由 LAN 上的其他元素发现。
第 2 章 使用防火墙 复制链接链接已复制到粘贴板!
红帽构建的 MicroShift 中不需要防火墙,但使用防火墙可以防止对红帽构建的 MicroShift API 进行不必要的访问。
2.1. 关于通过防火墙的网络流量 复制链接链接已复制到粘贴板!
在使用防火墙时,您必须在 firewalld 服务运行时明确允许以下 OVN-Kubernetes 流量:
- CNI pod 到 CNI pod
- CNI pod 到 Host-Network pod Host-Network pod 到 Host-Network pod
- CNI pod
- 使用 CNI 网络的 Kubernetes pod
- Host-Network pod
-
使用主机网络的 Kubernetes pod 通过以下步骤安装和配置
firewalld服务。
红帽构建的 MicroShift pod 必须有权访问内部 CoreDNS 组件和 API 服务器。
2.2. 安装 firewalld 服务 复制链接链接已复制到粘贴板!
使用以下步骤为红帽构建的 MicroShift 安装并运行 firewalld 服务。
流程
要安装
firewalld服务,请运行以下命令:sudo dnf install -y firewalld
$ sudo dnf install -y firewalldCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要启动防火墙,请运行以下命令:
sudo systemctl enable firewalld --now
$ sudo systemctl enable firewalld --nowCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3. 所需的防火墙设置 复制链接链接已复制到粘贴板!
在防火墙配置过程中,必须启用集群网络的 IP 地址范围。您可以使用默认值或自定义 IP 地址范围。如果您选择从默认的 10.42.0.0/16 设置自定义集群网络 IP 地址范围,还必须在防火墙配置中使用相同的自定义范围。
| IP 范围 | 防火墙规则所需的 | 描述 |
|---|---|---|
| 10.42.0.0/16 | 否 | 主机网络 pod 访问其他 pod |
| 169.254.169.1 | 是 | 主机网络 pod 访问红帽构建的 MicroShift API 服务器 |
以下是防火墙配置强制设置的命令示例:
示例命令
配置主机网络 pod 对其他 pod 的访问:
sudo firewall-cmd --permanent --zone=trusted --add-source=10.42.0.0/16
$ sudo firewall-cmd --permanent --zone=trusted --add-source=10.42.0.0/16Copy to Clipboard Copied! Toggle word wrap Toggle overflow 配置主机网络 pod 访问由主机端点支持的服务,如红帽 MicroShift API 的构建:
sudo firewall-cmd --permanent --zone=trusted --add-source=169.254.169.1
$ sudo firewall-cmd --permanent --zone=trusted --add-source=169.254.169.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.4. 使用可选端口设置 复制链接链接已复制到粘贴板!
红帽构建的 MicroShift 防火墙服务允许可选端口设置。
流程
要在防火墙配置中添加自定义端口,请使用以下命令语法:
sudo firewall-cmd --permanent --zone=public --add-port=<port number>/<port protocol>
$ sudo firewall-cmd --permanent --zone=public --add-port=<port number>/<port protocol>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Expand 表 2.2. 可选端口 端口 协议 描述 80
TCP
用于通过 OpenShift Container Platform 路由器提供应用程序的 HTTP 端口。
443
TCP
用于通过 OpenShift Container Platform 路由器提供应用程序的 HTTPS 端口。
5353
UDP
mDNS 服务以响应 OpenShift Container Platform 路由 mDNS 主机。
30000-32767
TCP
为 NodePort 服务保留的端口范围;可用于公开 LAN 上的应用程序。
30000-32767
UDP
为 NodePort 服务保留的端口范围;可用于公开 LAN 上的应用程序。
6443
TCP
用于红帽构建的 MicroShift API 的 HTTPS API 端口。
以下是需要对防火墙进行外部访问到在 MicroShift 的红帽构建上运行的服务的命令示例,如 API 服务器的端口 6443,例如通过路由器公开的应用程序的端口 80 和 443。
示例命令
为红帽构建的 MicroShift API 服务器配置端口:
sudo firewall-cmd --permanent --zone=public --add-port=6443/tcp
$ sudo firewall-cmd --permanent --zone=public --add-port=6443/tcpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 为通过路由器公开的应用程序配置端口:
sudo firewall-cmd --permanent --zone=public --add-port=80/tcp
$ sudo firewall-cmd --permanent --zone=public --add-port=80/tcpCopy to Clipboard Copied! Toggle word wrap Toggle overflow sudo firewall-cmd --permanent --zone=public --add-port=443/tcp
$ sudo firewall-cmd --permanent --zone=public --add-port=443/tcpCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.5. 允许通过防火墙的网络流量 复制链接链接已复制到粘贴板!
您可以通过首先使用默认或自定义值配置 IP 地址范围来允许网络流量通过防火墙,然后通过插入 DNS 服务器来通过网络网关允许来自 pod 的内部流量。
流程
设置默认值或自定义 IP 地址范围。设置 IP 地址范围后,允许通过网络网关从 pod 的内部流量。
设置 IP 地址范围:
要使用默认值配置 IP 地址范围,请运行以下命令:
sudo firewall-offline-cmd --permanent --zone=trusted --add-source=10.42.0.0/16
$ sudo firewall-offline-cmd --permanent --zone=trusted --add-source=10.42.0.0/16Copy to Clipboard Copied! Toggle word wrap Toggle overflow 另外,您可以通过运行以下命令来使用自定义值配置 IP 地址范围:
sudo firewall-offline-cmd --permanent --zone=trusted --add-source=<custom IP range>
$ sudo firewall-offline-cmd --permanent --zone=trusted --add-source=<custom IP range>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
要允许 pod 通过网络网关的内部流量,请运行以下命令:
sudo firewall-offline-cmd --permanent --zone=trusted --add-source=169.254.169.1
$ sudo firewall-offline-cmd --permanent --zone=trusted --add-source=169.254.169.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.5.1. 应用防火墙设置 复制链接链接已复制到粘贴板!
要应用防火墙设置,请使用以下步骤步骤:
流程
完成通过防火墙进行网络访问后,运行以下命令重启防火墙并应用设置:
sudo firewall-cmd --reload
$ sudo firewall-cmd --reload
2.6. 验证防火墙设置 复制链接链接已复制到粘贴板!
重启防火墙后,您可以通过列出设置来验证设置。
流程
要验证在默认公共区(如端口相关的规则)中添加的规则,请运行以下命令:
sudo firewall-cmd --list-all
$ sudo firewall-cmd --list-allCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要验证在可信区(如 IP-range 相关规则)中添加的规则,请运行以下命令:
sudo firewall-cmd --zone=trusted --list-all
$ sudo firewall-cmd --zone=trusted --list-allCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.7. 已知的防火墙问题 复制链接链接已复制到粘贴板!
-
为了避免使用防火墙重新加载或重启来破坏流量流,请在启动 MicroShift 的红帽构建前执行防火墙命令。红帽构建的 MicroShift 中的 CNI 驱动程序将 iptable 规则用于某些流量流,如使用 NodePort 服务的用户。iptable 规则由 CNI 驱动程序生成和插入,但在防火墙重新加载或重启时会被删除。缺少 iptable 规则会破坏流量流。如果需要在 MicroShift 的红帽构建后执行 firewall 命令,请手动重启
openshift-ovn-kubernetes命名空间中的ovnkube-masterpod,以重置由 CNI 驱动程序控制的规则。