在 Satellite 集群中公开应用程序
安全地向来自公用网络,连接到主机专用网络的资源或来自 IBM Cloud中的资源的流量请求公开在 Satellite 集群中运行的应用程序。
您有多个用于在 Satellite 集群中公开应用程序的选项:
- MetalLB:适用于企业内部Satellite集群的
LoadBalancer
实现。 - Red Hat OpenShift 路由: 使用主机名快速向来自公共或专用网络的请求公开应用程序。 Red Hat OpenShift Ingress 控制器为您的路由提供 DNS 注册和可选证书。
- 第三方负载均衡器和 Red Hat OpenShift 路由: 显示具有主机名的应用程序,并添加在 Ingress 控制器的 DNS 记录中注册的主机 IP 地址的运行状况检查。
- NodePorts: 将非 HTTP (S)应用(如UDP或TCP应用)暴露在30000-32767范围内的 NodePort 中。
- Red Hat OpenShift 路由和 Satellite 链接端点: 显示具有专用路由的应用程序,并为该路由创建类型为
location
的链接端点。 只有连接到 IBM Cloud 专用网络的资源才能访问应用程序。
设置 MetalLB
MetalLB 是使用标准路由协议的裸机 Kubernetes 集群的负载均衡器实现。 有关更多信息,请参阅 Red Hat OpenShift 文档中的 关于 MetalLB 和 MetalLB Operator。
要安装和配置MetalLB,遵循Red Hat OpenShift文档中“安装MetalLB操作器”下的说明。 开始之前,请确保您具有用于
LoadBalancer
服务的外部 IP 的专用子网 (IPAddressPool
)。 检查 IPAddressPool
中包含的 IP 地址是否未保留或未用于其他用途,否则负载均衡功能可能会失败。
通过 Red Hat OpenShift 路由公开应用程序
使用路径在 Red Hat OpenShift Ingress 控制器的外部 IP 地址上快速公开集群中的服务。
Red Hat OpenShift 路由 以 <service_name>-<project>.<cluster_name>-<random_hash>-0000.upi.containers.appdomain.cloud
格式将服务公开为主机名。 您的群集默认部署了一个入口控制器,外部客户端可以通过它使用路由。
入口控制器使用服务选择器查找服务和支持该服务的端点。 您可以配置服务选择器,以通过一个路径将流量定向到多个服务。 您还可以使用 Ingress 控制器为您的主机名分配的 TLS 证书,创建不安全或安全路由。 请注意,Ingress控制器仅支持 HTTP 和 HTTPS 协议。
在开始路由之前,请查看以下注意事项。
- 主机网络连接
- 如果集群的主机具有公用网络连接,那么缺省情况下将使用公用 Ingress 控制器创建集群。 您可以使用此 Ingress 控制器为应用程序创建公共路径。 如果集群的主机仅具有专用网络连接,那么缺省情况下将使用专用 Ingress 控制器创建集群。 您可以使用此 Ingress 控制器为应用程序创建专用路径,这些路径只能从主机的专用网络中访问。 要在仅具有专用网络连接的集群中设置公用路由,请先 设置您自己的第三方负载均衡器 (在专用 Ingress 控制器之前具有公用网络连接),然后再完成以下步骤。
- 运行状况检查
- 缺省情况下,将为集群的 Ingress 控制器提供 DNS 注册管理。 例如,如果从您的位置除去分配给集群的主机并将其替换为其他主机,那么 IBM 将更新 Ingress 控制器的 DNS 记录中的主机 IP 地址。 请注意,虽然为您提供了路由的 DNS 注册,但在集群中的 Ingress 控制器之前未部署任何负载均衡器服务。 要运行状况检查在 Ingress 控制器的 DNS 记录中注册的主机的 IP 地址,您可以先在 Ingress 控制器前面 设置自己的第三方负载均衡器,然后再完成以下步骤。
要为应用程序创建路径,请执行以下操作:
-
为应用程序部署创建 Kubernetes
ClusterIP
服务。 该服务为 Ingress 控制器可将流量发送到的应用程序提供内部 IP 地址。oc expose deploy <app_deployment_name> --name my-app-svc
-
为应用程序设置域。
- IBM提供的域: 如果不需要使用定制域,那么将以
<service_name>-<project>.<cluster_name>-<random_hash>-0000.upi.containers.appdomain.cloud
格式为您生成路由主机名。 继续下一步。 - 定制域: 使用 DNS 提供程序来创建定制域。 请注意,如果先前在 Ingress 控制器前面设置了第三方负载均衡器,请与 DNS 提供者一起为负载均衡器创建定制域。
- IBM提供的域: 如果不需要使用定制域,那么将以
-
在 EXTERNAL-IP 列中获取 Ingress 控制器服务的 IP 地址。
oc get svc router-external-default -n openshift-ingress
-
通过 DNS 提供商创建自定义域名。 如果要将同一子域用于集群中的多个服务,那么可以注册通配符子域,例如
*.example.com
。 -
将 IP 地址添加为 A 记录,将自定义域映射到导入控制器的 IP 地址。
-
设置基于应用程序需要的 TLS 终止类型 的路由。 如果您没有定制域,请不要包含
--hostname
选项,以便为您生成路由主机名。 如果已注册通配符子域,请在创建的每个路由中指定唯一的子域。 例如,可以在此路由中指定--hostname svc1.example.com
,在另一个路由中指定--hostname svc2.example.com
。-
简单:
oc expose service <app_service_name> [--hostname <subdomain>]
-
传递:
oc create route passthrough --service <app_service_name> [--hostname <subdomain>]
需要处理 HTTP/2 连接吗? 创建路由后,运行
oc edit route <app_service_name>
并将路由的targetPort
值更改为https
。 您可以通过运行curl -I --http2 https://<route> --insecure
来测试路由。 -
Edge: 如果使用定制域,请包括
--hostname
,--cert
和--key
选项以及 (可选)--ca-cert
选项。 有关 TLS 证书需求的更多信息,请参阅 Red Hat OpenShift 边缘路由文档。oc create route edge --service <app_service_name> [--hostname <subdomain> --cert <tls.crt> --key <tls.key> --ca-cert <ca.crt>]
-
重新加密: 如果使用定制域,请包括
--hostname
,--cert
和--key
选项以及 (可选)--ca-cert
选项。 有关 TLS 证书需求的更多信息,请参阅 Red Hat OpenShift 重新加密路由文档。oc create route reencrypt --service <app_service_name> --dest-ca-cert <destca.crt> [--hostname <subdomain> --cert <tls.crt> --key <tls.key> --ca-cert <ca.crt>]
-
-
验证是否已创建应用程序服务的路径。
oc get routes
-
可选: 使用 可选配置定制缺省路由规则。 例如,您可以使用 特定于路由的 HAProxy 注释。
在 Red Hat OpenShift 入口控制器前设置第三方负载均衡器
要检查在 Ingress 控制器的 DNS 记录中注册的主机的 IP 地址,您可以在分配为集群的工作程序节点的主机的 IP 地址之前设置自己的第三方负载均衡器。
例如,如果从您的位置除去分配给集群的主机并将其替换为其他主机,那么 IBM 将更新 Ingress 控制器的 DNS 记录中的主机 IP 地址。 但是,如果关闭主机的电源,例如通过云提供者的基础架构管理,那么不会从 Ingress 控制器的 DNS 记录中除去该主机的 IP 地址,并且如果将该 DNS 记录解析为该主机的 IP 地址,那么可能会导致调用失败。 通过在 Ingress 控制器前设置负载均衡器,可以确保定期检查主机 IP 地址的运行状况,例如,确保生产级工作负载的高可用性。
在 Ingress 控制器前面创建负载均衡器后,可以使用 Ingress 控制器为应用程序创建路径。 将请求发送到应用程序的路径时,负载均衡器会先接收该请求,然后再将其转发到 Ingress 控制器,然后再将该请求转发到应用程序。
-
列出集群的缺省 Ingress 控制器的详细信息。 在输出的 EXTERNAL-IP 列中,获取为集群的 Ingress 控制器注册的工作程序节点 IP 地址。 在输出的 PORT (S) 列中,根据是要创建公共负载均衡器还是专用负载均衡器,获取 Ingress 控制器服务当前针对公共或专用网络流量公开的节点端口。
oc get svc router-external-default -n openshift-ingress
在以下示例输出中,将针对公共流量 (80) 公开节点端口
30783
。NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE router-external-default LoadBalancer 172.21.84.172 169.xx.xxx.xxx, 169.xx.xxx.xxx 80:30783/TCP,443:30413/TCP 24h
-
使用这些 IP 地址和节点端口,创建连接到主机专用网络的层 4 负载均衡器。 例如,您可以从主机的云提供者部署负载均衡器,或者将 F5 负载均衡器部署到本地网络。 要创建公共路由,负载均衡器必须具有公用网络连接,并且必须能够将 TCP 和 UDP 流量转发到您在上一步中找到的公共流量的端口。 要创建专用路由,负载均衡器必须能够将 TCP 和 UDP 流量转发到您在上一步中找到的专用流量的端口。
-
获取集群的 主机名。 此子域的格式为
<cluster_name>-<random_hash>-0000.upi.containers.appdomain.cloud
,向集群的 Ingress 控制器注册。ibmcloud oc nlb-dns ls --cluster <cluster_name_or_ID>
-
将负载均衡器的公共 IP 地址添加到集群的子域。 对要添加的所有公共 IP 地址重复此命令。
ibmcloud oc nlb-dns add --ip <public_IP> --cluster <cluster_name_or_ID> --nlb-host <hostname>
-
从集群的子域中除去工作程序节点 IP 地址。 对先前检索的所有 IP 地址重复此命令。
ibmcloud oc nlb-dns rm classic --ip <private_IP> --cluster <cluster_name_or_ID> --nlb-host <hostname>
-
验证现在是否已向集群子域注册了负载均衡器的公共 IP 地址。
ibmcloud oc nlb-dns ls --cluster <cluster_name_or_ID>
-
继续执行 使用 Red Hat OpenShift 路径来公开应用程序 中的步骤,以创建应用程序的路径。
如果配置外部负载平衡器或 VIP 注册子域,而不是使用默认注册,则该负载平衡器 需要对群集主机进行入站访问,而群集主机需要对负载平衡器进行出站访问。
使用 NodePort 公开应用程序
如果无法使用 Red Hat OpenShift Ingress 控制器来公开应用程序,例如,如果必须公开 TCP 或 UDP 应用程序,那么可以为应用程序创建 NodePort。
-
为您的应用程序创建 NodePort。 将 NodePort (范围为 30000-32767) 和内部集群 IP 地址分配给应用程序。
oc expose deployment <deployment_name> --type=NodePort --name=<nodeport_svc_name>
-
获取分配给应用程序的 NodePort。
oc describe svc <nodeport_svc_name>
-
获取格式为
<cluster_name>-<random_hash>-0000.upi.containers.appdomain.cloud
的集群的 主机名。ibmcloud oc nlb-dns ls --cluster <cluster_name_or_ID>
-
通过使用集群的子域以及格式为
<cluster_name>-<random_hash>-0000.upi.containers.appdomain.cloud:<nodeport>
的 NodePort 来访问应用程序。 请注意,如果主机仅具有专用网络连接,那么必须通过 VPN 访问等方式连接到主机的专用网络。 -
可选: 如果您不想直接访问 NodePort,或者如果必须在特定端口 (例如 443) 上公开应用程序,那么可以设置自己的第三方层 4 负载均衡器,该负载均衡器连接到主机的专用网络并将流量转发到 NodePort。 例如,您可以从主机的云提供者部署负载均衡器,或者将 F5 负载均衡器部署到本地网络。 负载均衡器必须能够转发端口
30000 - 32767
的 TCP 和 UDP 流量。
为来自 IBM Cloud 的流量公开具有路由和链接端点的应用程序
如果要通过专用网络从 IBM Cloud 中的资源访问 Satellite 集群中的应用程序,那么可以使用专用 Ingress 控制器为应用程序创建专用路由。 然后,您可以为路由创建类型为 location
的链接端点,该端点只能从 IBM Cloud 专用网络中进行访问。
-
遵循 使用 Red Hat OpenShift 路由公开应用程序 中的步骤,为应用程序创建专用路由。 只能从主机的专用网络中访问此路由。
-
遵循 创建
location
端点以连接到位置中的资源 中的步骤,为应用程序的专用路由创建 Satellite 链接端点。 -
可选: 要仅允许从 IBM Cloud中的特定资源访问端点,请 将资源添加到端点的源列表。