第 7 章 配置 Ingress Controller 端点发布策略
7.1. Ingress Controller 端点发布策略
NodePortService
端点发布策略
NodePortService
端点发布策略使用 Kubernetes NodePort 服务发布 Ingress Controller。
在这个配置中,Ingress Controller 部署使用容器网络。创建了一个
NodePortService 来发布部署。特定的节点端口由 OpenShift Container Platform 动态分配; 但是,为了支持静态端口分配,您会保留对受管 NodePortService 的节点端口字段的更改
。
图 7.1. NodePortService 图表
上图显示了与 OpenShift Container Platform Ingress NodePort 端点发布策略相关的以下概念:
- 集群中的所有可用节点均有自己的外部可访问 IP 地址。集群中运行的服务绑定到所有节点的唯一 NodePort。
-
当客户端连接到停机的节点时,例如,通过连接图形中的
10.0.128.4
IP 地址,节点端口将客户端直接连接到运行该服务的可用节点。在这种情况下,不需要负载平衡。如图形中所显,10.0.128.4
地址已不可用,必须使用另一个 IP 地址。
Ingress Operator 忽略对服务的 .spec.ports[].nodePort
字段的任何更新。
默认情况下,端口会自动分配,您可以访问集成的端口分配。但是,有时需要静态分配端口来与现有基础架构集成,这些基础架构可能无法根据动态端口进行重新配置。要实现与静态节点端口的集成,您可以直接更新受管服务资源。
如需有关 daemonset 的更多信息,请参阅关于 NodePort
的 Kubernetes 服务文档。
HostNetwork
端点发布策略
HostNetwork
端点发布策略会在部署 Ingress Controller 的节点端口上发布 Ingress Controller。
带有 HostNetwork
端点发布策略的 Ingress Controller 每个节点只能有一个 pod 副本。如果您想要 n 个副本,则必须至少使用可调度这些副本的 n 个节点。因为每个 Pod 副本都会通过调度的节点主机上的端口 80
和 443
进行请求,所以如果同一节点上的其他 pod 使用这些端口,则无法将副本调度到该节点。
7.1.1. 将 Ingress Controller 端点发布范围配置为 Internal
当集群管理员在没有指定集群为私有的情况下安装新集群时,将默认 Ingress Controller 创建,并将 scope
设置为 External
。集群管理员可以将 External
范围的 Ingress Controller 更改为 Internal
。
先决条件
-
已安装
oc
CLI。
流程
要将
External
范围的 Ingress Controller 更改为Internal
,请输入以下命令:$ oc -n openshift-ingress-operator patch ingresscontrollers/default --type=merge --patch='{"spec":{"endpointPublishingStrategy":{"type":"LoadBalancerService","loadBalancer":{"scope":"Internal"}}}}'
要检查 Ingress Controller 的状态,请输入以下命令:
$ oc -n openshift-ingress-operator get ingresscontrollers/default -o yaml
Progressing
状态条件指示您必须执行进一步的操作。例如,状态条件可以通过输入以下命令来指示需要删除该服务:$ oc -n openshift-ingress delete services/router-default
如果删除了该服务,Ingress Operator 会重新创建为
Internal
。
7.1.2. 配置 Ingress Controller 端点发布范围到外部
当集群管理员在没有指定集群为私有的情况下安装新集群时,将默认 Ingress Controller 创建,并将 scope
设置为 External
。
Ingress Controller 的范围可以在安装过程中或之后配置为 Internal
,集群管理员可以将 内部
Ingress Controller 更改为 External
。
在某些平台上,需要删除并重新创建服务。
更改范围可能会导致 Ingress 流量中断,这可能会持续几分钟。这适用于需要删除和重新创建服务的平台,因为流程可能会导致 OpenShift Container Platform 取消置备现有服务负载均衡器、置备一个新服务负载均衡器并更新 DNS。
先决条件
-
已安装
oc
CLI。
流程
要将
内部
范围的 Ingress Controller 更改为外部
,请输入以下命令:$ oc -n openshift-ingress-operator patch ingresscontrollers/private --type=merge --patch='{"spec":{"endpointPublishingStrategy":{"type":"LoadBalancerService","loadBalancer":{"scope":"External"}}}}'
要检查 Ingress Controller 的状态,请输入以下命令:
$ oc -n openshift-ingress-operator get ingresscontrollers/default -o yaml
Progressing
状态条件指示您必须执行进一步的操作。例如,状态条件可以通过输入以下命令来指示需要删除该服务:$ oc -n openshift-ingress delete services/router-default
如果删除了该服务,Ingress Operator 会重新创建为
External
。