配置网络设置
OpenShift Container Platform 中的常规网络配置过程
摘要
第 1 章 使用调优插件配置系统控制和接口属性 复制链接链接已复制到粘贴板!
在 Linux 中,管理员可通过 sysctl 在运行时修改内核参数。您可以使用调优 Container Network Interface(CNI)元插件修改接口级网络 sysctl。tuning CNI meta 插件在一个链中运行,主 CNI 插件如下所示。
主 CNI 插件分配接口,并将此接口在运行时传递给 tuning CNI meta 插件。您可以使用 tuning CNI meta 插件更改网络命名空间中的一些 sysctl 和几个接口属性,如 promiscuous 模式、all-multicast 模式、MTU 和 MAC 地址。
1.1. 使用 tuning CNI 配置系统控制 复制链接链接已复制到粘贴板!
以下流程将调整 CNI 配置为更改接口级网络 net.ipv4.conf.IFNAME.accept_redirects
sysctl。这个示例启用接受和发送 ICMP 重定向的数据包。在 tuning CNI meta 插件配置中,接口名称由 IFNAME
令牌表示,并替换为运行时接口的实际名称。
流程
使用以下内容创建网络附加定义,如
tuning-example.yaml
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 下面显示了一个 YAML 文件示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来应用 YAML:
oc apply -f tuning-example.yaml
$ oc apply -f tuning-example.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
networkattachmentdefinition.k8.cni.cncf.io/tuningnad created
networkattachmentdefinition.k8.cni.cncf.io/tuningnad created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用类似以下示例的网络附加定义,创建示例
pod.yaml
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定配置的
NetworkAttachmentDefinition
的名称。 - 2
runAsUser
控制使用哪个用户 ID 运行容器。- 3
runAsGroup
控制容器使用哪个主要组 ID。- 4
allowPrivilegeEscalation
决定 pod 是否请求允许特权升级。如果未指定,则默认为 true。这个布尔值直接控制在容器进程中是否设置了no_new_privs
标志。- 5
capabilities
允许特权操作,而不提供完整的 root 访问权限。此策略可确保从 pod 中丢弃了所有功能。- 6
runAsNonRoot: true
要求容器使用 0 以外的任何 UID 运行。- 7
RuntimeDefault
为 pod 或容器工作负载启用默认的 seccomp 配置集。
运行以下命令来应用 yaml:
oc apply -f examplepod.yaml
$ oc apply -f examplepod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令验证 pod 是否已创建:
oc get pod
$ oc get pod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE tunepod 1/1 Running 0 47s
NAME READY STATUS RESTARTS AGE tunepod 1/1 Running 0 47s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令登录到 pod:
oc rsh tunepod
$ oc rsh tunepod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证配置的 sysctl 标记的值。例如,通过运行以下命令查找
net.ipv4.conf.net1.accept_redirects
的值:sysctl net.ipv4.conf.net1.accept_redirects
sh-4.4# sysctl net.ipv4.conf.net1.accept_redirects
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 预期输出
net.ipv4.conf.net1.accept_redirects = 1
net.ipv4.conf.net1.accept_redirects = 1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.2. 使用调优 CNI 启用 all-multicast 模式 复制链接链接已复制到粘贴板!
您可以使用 tuning Container Network Interface (CNI) meta 插件启用 all-multicast 模式。
以下流程描述了如何配置调优 CNI 来启用 all-multicast 模式。
流程
使用以下内容创建网络附加定义,如
tuning-example.yaml
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 下面显示了一个 YAML 文件示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令应用 YAML 文件中指定的设置:
oc apply -f tuning-allmulti.yaml
$ oc apply -f tuning-allmulti.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
networkattachmentdefinition.k8s.cni.cncf.io/setallmulti created
networkattachmentdefinition.k8s.cni.cncf.io/setallmulti created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用类似以下
examplepod.yaml
文件中指定的网络附加定义创建 pod :Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定配置的
NetworkAttachmentDefinition
的名称。 - 2
- 指定运行容器的用户 ID。
- 3
- 指定容器使用哪个主要组 ID。
- 4
- 指定 pod 是否可以请求特权升级。如果未指定,则默认为
true
。这个布尔值直接控制在容器进程中是否设置了no_new_privs
标志。 - 5
- 指定容器功能。
drop: ["ALL"]
语句表示所有 Linux 功能都会从 pod 中丢弃,提供更严格的安全配置集。 - 6
- 指定容器将使用任何 UID 为 0 的用户运行。
- 7
- 指定容器的 seccomp 配置集。在这种情况下,type 被设置为
RuntimeDefault
。seccomp 是一个 Linux 内核功能,它限制了进程可用的系统调用,通过最小化攻击面来提高安全性。
运行以下命令应用 YAML 文件中指定的设置:
oc apply -f examplepod.yaml
$ oc apply -f examplepod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令验证 pod 是否已创建:
oc get pod
$ oc get pod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE allmultipod 1/1 Running 0 23s
NAME READY STATUS RESTARTS AGE allmultipod 1/1 Running 0 23s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令登录到 pod:
oc rsh allmultipod
$ oc rsh allmultipod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,列出与 pod 关联的所有接口:
ip link
sh-4.4# ip link
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 2 章 配置节点端口服务范围 复制链接链接已复制到粘贴板!
在集群安装过程中,您可以配置节点端口范围来满足集群的要求。在集群安装后,只有集群管理员可以将范围扩展为安装后任务。如果您的集群使用大量节点端口,请考虑根据集群的要求增加可用端口范围。
如果您没有在集群安装过程中设置节点端口范围,则默认范围 30000-32768
应用到您的集群。在这种情况下,您可以在任一端扩展范围,但您必须在新端口范围中保留 30000-32768
。
红帽没有在默认的端口范围 30000-32768
之外执行测试。对于默认端口范围以外的范围,请确保测试以验证扩展节点端口范围不会影响您的集群。特别是,请确保存在:
- 不与主机进程已经使用的任何端口重叠
- 没有与已经由使用主机网络配置的 pod 使用的端口重叠
如果您扩展范围和端口分配问题,请创建新集群并为其设置所需的范围。
如果扩展节点端口范围和 OpenShift CLI (oc
)会停止工作,因为端口与 OpenShift Container Platform API 服务器冲突,您必须创建新集群。
2.1. 扩展节点端口范围 复制链接链接已复制到粘贴板!
您可以扩展集群的节点端口范围。安装 OpenShift Container Platform 集群后,您无法在当前配置的范围内缩小节点端口范围。
红帽没有在默认的端口范围 30000-32768
之外执行测试。对于默认端口范围以外的范围,请确保测试以验证扩展节点端口范围是否不会影响您的集群。如果您扩展范围和端口分配问题,请创建新集群并为其设置所需的范围。
先决条件
-
已安装 OpenShift CLI (
oc
)。 -
以具有
cluster-admin
权限的用户身份登录集群。 -
您确保集群基础架构允许访问扩展范围中存在的端口。例如,如果您将节点端口范围扩展到
30000-32900
,您的防火墙或数据包过滤配置必须允许包含端口范围30000-32900
。
流程
要扩展集群用来管理 pod 流量的
network.config.openshift.io
对象中的serviceNodePortRange
参数的范围,请输入以下命令:oc patch network.config.openshift.io cluster --type=merge -p \ '{
$ oc patch network.config.openshift.io cluster --type=merge -p \ '{ "spec": { "serviceNodePortRange": "<port_range>" } }'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<port_range>
-
指定您扩展的范围,如
30000-32900
。
提示您还可以应用以下 YAML 来更新节点端口范围:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
network.config.openshift.io/cluster patched
network.config.openshift.io/cluster patched
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要确认更新的配置处于活跃状态,请输入以下命令。应用更新可能需要几分钟时间。
oc get configmaps -n openshift-kube-apiserver config \ -o jsonpath="{.data['config\.yaml']}" | \ grep -Eo '"service-node-port-range":["[[:digit:]]+-[[:digit:]]+"]'
$ oc get configmaps -n openshift-kube-apiserver config \ -o jsonpath="{.data['config\.yaml']}" | \ grep -Eo '"service-node-port-range":["[[:digit:]]+-[[:digit:]]+"]'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
"service-node-port-range":["30000-32900"]
"service-node-port-range":["30000-32900"]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 3 章 配置集群网络范围 复制链接链接已复制到粘贴板!
作为集群管理员,您可以在集群安装后扩展集群网络范围。如果额外的节点需要更多 IP 地址,您可能需要扩展集群网络范围。
例如,如果您部署了集群,并将 10.128.0.0/19
指定为集群网络范围,主机前缀为 23
,则限制为 16 个节点。您可以通过将集群中的 CIDR 掩码更改为 /14
来扩展到 510 个节点。
在扩展集群网络地址范围时,集群必须使用 OVN-Kubernetes 网络插件。不支持其他网络插件。
修改集群网络 IP 地址范围时会有以下限制:
- 指定的 CIDR 掩码大小必须总是小于当前配置的 CIDR 掩码大小,因为您只能向已安装的集群添加更多节点来增加 IP 空间
- 无法修改主机前缀
- 使用覆盖默认网关配置的 Pod 必须在集群网络扩展后重新创建
3.1. 扩展集群网络 IP 地址范围 复制链接链接已复制到粘贴板!
您可以扩展集群网络的 IP 地址范围。由于这个更改需要在集群中推出新的 Operator 配置,所以最多可能需要 30 分钟才能生效。
先决条件
-
安装 OpenShift CLI(
oc
)。 -
使用具有
cluster-admin
权限的用户登陆到集群。 - 确保集群使用 OVN-Kubernetes 网络插件。
流程
要获取集群的集群网络范围和主机前缀,请输入以下命令:
oc get network.operator.openshift.io \ -o jsonpath="{.items[0].spec.clusterNetwork}"
$ oc get network.operator.openshift.io \ -o jsonpath="{.items[0].spec.clusterNetwork}"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
[{"cidr":"10.217.0.0/22","hostPrefix":23}]
[{"cidr":"10.217.0.0/22","hostPrefix":23}]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要扩展集群网络 IP 地址范围,请输入以下命令。使用上一命令输出返回的 CIDR IP 地址范围和主机前缀。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<network>
-
指定您在上一步中获取的
cidr
字段的网络部分。您无法更改这个值。 <cidr>
-
指定网络前缀长度。例如,
14
。将此值更改为比上一步中的输出值小的值,以扩展集群网络范围。 <prefix>
-
指定集群的当前主机前缀。这个值必须与您在上一步中获取的
hostPrefix
字段的值相同。
示例命令
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
network.config.openshift.io/cluster patched
network.config.openshift.io/cluster patched
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要确认配置是活跃的,请输入以下命令。可能需要 30 分钟才能使此更改生效。
oc get network.operator.openshift.io \ -o jsonpath="{.items[0].spec.clusterNetwork}"
$ oc get network.operator.openshift.io \ -o jsonpath="{.items[0].spec.clusterNetwork}"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
[{"cidr":"10.217.0.0/14","hostPrefix":23}]
[{"cidr":"10.217.0.0/14","hostPrefix":23}]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 4 章 配置 IP 故障转移 复制链接链接已复制到粘贴板!
本节论述了为 OpenShift Container Platform 集群上的 pod 和服务配置 IP 故障转移。
IP 故障转移使用 Keepalived 在一组主机上托管一组外部访问的虚拟 IP (VIP) 地址。每个 VIP 地址仅由单个主机提供服务。Keepalived 使用虚拟路由器冗余协议(VRRP)决定在主机集合中使用哪个主机提供 VIP 服务。如果主机不可用,或者 Keepalived 正在监视的服务没有响应,则 VIP 会切换到主机集中的另外一个主机。这意味着只要主机可用,便始终可以提供 VIP 服务。
集合中的每个 VIP 都由从集合中选择的节点提供服务。如果单个节点可用,则会提供 VIP。无法将 VIP 显式分发到节点上,因此可能存在没有 VIP 的节点和其他具有多个 VIP 的节点。如果只有一个节点,则所有 VIP 都在其中。
管理员必须确保所有 VIP 地址都满足以下要求:
- 可在集群外部配置的主机上访问。
- 不用于集群中的任何其他目的。
每个节点上的 keepalived 确定所需服务是否在运行。如果是,则支持 VIP,Keepalived 参与协商来确定哪个节点服务 VIP。对于要参与的节点,服务必须侦听 VIP 上的观察端口,或者必须禁用检查。
集合中的每个 VIP 都可以由不同的节点提供。
IP 故障转移会监控每个 VIP 上的端口,以确定该端口能否在节点上访问。如果端口无法访问,则不会向节点分配 VIP。如果端口设为 0
,则会禁止此检查。检查脚本执行所需的测试。
当运行 Keepalived 的节点通过检查脚本时,该节点上的 VIP 可以根据其优先级和当前 master 的优先级以及抢占策略决定进入 master
状态。
集群管理员可以通过 OPENSHIFT_HA_NOTIFY_SCRIPT
变量提供一个脚本,每当节点上的 VIP 的状态发生变化时会调用此脚本。keepalived 在为 VIP 提供服务时为 master
状态;当另一个节点提供 VIP 服务时,状态为 backup
;当检查脚本失败时,状态为 fault
。每当状态更改时,notify 脚本都会被调用,并显示新的状态。
您可以在 OpenShift Container Platform 上创建 IP 故障转移部署配置。IP 故障转移部署配置指定 VIP 地址的集合,以及服务它们的一组节点。一个集群可以具有多个 IP 故障转移部署配置,各自管理自己的一组唯一的 VIP 地址。IP 故障转移配置中的每个节点运行 IP 故障转移 pod,此 pod 运行 Keepalived。
使用 VIP 访问带有主机网络的 pod 时,应用程序 pod 在运行 IP 故障转移 pod 的所有节点上运行。这可让任何 IP 故障转移节点成为主节点,并在需要时为 VIP 服务。如果应用程序 pod 没有在所有具有 IP 故障转移功能的节点上运行,有些 IP 故障转移节点不会为 VIP 服务,或者某些应用 pod 都不会接收任何流量。对 IP 故障转移和应用容器集使用相同的选择器和复制数,以避免这种不匹配。
在使用 VIP 访问服务时,任何节点都可以位于节点的 IP 故障转移集中,因为无论应用容器集在哪里运行,该服务都可以在所有节点上访问。任何 IP 故障转移节点可以随时变成主节点。服务可以使用外部 IP 和服务端口,或者可以使用 NodePort
。设置 NodePort
是一个特权操作。
在服务定义中使用外部 IP 时,VIP 被设置为外部 IP,IP 故障转移监控端口则设为服务端口。在使用节点端口时,该端口在集群的每个节点上打开,服务则从当前服务于 VIP 的任何节点对流量进行负载平衡。在这种情况下,IP 故障转移监控端口在服务定义中设置为 NodePort
。
即使一个服务 VIP 具有高可用性,但性能仍会受到影响。keepalived 确保每个 VIP 都由配置中的某个节点提供服务,即使其他节点没有,也可以在同一节点上出现多个 VIP。当 IP 故障转移在同一节点上放置多个 VIP 时,在一组 VIP 间进行外部负载平衡的策略可能会被破解。
当使用 ExternalIP
时,您可以将 IP 故障转移设置为与 ExternalIP
范围相同的 VIP 范围。您还可以禁用监控端口。在这种情况下,所有 VIP 都出现在集群中的同一节点上。任何用户都可以使用 ExternalIP
设置服务并使其高度可用。
集群中最多有 254 个 VIP。
4.1. IP 故障转移环境变量 复制链接链接已复制到粘贴板!
下表包含用于配置 IP 故障转移的变量。
变量名称 | default | 描述 |
---|---|---|
|
|
IP 故障转移 pod 会尝试在每个虚拟 IP(VIP)上打开到此端口的 TCP 连接。如果建立连接,则服务将被视为正在运行。如果此端口设为 |
|
IP 故障转移用于发送虚拟路由器冗余协议 (VRRP) 流量的接口名称。默认值为
如果您的集群使用 OVN-Kubernetes 网络插件,请将此值设置为 | |
|
|
要创建的副本数。这必须与 IP 故障转移部署配置中的 |
|
要复制的 IP 地址范围列表。必须提供.例如, | |
|
|
用于设置虚拟路由器 ID 的偏移值。使用不同的偏移值可以在同一集群中存在多个 IP 故障转移配置。默认偏移值为 |
|
为 VRRP 创建的组数量。如果没有设置,则会为通过 | |
| 输入 |
iptables 链的名称,用于自动添加允许 VRRP 流量的 |
| 定期运行的脚本的 pod 文件系统中的完整路径名称,以验证应用是否正在运行。 | |
|
| 检查脚本运行的期间(以秒为单位)。 |
| 当状态发生变化时运行的脚本的 pod 文件系统的完整路径名称。 | |
|
|
处理新的具有更高优先级主机的策略。 |
4.2. 在集群中配置 IP 故障切换 复制链接链接已复制到粘贴板!
作为集群管理员,您可以在整个集群中或在其中的一部分节点(由标签选项器定义)中配置 IP 故障转移。您还可以在集群中配置多个 IP 故障转移部署,每个 IP 故障转移部署相互独立。
IP 故障转移部署确保故障转移 pod 在符合限制或使用的标签的每个节点上运行。
此 pod 运行 Keepalived,它可以监控端点,并在第一个节点无法访问服务或端点时使用 Virtual Router Redundancy Protocol(VRRP)从一个节点切换到另一个节点的虚拟 IP(VIP)。
对于生产环境,设置一个选择器(selector)
,用于选择至少两个节点,并设置与所选节点数量相等的副本
。
先决条件
-
以具有
cluster-admin
权限的用户身份登录集群。 - 已创建一个 pull secret。
仅限 Red Hat OpenStack Platform (RHOSP):
- 您在目标环境中安装了 RHOSP 客户端 (RHCOS 文档)。
-
您还下载了 RHOSP
openrc.sh
rc 文件 (RHCOS 文档)。
流程
创建 IP 故障转移服务帐户:
oc create sa ipfailover
$ oc create sa ipfailover
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为
hostNetwork
更新安全性上下文约束(SCC):oc adm policy add-scc-to-user privileged -z ipfailover
$ oc adm policy add-scc-to-user privileged -z ipfailover
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc adm policy add-scc-to-user hostnetwork -z ipfailover
$ oc adm policy add-scc-to-user hostnetwork -z ipfailover
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 仅限 Red Hat OpenStack Platform (RHOSP):完成以下步骤,使在 RHOSP 端口上可以访问故障转移 VIP 地址。
使用 RHOSP CLI 在 RHOSP 集群的
allowed_address_pairs
参数中显示默认的 RHOSP API 和 VIP 地址:openstack port show <cluster_name> -c allowed_address_pairs
$ openstack port show <cluster_name> -c allowed_address_pairs
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
*Field* *Value* allowed_address_pairs ip_address='192.168.0.5', mac_address='fa:16:3e:31:f9:cb' ip_address='192.168.0.7', mac_address='fa:16:3e:31:f9:cb'
*Field* *Value* allowed_address_pairs ip_address='192.168.0.5', mac_address='fa:16:3e:31:f9:cb' ip_address='192.168.0.7', mac_address='fa:16:3e:31:f9:cb'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为 IP 故障转移部署设置不同的 VIP 地址,并通过在 RHOSP CLI 中输入以下命令使 RHOSP 端口上的地址访问。不要将任何默认的 RHOSP API 和 VIP 地址设置为 IP 故障转移部署的故障转移 VIP 地址。
在 RHOSP 端口中添加
1.1.1.1
故障转移 IP 地址作为允许的地址的示例。openstack port set <cluster_name> --allowed-address ip-address=1.1.1.1,mac-address=fa:fa:16:3e:31:f9:cb
$ openstack port set <cluster_name> --allowed-address ip-address=1.1.1.1,mac-address=fa:fa:16:3e:31:f9:cb
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 创建部署 YAML 文件,为您的部署配置 IP 故障切换。请参阅后续步骤中的"IP 故障转移配置的部署 YAML 示例"。
在 IP 故障转移部署中指定以下规格,以便将故障转移 VIP 地址传递给
OPENSHIFT_HA_VIRTUAL_IPS
环境变量:将
1.1.1.1
VIP 地址添加到OPENSHIFT_HA_VIRTUAL_IPS
的示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建部署 YAML 文件来配置 IP 故障切换。
注意对于 Red Hat OpenStack Platform (RHOSP),您不需要重新创建部署 YAML 文件。您已作为之前说明的一部分创建了此文件。
IP 故障转移配置的部署 YAML 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- IP 故障转移部署的名称。
- 2
- 要复制的 IP 地址范围列表。必须提供.例如,
1.2.3.4-6,1.2.3.9
。 - 3
- 为 VRRP 创建的组数量。如果没有设置,则会为通过
OPENSHIFT_HA_VIP_GROUPS
变量指定的每个虚拟 IP 范围创建一个组。 - 4
- IP 故障切换用于发送 VRRP 流量的接口名称。默认情况下使用
eth0
。 - 5
- IP 故障转移 pod 会尝试在每个 VIP 上打开到此端口的 TCP 连接。如果建立连接,则服务将被视为正在运行。如果此端口设为
0
,则测试会始终通过。默认值为80
。 - 6
- 用于设置虚拟路由器 ID 的偏移值。使用不同的偏移值可以在同一集群中存在多个 IP 故障转移配置。默认偏移值为
10
,允许的范围为0
到255
。 - 7
- 要创建的副本数。这必须与 IP 故障转移部署配置中的
spec.replicas
值匹配。默认值为2
。 - 8
iptables
链的名称,用于自动添加允许 VRRP 流量的iptables
规则。如果没有设置值,则不会添加iptables
规则。如果链不存在,则不会创建链,Keepalived 在单播模式下运行。默认为INPUT
。- 9
- 当状态发生变化时运行的脚本的 pod 文件系统的完整路径名称。
- 10
- 定期运行的脚本的 pod 文件系统中的完整路径名称,以验证应用是否正在运行。
- 11
- 处理新的具有更高优先级主机的策略。默认值为
preempt_delay 300
,这会导致,在有一个较低优先级的 master 提供 VIP 时,Keepalived 实例在 5 分钟后会接管 VIP。 - 12
- 检查脚本运行的期间(以秒为单位)。默认值为
2
。 - 13
- 在创建部署之前创建 pull secret,否则您将在创建部署时收到错误。
4.3. 配置检查和通知脚本 复制链接链接已复制到粘贴板!
keepalived 通过定期运行可选用户提供的检查脚本来监控应用程序的健康状况。例如,该脚本可以通过发出请求并验证响应来测试 Web 服务器。作为集群管理员,您可以提供一个可选的 notify 脚本,该脚本会在状态发生变化时调用。
检查和通知在 IP 故障转移容器集中运行的脚本,并使用容器集文件系统,而不是主机文件系统。但是,IP 故障转移 pod 使主机文件系统在 /hosts
挂载路径下可用。在配置检查或通知脚本时,您必须提供脚本的完整路径。提供脚本的建议方法是使用 ConfigMap
对象。
检查和通知脚本的完整路径名称添加到 Keepalived 配置文件 _/etc/keepalived/keepalived.conf
中,该文件会在 Keepalived 每次启动时加载。可以使用 ConfigMap
对象将脚本添加到 pod,如以下方法所述。
检查脚本
不提供检查脚本时,将运行一个简单的默认脚本来测试 TCP 连接。当监控端口为 0
时,禁止此默认测试。
每个 IP 故障转移 pod 管理一个 Keepalived 守护进程,在运行 pod 的节点上管理一个或多个虚拟 IP (VIP)地址。Keepalived 守护进程为该节点保留每个 VIP 的状态。特定节点上的特定 VIP 可能处于 master
、backup
或 fault
状态。
如果检查脚本返回非零,节点会进入 backup
状态,并且它拥有的任何 VIP 被重新分配。
notify 脚本
keepalived 将以下三个参数传递给 notify 脚本:
-
$1
-group
或instance
-
$2
-group
或instance
的名称 -
$3
- 新状态:master
、backup
或fault
先决条件
-
已安装 OpenShift CLI(
oc
)。 -
使用具有
cluster-admin
权限的用户登陆到集群。
流程
创建所需脚本,并创建
ConfigMap
对象来容纳它。脚本没有输入参数,并且必须返回0
(OK
)和1
(fail
)。检查脚本,
mycheckscript.sh
:#!/bin/bash # Whatever tests are needed # E.g., send request and verify response exit 0
#!/bin/bash # Whatever tests are needed # E.g., send request and verify response exit 0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
ConfigMap
对象:oc create configmap mycustomcheck --from-file=mycheckscript.sh
$ oc create configmap mycustomcheck --from-file=mycheckscript.sh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将脚本添加到容器集。挂载的
ConfigMap
对象的defaultMode
必须能够使用oc
命令或编辑部署配置来运行。值通常为0755
、493
(十进制):oc set env deploy/ipfailover-keepalived \ OPENSHIFT_HA_CHECK_SCRIPT=/etc/keepalive/mycheckscript.sh
$ oc set env deploy/ipfailover-keepalived \ OPENSHIFT_HA_CHECK_SCRIPT=/etc/keepalive/mycheckscript.sh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc set volume deploy/ipfailover-keepalived --add --overwrite \ --name=config-volume \ --mount-path=/etc/keepalive \ --source='{"configMap": { "name": "mycustomcheck", "defaultMode": 493}}'
$ oc set volume deploy/ipfailover-keepalived --add --overwrite \ --name=config-volume \ --mount-path=/etc/keepalive \ --source='{"configMap": { "name": "mycustomcheck", "defaultMode": 493}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意oc set env
命令对空格敏感。=
符号的两侧不能有空格。提示您还可以编辑
ipfailover-keepalived
部署配置:oc edit deploy ipfailover-keepalived
$ oc edit deploy ipfailover-keepalived
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow 保存更改并退出编辑器。这会重启
ipfailover-keepalived
。
4.4. 配置 VRRP 抢占 复制链接链接已复制到粘贴板!
当一个节点上的虚拟 IP(VIP)因为通过了检查脚本的检查而脱离 fault
状态时,如果其优先级低于当前处于 master
状态的节点上的 VIP,则节点上的 VIP 将进入 backup
状态。nopreempt
策略不会将 master
从主机上的较低优先级 VIP 移到主机上的优先级更高的 VIP。当使用默认的 preempt_delay 300
时,Keepalived 会等待指定的 300 秒,并将 master
移到主机上的优先级更高的 VIP。
流程
要指定抢占,输入
oc edit deploy ipfailover-keepalived
以编辑路由器部署配置:oc edit deploy ipfailover-keepalived
$ oc edit deploy ipfailover-keepalived
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 设置
OPENSHIFT_HA_PREEMPTION
值:-
preempt_delay 300
:Keepalived 会等待指定的 300 秒,并将master
移到主机上的优先级更高的 VIP。这是默认值。 -
nopreempt
:不会将master
从主机上的较低优先级 VIP 移到主机上的优先级更高的 VIP。
-
4.5. 部署多个 IP 故障转移实例 复制链接链接已复制到粘贴板!
每个 IP 转移 pod 由 IP 故障转移部署配置管理,每个节点 1
个 pod,以一个 Keepalived 守护进程运行。配置更多 IP 故障转移部署配置后,会创建更多 pod,更多的守护进程加入常见的虚拟路由器冗余协议(VRRP)协商。此协商由所有 Keepalived 守护进程完成,它决定了哪些节点服务是哪个虚拟 IP(VIP)。
Keepalived 内部为每个 VIP 分配一个唯一的 vrrp-id
。协商使用这一组 vrrp-ids
,在做出决策时,胜出的 vrrp-id
对应的 VIP 将在胜出的节点上服务。
因此,对于 IP 故障转移部署配置中定义的每个 VIP,IP 故障转移 pod 必须分配对应的 vrrp-id
。这可以从 OPENSHIFT_HA_VRRP_ID_OFFSET
开始,并按顺序将 vrrp-ids
分配到 VIP 列表来实现。vrrp-ids
的值可在 1..255
之间。
当存在多个 IP 故障转移部署配置时,您必须指定 OPENSHIFT_HA_VRRP_ID_OFFSET
,以便在部署配置中增加 VIP 的数量,并且没有 vrrp-id
范围重叠。
4.6. 为超过 254 地址配置 IP 故障转移 复制链接链接已复制到粘贴板!
IP 故障转移管理有 254 个组虚拟 IP(VIP)地址的限制。默认情况下,OpenShift Container Platform 会为每个组分配一个 IP 地址。您可以使用 OPENSHIFT_HA_VIP_GROUPS
变量进行更改,使得每个组中有多个 IP 地址,并在配置 IP 故障转移时定义每个虚拟路由器冗余协议(VRRP)实例可用的 VIP 组数量。
在 VRRP 故障转移事件中,对 VIP 进行分组会为每个 VRRP 创建更广泛的 VIP 分配范围,并在集群中的所有主机都能够从本地访问服务时很有用。例如,当服务通过 ExternalIP
公开时。
使用故障转移的一个规则是,请勿将路由等服务限制到一个特定的主机。相反,服务应复制到每一主机上,以便在 IP 故障转移时,不必在新主机上重新创建服务。
如果使用 OpenShift Container Platform 健康检查,IP 故障转移和组的性质意味着不会检查组中的所有实例。因此,必须使用 Kubernetes 健康检查来确保服务处于活动状态。
先决条件
-
使用具有
cluster-admin
权限的用户登陆到集群。
流程
要更改分配给每个组的 IP 地址数量,请更改
OPENSHIFT_HA_VIP_GROUPS
变量的值,例如:IP 故障转换配置的
Deployment
YAML 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 如果在有七个 VIP 的环境中将
OPENSHIFT_HA_VIP_GROUPS
设置为3
,它会创建三个组,将三个 VIP 分配到第一个组,为剩余的两个组各分配两个 VIP。
如果 OPENSHIFT_HA_VIP_GROUPS
设置的组数量少于设置为故障的 IP 地址数量,则组包含多个 IP 地址,且所有地址都作为一个单元移动。
4.7. ExternalIP 的高可用性 复制链接链接已复制到粘贴板!
在非云集群中,可以组合使用 IP 故障切换和 ExternalIP
到服务。对于使用 ExternalIP
创建服务的用户,结果是高可用性服务。
方法是指定集群网络配置的 spec.ExternalIP.autoAssignCIDRs
范围,然后在创建 IP 故障转移配置时使用相同的范围。
因为 IP 故障转移最多可支持整个集群的 255 个 VIP,所以 spec.ExternalIP.autoAssignCIDRs
必须为 /24
或更小。
4.8. 删除 IP 故障切换 复制链接链接已复制到粘贴板!
在初始配置 IP 故障切换时,集群中的 worker 节点会使用 iptables
规则修改,该规则明确允许 Keepalived 在 224.0.0.18
上多播数据包。由于对节点的更改,移除 IP 故障切换需要运行一个作业来删除 iptables
规则并删除 Keepalived 使用的虚拟 IP 地址。
流程
可选:识别并删除存储为配置映射的任何检查和通知脚本:
确定任何用于 IP 故障切换的 pod 是否使用配置映射作为卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Namespace: default Pod: keepalived-worker-59df45db9c-2x9mn Volumes that use config maps: volume: config-volume configMap: mycustomcheck
Namespace: default Pod: keepalived-worker-59df45db9c-2x9mn Volumes that use config maps: volume: config-volume configMap: mycustomcheck
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果上一步提供了用作卷的配置映射的名称,请删除配置映射:
oc delete configmap <configmap_name>
$ oc delete configmap <configmap_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
为 IP 故障切换识别现有部署:
oc get deployment -l ipfailover
$ oc get deployment -l ipfailover
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE default ipfailover 2/2 2 2 105d
NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE default ipfailover 2/2 2 2 105d
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除部署:
oc delete deployment <ipfailover_deployment_name>
$ oc delete deployment <ipfailover_deployment_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除
ipfailover
服务帐户:oc delete sa ipfailover
$ oc delete sa ipfailover
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行一个作业,该作业会删除最初配置 IP 故障切换时添加的 IP 表规则:
创建一个文件,如
remove-ipfailover-job.yaml
,其内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行作业:
oc create -f remove-ipfailover-job.yaml
$ oc create -f remove-ipfailover-job.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
job.batch/remove-ipfailover-2h8dm created
job.batch/remove-ipfailover-2h8dm created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
确认作业删除了 IP 故障切换的初始配置。
oc logs job/remove-ipfailover-2h8dm
$ oc logs job/remove-ipfailover-2h8dm
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
remove-failover.sh: OpenShift IP Failover service terminating. - Removing ip_vs module ... - Cleaning up ... - Releasing VIPs (interface eth0) ...
remove-failover.sh: OpenShift IP Failover service terminating. - Removing ip_vs module ... - Cleaning up ... - Releasing VIPs (interface eth0) ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 5 章 配置集群范围代理 复制链接链接已复制到粘贴板!
生产环境可能会拒绝直接访问互联网,而是提供 HTTP 或 HTTPS 代理。您可以通过修改现有集群的 Proxy 对象或在新集群的 install-config.yaml
文件中配置代理设置,将 OpenShift Container Platform 配置为使用代理。
在支持的平台中为集群启用集群范围的出口代理后,Red Hat Enterprise Linux CoreOS (RHCOS)会使用支持的平台上存在的 install-config.yaml
文件中的 networking.machineNetwork[].cidr
, networking.clusterNetwork[].cidr
, 和 networking.serviceNetwork[]
字段的值填充 status.noProxy
参数。
作为安装后任务,您可以更改 networking.clusterNetwork[].cidr
值,但不能更改 networking.machineNetwork[].cidr
和 networking.serviceNetwork[]
值。如需更多信息,请参阅"配置集群网络范围"。
对于在 Amazon Web Services (AWS)、Google Cloud Platform (GCP)、Microsoft Azure 和 Red Hat OpenStack Platform (RHOSP) 上安装,status.noProxy
参数也会填充实例元数据端点 169.254.169.254
。
由 RHCOS 添加到 Proxy
对象的 status:
段中的值示例
如果您的安装类型不包括设置 networking.machineNetwork[].cidr
字段,则必须在 .status.noProxy
字段中手动包含机器 IP 地址,以确保节点之间的流量可以绕过代理。
5.1. 先决条件 复制链接链接已复制到粘贴板!
查看集群需要访问的站点中的内容,决定这些站点中的任何站点是否需要绕过代理。默认情况下,所有集群系统的出站流量都需经过代理,包括对托管集群的云供应商 API 的调用。系统范围的代理仅影响系统组件,而不会影响用户工作负载。如有必要,将站点添加到 Proxy
对象的 spec.noProxy
参数,以绕过代理。
5.2. 启用集群范围代理 复制链接链接已复制到粘贴板!
Proxy
对象用于管理集群范围出口代理。当在没有配置代理的情况下安装或升级集群时,仍会生成 Proxy
对象,但它有一个空的 spec
。例如:
只支持名为 cluster
的 Proxy
对象,且无法创建额外的代理。
集群管理员可以通过修改这个 cluster
Proxy
对象来配置 OpenShift Container Platform 的代理。
在为集群启用集群范围代理功能并保存 Proxy
对象文件后,Machine Config Operator (MCO) 会重启集群中的所有节点,以便每个节点可以访问集群外的连接。您不需要手动重新引导这些节点。
先决条件
- 集群管理员权限
-
已安装 OpenShift Container Platform
oc
CLI 工具
流程
创建包含代理 HTTPS 连接所需的额外 CA 证书的 ConfigMap。
注意如果代理的身份证书由 Red Hat Enterprise Linux CoreOS (RHCOS) 信任捆绑包的颁发机构签名,您可以跳过这一步。
创建名为
user-ca-bundle.yaml
的文件,并提供 PEM 编码证书的值:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令从
user-ca-bundle.yaml
文件创建配置映射:oc create -f user-ca-bundle.yaml
$ oc create -f user-ca-bundle.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用
oc edit
命令修改Proxy
对象:oc edit proxy/cluster
$ oc edit proxy/cluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为代理配置所需的字段:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 用于创建集群外 HTTP 连接的代理 URL。URL 方案必须是
http
。 - 2
- 用于创建集群外 HTTPS 连接的代理 URL。URL 方案必须是
http
或https
。指定支持 URL 方案的代理的 URL。例如,如果大多数代理被配置为使用https
,则大多数代理都会报告错误,但它们只支持http
。此失败消息可能无法传播到日志,并可能显示为网络连接失败。如果使用侦听来自集群的https
连接的代理,您可能需要配置集群以接受代理使用的 CA 和证书。 - 3
- 要排除代理的目标域名、域、IP 地址(或其他网络 CIDR)和端口号的列表(以逗号分隔)。注意
只有在配置 IPv6 地址时,才支持端口号。配置 IPv4 地址时不支持端口号。
在域前面加
.
来仅匹配子域。例如:.y.com
匹配x.y.com
,但不匹配y.com
。使用*
可对所有目的地绕过所有代理。如果您的
noproxy
字段需要包含域地址,您必须在noproxy
字段中明确指定该 FQDN 或前缀匹配子域。您不能使用封装域的 IP 地址或 CIDR 范围。这是因为集群不会在分配路由连接前等待 DNS 返回 IP 地址,并根据请求明确检查。例如,如果您有一个 CIDR 块值,如10.0.0.0/24
,noproxy
字段和字段尝试访问https://10.0.0.11
,则地址可以成功匹配。但是,尝试访问https://exampleserver.externaldomain.com
(其 A 记录条目为10.0.0.11
)会失败。对于noproxy
字段,还需要额外的.externaldomain.com
值。如果您扩展了未包含在安装配置中
networking.machineNetwork[].cidr
字段定义的计算节点,您必须将它们添加到此列表中,以防止连接问题。如果未设置
httpProxy
或httpsProxy
字段,则此字段将被忽略。 - 4
- 将
httpProxy
和httpsProxy
值写进状态之前,执行就绪度检查时要使用的一个或多个集群外部 URL。 - 5
- 引用
openshift-config
命名空间中的 ConfigMap,其包含代理 HTTPS 连接所需的额外 CA 证书。注意 ConfigMap 必须已经存在,然后才能在这里引用它。此字段是必需的,除非代理的身份证书由来自 RHCOS 信任捆绑包的颁发机构签名。
- 保存文件以应用更改。
5.3. 删除集群范围代理服务器 复制链接链接已复制到粘贴板!
cluster
Proxy 对象不能被删除。要从集群中删除代理,请删除 Proxy 对象的所有 spec
字段。
先决条件
- 集群管理员权限
-
已安装 OpenShift Container Platform
oc
CLI 工具
流程
使用
oc edit
命令来修改代理:oc edit proxy/cluster
$ oc edit proxy/cluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除 Proxy 对象的所有
spec
字段。例如:apiVersion: config.openshift.io/v1 kind: Proxy metadata: name: cluster spec: {}
apiVersion: config.openshift.io/v1 kind: Proxy metadata: name: cluster spec: {}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存文件以使改变生效。
5.4. 验证集群范围代理配置 复制链接链接已复制到粘贴板!
部署集群范围代理配置后,您可以验证它是否按预期工作。按照以下步骤检查日志并验证实施。
先决条件
- 有集群管理员权限。
-
已安装 OpenShift Container Platform
oc
CLI 工具。
流程
使用
oc
命令检查代理配置状态:oc get proxy/cluster -o yaml
$ oc get proxy/cluster -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
验证输出中的代理字段,以确保它们与您的配置匹配。具体来说,检查
spec.httpProxy
,spec.httpsProxy
,spec.noProxy
, 和spec.trustedCA
字段。 检查
Proxy
对象的状态:oc get proxy/cluster -o jsonpath='{.status}'
$ oc get proxy/cluster -o jsonpath='{.status}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查 Machine Config Operator (MCO) 的日志,以确保成功应用配置更改:
oc logs -n openshift-machine-config-operator $(oc get pods -n openshift-machine-config-operator -l k8s-app=machine-config-operator -o name)
$ oc logs -n openshift-machine-config-operator $(oc get pods -n openshift-machine-config-operator -l k8s-app=machine-config-operator -o name)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 查找指示代理设置的消息,并在需要时重启节点。
通过检查发出外部请求的组件的日志来验证系统组件是否使用代理,如 Cluster Version Operator (CVO):
oc logs -n openshift-cluster-version $(oc get pods -n openshift-cluster-version -l k8s-app=machine-config-operator -o name)
$ oc logs -n openshift-cluster-version $(oc get pods -n openshift-cluster-version -l k8s-app=machine-config-operator -o name)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 查找显示外部请求已通过代理路由的日志条目。
其他资源
第 6 章 配置自定义 PKI 复制链接链接已复制到粘贴板!
有些平台组件,如 Web 控制台,使用 Routes 进行通信,且必须信任其他组件的证书与其交互。如果您使用的是自定义公钥基础架构 (PKI) ,您必须将其配置为在集群中识别其私有签名的 CA 证书。
您可以使用 Proxy API 添加集群范围的可信 CA 证书。您必须在安装过程中或运行时执行此操作。
在 安装过程 中,配置集群范围的代理。您需要在
install-config.yaml
文件中的additionalTrustBundle
设置中定义私有签名的 CA 证书。安装程序生成名为
user-ca-bundle
的 ConfigMap,其中包含您定义的附加 CA 证书。然后,Cluster Network Operator 会创建trusted-ca-bundle
ConfigMap,将这些 CA 证书与 Red Hat Enterprise Linux CoreOS (RHCOS)信任捆绑包合并; Proxy 对象的trustedCA
字段中会引用此 ConfigMap。-
在运行时,,修改默认 Proxy 对象使其包含您私有签名的 CA 证书 (集群代理启用工作流程的一部分)。这涉及创建包含集群应信任的私有签名 CA 证书的 ConfigMap,然后使用
trustedCA
引用私有签名证书的 ConfigMap 修改代理服务器资源。
安装程序配置的 additionalTrustBundle
字段和 proxy 资源的 trustedCA
字段被用来管理集群范围信任捆绑包; 在安装时会使用 additionalTrustBundle
,并在运行时使用代理的trustedCA
。
trustedCA
字段是对包含集群组件使用的自定义证书和密钥对的 ConfigMap
的引用。
6.1. 在安装过程中配置集群范围的代理 复制链接链接已复制到粘贴板!
生产环境可能会拒绝直接访问互联网,而是提供 HTTP 或 HTTPS 代理。您可以通过在 install-config.yaml
文件中配置代理设置,将新的 OpenShift Container Platform 集群配置为使用代理。
先决条件
-
您有一个现有的
install-config.yaml
文件。 您检查了集群需要访问的站点,并确定它们中的任何站点是否需要绕过代理。默认情况下,所有集群出口流量都经过代理,包括对托管云供应商 API 的调用。如果需要,您将在
Proxy 对象的
spec.noProxy
字段中添加站点来绕过代理。注意Proxy
对象status.noProxy
字段使用安装配置中的networking.machineNetwork[].cidr
、networking.clusterNetwork[].cidr
和networking.serviceNetwork[]
字段的值填充。对于在 Amazon Web Services(AWS)、Google Cloud Platform(GCP)、Microsoft Azure 和 Red Hat OpenStack Platform(RHOSP)上安装,
Proxy
对象status.noProxy
字段也会使用实例元数据端点填充(169.254.169.254
)。
流程
编辑
install-config.yaml
文件并添加代理设置。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 用于创建集群外 HTTP 连接的代理 URL。URL 方案必须是
http
。 - 2
- 用于创建集群外 HTTPS 连接的代理 URL。
- 3
- 要从代理中排除的目标域名、IP 地址或其他网络 CIDR 的逗号分隔列表。在域前面加上
.
以仅匹配子域。例如,.y.com
匹配x.y.com
,但不匹配y.com
。使用*
绕过所有目的地的代理。 - 4
- 如果提供,安装程序会在
openshift-config
命名空间中生成名为user-ca-bundle
的配置映射,其包含代理 HTTPS 连接所需的一个或多个额外 CA 证书。然后,Cluster Network Operator 会创建一个trusted-ca-bundle
配置映射,将这些内容与 Red Hat Enterprise Linux CoreOS (RHCOS)信任捆绑包合并,Proxy
对象的trustedCA
字段中也会引用此配置映射。additionalTrustBundle
字段是必需的,除非代理的身份证书由来自 RHCOS 信任捆绑包的颁发机构签名。 - 5
- 可选:决定
Proxy
对象的配置以引用trustedCA
字段中user-ca-bundle
配置映射的策略。允许的值是Proxyonly
和Always
。仅在配置了http/https
代理时,使用Proxyonly
引用user-ca-bundle
配置映射。使用Always
始终引用user-ca-bundle
配置映射。默认值为Proxyonly
。
注意安装程序不支持代理的
readinessEndpoints
字段。注意如果安装程序超时,重启并使用安装程序的
wait-for
命令完成部署。例如:./openshift-install wait-for install-complete --log-level debug
$ ./openshift-install wait-for install-complete --log-level debug
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存该文件并在安装 OpenShift Container Platform 时引用。
安装程序会创建一个名为 cluster 的集群范围代理,该代理 使用
提供的 install-config.yaml
文件中的代理设置。如果没有提供代理设置,仍然会创建一个 cluster
Proxy
对象,但它会有一个空 spec
。
只支持名为 cluster
的 Proxy
对象,且无法创建额外的代理。
6.2. 启用集群范围代理 复制链接链接已复制到粘贴板!
Proxy
对象用于管理集群范围出口代理。当在没有配置代理的情况下安装或升级集群时,仍会生成 Proxy
对象,但它有一个空的 spec
。例如:
只支持名为 cluster
的 Proxy
对象,且无法创建额外的代理。
集群管理员可以通过修改这个 cluster
Proxy
对象来配置 OpenShift Container Platform 的代理。
在为集群启用集群范围代理功能并保存 Proxy
对象文件后,Machine Config Operator (MCO) 会重启集群中的所有节点,以便每个节点可以访问集群外的连接。您不需要手动重新引导这些节点。
先决条件
- 集群管理员权限
-
已安装 OpenShift Container Platform
oc
CLI 工具
流程
创建包含代理 HTTPS 连接所需的额外 CA 证书的 ConfigMap。
注意如果代理的身份证书由 Red Hat Enterprise Linux CoreOS (RHCOS)信任捆绑包的颁发机构签名,您可以跳过这一步。
创建名为
user-ca-bundle.yaml
的文件,并提供 PEM 编码证书的值:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令从
user-ca-bundle.yaml
文件创建配置映射:oc create -f user-ca-bundle.yaml
$ oc create -f user-ca-bundle.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用
oc edit
命令修改Proxy
对象:oc edit proxy/cluster
$ oc edit proxy/cluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为代理配置所需的字段:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 用于创建集群外 HTTP 连接的代理 URL。URL 方案必须是
http
。 - 2
- 用于创建集群外 HTTPS 连接的代理 URL。URL 方案必须是
http
或https
。指定支持 URL 方案的代理的 URL。例如,如果大多数代理被配置为使用https
,则大多数代理都会报告错误,但它们只支持http
。此失败消息可能无法传播到日志,并可能显示为网络连接失败。如果使用侦听来自集群的https
连接的代理,您可能需要配置集群以接受代理使用的 CA 和证书。 - 3
- 要排除代理的目标域名、域、IP 地址(或其他网络 CIDR)和端口号的列表(以逗号分隔)。注意
只有在配置 IPv6 地址时,才支持端口号。配置 IPv4 地址时不支持端口号。
在域前面加
.
来仅匹配子域。例如:.y.com
匹配x.y.com
,但不匹配y.com
。使用*
可对所有目的地绕过所有代理。如果您的
noproxy
字段需要包含域地址,您必须在noproxy
字段中明确指定该 FQDN 或前缀匹配子域。您不能使用封装域的 IP 地址或 CIDR 范围。这是因为集群不会在分配路由连接前等待 DNS 返回 IP 地址,并根据请求明确检查。例如,如果您有一个 CIDR 块值,如10.0.0.0/24
,noproxy
字段和字段尝试访问https://10.0.0.11
,则地址可以成功匹配。但是,尝试访问https://exampleserver.externaldomain.com
(其 A 记录条目为10.0.0.11
)会失败。对于noproxy
字段,还需要额外的.externaldomain.com
值。如果您扩展了未包含在安装配置中
networking.machineNetwork[].cidr
字段定义的计算节点,您必须将它们添加到此列表中,以防止连接问题。如果未设置
httpProxy
或httpsProxy
字段,则此字段将被忽略。 - 4
- 将
httpProxy
和httpsProxy
值写进状态之前,执行就绪度检查时要使用的一个或多个集群外部 URL。 - 5
- 引用
openshift-config
命名空间中的 ConfigMap,其包含代理 HTTPS 连接所需的额外 CA 证书。注意 ConfigMap 必须已经存在,然后才能在这里引用它。此字段是必需的,除非代理的身份证书由来自 RHCOS 信任捆绑包的颁发机构签名。
- 保存文件以使改变生效。
6.3. 使用 Operator 进行证书注入 复制链接链接已复制到粘贴板!
在您的自定义 CA 证书通过 ConfigMap 添加到集群中后,Cluster Network Operator 会将用户提供的证书和系统 CA 证书合并到单一捆绑包中,并将合并的捆绑包注入请求信任捆绑包注入的 Operator。
在配置映射中添加 config.openshift.io/inject-trusted-cabundle="true"
标签后,会删除其中的现有数据。Cluster Network Operator 获取配置映射的所有权,并只接受 ca-bundle
作为数据。您必须使用单独的配置映射存储 service-ca.crt
,方法是使用 service.beta.openshift.io/inject-cabundle=true
注解或类似的配置。在同一配置映射中添加 config.openshift.io/inject-trusted-cabundle="true"
标签和 service.beta.openshift.io/inject-cabundle=true
注解可能会导致问题。
Operator 通过创建一个带有以下标签的空 ConfigMap 来请求此注入:
config.openshift.io/inject-trusted-cabundle="true"
config.openshift.io/inject-trusted-cabundle="true"
空 ConfigMap 示例:
- 1
- 指定空 ConfigMap 名称。
Operator 将这个 ConfigMap 挂载到容器的本地信任存储中。
只有在 Red Hat Enterprise Linux CoreOS (RHCOS)信任捆绑包中没有包括证书时,才需要添加可信 CA 证书。
证书注入不仅限于 Operator。当使用 config.openshift.io/inject-trusted-cabundle=true
标记(label) 创建一个空的 ConfigMap 时,Cluster Network Operator会跨命名空间注入证书 。
ConfigMap 可以驻留在任何命名空间中,但 ConfigMap 必须作为卷挂载到需要自定义 CA 的 Pod 中的每个容器。例如:
Legal Notice
复制链接链接已复制到粘贴板!
Copyright © 2025 Red Hat
OpenShift documentation is licensed under the Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).
Modified versions must remove all Red Hat trademarks.
Portions adapted from https://github.com/kubernetes-incubator/service-catalog/ with modifications by Red Hat.
Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation’s permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.