This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.21.2. 为服务配置 ExternalIP
作为集群管理员,您可以指定可向集群中服务发送流量的集群外部 IP 地址块。
这个功能通常最适用于在裸机硬件上安装的集群。
21.2.1. 先决条件 复制链接链接已复制到粘贴板!
- 您的网络基础架构必须将外部 IP 地址的流量路由到集群。
21.2.2. 关于 ExternalIP 复制链接链接已复制到粘贴板!
对于非云环境,OpenShift Container Platform 支持通过 ExternalIP 工具将外部 IP 地址分配给 Service 对象的 spec.externalIPs[] 字段。通过设置此字段,OpenShift Container Platform 为服务分配额外的虚拟 IP 地址。IP 地址可以在为集群定义的服务网络之外。配置了 ExternalIP 功能的服务与具有 type=NodePort 的服务类似,允许您将流量定向到本地节点以进行负载均衡。
您必须配置网络基础架构,以确保您定义的外部 IP 地址块路由到集群。
OpenShift Container Platform 通过添加以下功能来扩展 Kubernetes 中的 ExternalIP 功能:
- 通过可配置策略对用户使用外部 IP 地址的限制
- 根据请求自动将外部 IP 地址分配给服务
默认情况下禁用,使用 ExternalIP 功能可能会造成安全隐患,因为集群内到一个外部 IP 地址的流量会定向到那个服务。这可让集群用户拦截用于外部资源的敏感流量。
这个功能只在非云部署中被支持。对于云部署,使用负载均衡器服务自动部署云负载均衡器,以服务端点为目标。
您可以使用以下方法分配外部 IP 地址:
- 自动分配一个外部 IP
-
当创建了一个带有
spec.type=LoadBalancer设置的Service对象时,OpenShift Container Platform 会从autoAssignCIDRsCIDR 块中自动为spec.externalIPs[]分配一个 IP 地址。在本例中,OpenShift Container Platform 实现了负载均衡器服务类型的非云版本,并为服务分配 IP 地址。默认情况下,自动分配被禁用,且必须由集群管理员配置,如以下部分所述。 - 手动分配外部 IP
-
OpenShift Container Platform 在创建
Service对象时使用分配给spec.externalIPs[]数组的 IP 地址。您不能指定已经被其他服务使用的 IP 地址。
21.2.2.1. 配置 ExternalIP 复制链接链接已复制到粘贴板!
在 OpenShift Container Platform 中使用外部 IP 地址取决于名为 cluster 的 Network.config.openshift.io CR 中的以下字段:
-
spec.externalIP.autoAssignCIDRs定义了一个负载均衡器在为服务选择外部 IP 地址时使用的 IP 地址块。OpenShift Container Platform 只支持单个 IP 地址块进行自动分配。当手工为服务分配 ExternalIPs 时,这比管理有限共享 IP 地址的端口空间更简单。如果启用了自动分配,则会分配一个带有spec.type=LoadBalancer的Service对象。 -
在手动指定 IP 地址时,
spec.externalIP.policy定义了允许的 IP 地址块。OpenShift Container Platform 不会将策略规则应用到spec.externalIP.autoAssignCIDRs定义的 IP 地址块。
如果路由正确,来自配置的外部 IP 地址块的外部流量可以通过服务公开的任何 TCP 或 UDP 端口访问服务端点。
作为集群管理员,您必须在 OpenShiftSDN 和 OVN-Kubernetes 网络类型中配置到 externalIPs 的路由。您还必须确保分配的 IP 地址块在集群中的一个或多个节点上终止。如需更多信息,请参阅 Kubernetes 外部 IP。
OpenShift Container Platform 支持自动和手动分配 IP 地址,并且保证每个地址都被分配到最多一个服务。这样可保证,无论由其他服务公开的端口是什么,每个服务都可以公开选择的端口。
要使用 OpenShift Container Platform 中由 autoAssignCIDRs 定义 的 IP 地址块,您必须为主机网络配置必要的 IP 地址分配和路由。
以下 YAML 描述了配置了外部 IP 地址的服务:
带有 spec.externalIPs[] 设置的示例 Service 对象
21.2.2.2. 对外部 IP 地址分配的限制 复制链接链接已复制到粘贴板!
作为集群管理员,您可以指定允许和拒绝的 IP 地址块。
限制只针对没有 cluster-admin 权限的用户。集群管理员始终可以将服务 spec.externalIPs[] 字段设置为任何 IP 地址。
您可以使用一个通过指定 spec.ExternalIP.policy 字段来定义的一个policy 对象来配置 IP 地址策略。策略对象有以下内容:
在配置策略限制时,会应用以下规则:
-
如果设置了
policy={},那么创建带有spec.ExternalIPs[]设置的Service对象将失败。这是 OpenShift Container Platform 的默认设置。设置policy=null的行为相同。 如果设置了
policy,并且设置了policy.allowedCIDRs[]或policy.rejectedCIDRs[],则应用以下规则:-
如果同时设置了
allowedCIDRs[]和rejectedCIDRs[],则allowedCIDRs[]的设置高于rejectedCIDRs[]。 -
如果设置了
allowedCIDRs[],只有在允许指定的 IP 地址时,创建带有spec.ExternalIPs[]的Service对象才能成功。 -
如果设置了
rejectedCIDRs[],只有在指定的 IP 地址未被拒绝时,创建带有spec.ExternalIPs[]的Service对象才能成功。
-
如果同时设置了
21.2.2.3. 策略对象示例 复制链接链接已复制到粘贴板!
下面的例子演示了几个不同的策略配置。
在以下示例中,策略会防止 OpenShift Container Platform 使用指定的外部 IP 地址创建任何服务:
拒绝为
Service对象spec.externalIPs[]指定的任何值的策略示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在以下示例中,设置了
allowedCIDRs和rejectedCIDRs字段。包括允许和拒绝 CIDR 块的策略示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在以下示例中,
policy被设置为null。如果设为null,则通过输入oc get network.config.openshift.io -o yaml来检查配置对象时,policy项不会出现在输出中。允许为
Service对象spec.externalIPs[]指定的任何值的示例策略Copy to Clipboard Copied! Toggle word wrap Toggle overflow
21.2.3. ExternalIP 地址块配置 复制链接链接已复制到粘贴板!
ExternalIP 地址块的配置由名为 cluster 的网络自定义资源(CR)定义。Network CR 是 config.openshift.io API 组的一部分。
在集群安装过程中,Cluster Version Operator(CVO)会自动创建一个名为 cluster 的网络 CR。不支持创建此类型的任何其他 CR 对象。
以下 YAML 描述了 ExternalIP 配置:
network.config.openshift.io CR 名为 cluster
以下 YAML 描述了 policy 小节的字段:
network.config.openshift.io policy 小节
policy: allowedCIDRs: [] rejectedCIDRs: []
policy:
allowedCIDRs: []
rejectedCIDRs: []
外部 IP 配置示例
以下示例中显示了外部 IP 地址池的一些可能配置:
以下 YAML 描述了启用自动分配外部 IP 地址的配置:
带有
spec.externalIP.autoAssignCIDRs的配置示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下 YAML 为允许的和被拒绝的 CIDR 范围配置策略规则:
带有
spec.externalIP.policy的示例配置Copy to Clipboard Copied! Toggle word wrap Toggle overflow
21.2.4. 为集群配置外部 IP 地址块 复制链接链接已复制到粘贴板!
作为集群管理员,可以配置以下 ExternalIP 设置:
-
OpenShift Container Platform 用来自动填充
Service对象的spec.clusterIP字段的 ExternalIP 地址块。 -
用于限制可手动分配给
Service对象的spec.clusterIP数组的 IP 地址的策略对象。
先决条件
-
安装 OpenShift CLI(
oc)。 -
使用具有
cluster-admin角色的用户访问集群。
流程
可选: 要显示当前的外部 IP 配置,请输入以下命令:
oc describe networks.config cluster
$ oc describe networks.config clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要编辑配置,请输入以下命令:
oc edit networks.config cluster
$ oc edit networks.config clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 修改 ExternalIP 配置,如下例所示:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定
externalIP小节的配置。
要确认更新的 ExternalIP 配置,请输入以下命令:
oc get networks.config cluster -o go-template='{{.spec.externalIP}}{{"\n"}}'$ oc get networks.config cluster -o go-template='{{.spec.externalIP}}{{"\n"}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow