专用VPC集群:为什么无法连接到 OpenShift 控制台?
排除在只有专用服务端点的群集上连接 OpenShift 控制台的问题。
本故障排除指南中的信息仅适用于具有专用服务端点的VPC集群。
1. 了解集群连接流程
下图显示了VPC集群的连接流程,其中包含用于连接 OpenShift Web控制台的私有服务端点。 此图假设集群具有默认的OAuth设置。 请查看此图和以下描述,以便更好地了解可能需要采取哪些故障排除步骤。
- 网络浏览器通过虚拟专用网络连接到集群主应用程序接口服务器。 交换签名证书,并使用重定向指令让网络浏览器连接到 OpenShift 控制台负载均衡器。
- (a) Web浏览器通过VPN连接到 OpenShift 控制台负载均衡器,该负载均衡器公开了 OpenShift 控制台。(b) 此请求被发送到两个openshift-console容器中的一个。
- openshift-console pod连接到集群主OAuth服务器端口,检查连接是否已通过身份验证。 如果请求已经过身份验证,则与 OpenShift 网络控制台的连接已完成,可以访问网络控制台。 如果请求未通过验证,用户将被重定向到集群主服务器上的集群OAuth服务。
- 网络浏览器通过VPN连接到集群的OAuth服务器端口,该端口将客户端重定向到IAM。
- 网络浏览器通过公共网络连接到IAM。 用户输入密码,必要时还需输入 2FA 验证信息。 如果这一步成功,用户将被重新定向到集群的OAuth服务器。
- 网络浏览器通过VPN再次连接到集群的OAuth服务器端口。 连接被重定向回 OpenShift 控制台负载均衡器。
- 网络浏览器通过VPN连接到 OpenShift 控制台负载均衡器,从而暴露了 OpenShift 控制台。 该请求发送到两个openshift-console容器中的一个,后者再次连接到集群主OAuth服务器端口,以检查连接是否已通过身份验证。 如果用户输入了密码并通过了 2FA 验证,则认证通过,用户将连接到 OpenShift 控制台的主网页。
2. 检查您的VPC和集群配置
请确认您的VPC和集群配置正确。 配置不正确可能会导致您无法访问 OpenShift 网络控制台。
-
请确保您的网络浏览器运行在客户端系统中,该客户端系统与您的集群位于同一 VPC 中,或通过 VPN 连接到该 VPC。 OpenShift 控制台由专用VPC负载均衡器提供,只能通过VPC的专用网络访问。
-
确保客户系统能够访问IAM的公共服务终端,可通过
iam.cloud.ibm.com
和login.ibm.com
访问。 -
对于运行版本 4.13:
- 如果您的集群使用默认的 4.13 Oauth配置,或者您已将集群设置为使用VPE Gateway进行Oauth,请确保您的客户端正在使用VPC的专用DNS,并且该DNS流量通过VPN路由到VPC。 除非您使用自定义的DNS解析器,否则私人DNS通常是
161.26.0.7
和161.26.0.8
。 这是必需的,以便可以在VPC的专用DNS中找到任何公共DNS中都不存在的apiserver
和Oauth
的VPE网关。
- 如果您的集群使用默认的 4.13 Oauth配置,或者您已将集群设置为使用VPE Gateway进行Oauth,请确保您的客户端正在使用VPC的专用DNS,并且该DNS流量通过VPN路由到VPC。 除非您使用自定义的DNS解析器,否则私人DNS通常是
-
对于运行任何受支持版本(除 4.13:
- 如果您使用的是默认的Oauth集群设置,请确保VPN配置中存在路由,以便所有
166.8.0.0/14
流量都通过同一VPN或连接到 IBM Cloud 的其他VPN进行路由。 这是连接集群的API服务器和OAuth服务器端口所必需的。
- 如果您使用的是默认的Oauth集群设置,请确保VPN配置中存在路由,以便所有
3. 收集集群数据
请按照以下步骤收集故障诊断所需的集群信息。 您使用这些命令收集的输出将在后续步骤中使用。
-
找到集群API服务器 URL。 在以后的命令中,这个 URL 被称为
${CLUSTER_APISERVER_URL}
。- 运行
ibmcloud ks cluster get -c <cluster-id>
命令。ibmcloud oc cluster get -c <cluster-id>
- 在输出的
Master
部分,找到URL
。 URL 的格式应为:https://c<XXX>-e.private.<REGION>.containers.cloud.ibm.com:<YYYYY>
。
- 运行
-
找到集群 OAuth URL。 在以后的命令中,这个 URL 被称为
${CLUSTER_OAUTH_URL}
。- 运行
kubectl get --raw /.well-known/oauth-authorization-server | grep issuer
命令。 不要使用ibmcloud oc cluster get -c <CLUSTER-ID>
,因为这个命令可能会返回一个不同的 URL。kubectl get --raw /.well-known/oauth-authorization-server | grep issuer
- 在输出中,找到以下格式之一的 URL。
- 如果VPE网关未用于OAuth:
https://c<XXX>-e.private.<REGION>.containers.cloud.ibm.com:<ZZZZZ>
。 - 如果VPE网关用于OAuth:
https://<CLUSTERID>.vpe.private.<REGION>.containers.cloud.ibm.com:<ZZZZZ>
。
- 如果VPE网关未用于OAuth:
- 运行
-
找到入口子域。 在以后的命令中,这个子域被称为
${CONSOLE_LOAD_BALANCER}
。- 运行
ibmcloud oc cluster get -c <CLUSTER-ID>
命令。ibmcloud oc cluster get -c <CLUSTER-ID>
- 在输出中,找到符合以下格式的子域:
<CLUSTER-NAME-PLUS-RANDOM-UNIQUE-STRING>.<REGION>.containers.appdomain.cloud
。 请注意,如果您配置了自定义入口子域,则格式将改为与您的自定义配置匹配。
- 运行
4. 验证连接并进行故障排除
请按照以下步骤检查 连接流程中 描述的连接。 如果您发现连接有问题,请使用这些信息排除故障。
-
检查入口是否正常,路由器和控制台是否正常。
- 运行命令。
ibmcloud oc cluster get -c <CLUSTERID> ibmcloud oc ingress status-report get -c <CLUSTERID>
- 如果输出显示错误状态,请使用 入口故障排除文档 解决问题。
- 运行命令。
-
请确认 OpenShift 集群操作员是否健康。
- 运行命令。
oc get clusteroperators
- 如果输出显示任何操作员不健康或未运行当前版本,请使用 OpenShift 集群版本故障排除文档 来解决这个问题。 或者,您也可以在 IBM 和 Red Hat 文档中搜索显示的任何特定错误。
- 如果控制台操作员特别不健康,请检查
openshift-console/console...
和openshift-console-operator/console-operator...
pod日志,查看安全组、ACL或DNS自定义是否阻止了pod连接到OAuth端口或 OpenShift 控制台 URL。 安全组、访问控制列表或域名系统(DNS)的配置可能会阻止连接。
- 运行命令。
-
确认与集群主API服务器的连接是否成功。
- 运行命令。 请填写您在 之前步骤 中找到的集群管理服务器 URL。
curl -k -vvv ${CLUSTER_APISERVER_URL}/version
- 如果连接不成功,请进行以下检查并解决您发现的任何问题。
- 通过运行
ibmcloud oc cluster get -c <CLUSTER-ID>
命令检查集群主节点是否健康。 请参阅 《审查主健康 》以了解如何解决集群主问题。 - 检查 URL 的主机名部分是否已通过DNS解析。 使用
dig $(echo ${CLUSTER_APISERVER_URL} | cut -d/ -f3 | cut -d: -f1)
命令并指定集群API服务器 URL。 - 请确认您的VPN中有一条连接到集群API服务器 URL 的路径。
- 如果集群apiserver URL 包含您的集群ID(这表明集群使用VPE网关连接集群apiserver),请检查集群主机的VPE网关安全组是否允许来自您的VPN客户端子网的流量。 按照 当 OAuth 访问设置为 VPE 网关时访问 OpenShift 控制台 中的步骤进行操作。
- 检查是否任何安全组、访问控制列表或自定义的虚拟专用网络路由阻止了VPN与集群API服务器之间的通信。 您可以暂时允许所有入站和出站流量通过VPN安全组和访问控制列表,然后检查是否解决了问题,以此来测试。 如果是这样,请对您的安全组、访问控制列表或自定义路由进行必要的更改,以允许流量通过。
- 检查群集中是否有任何基于上下文的限制 (CBR) 规则阻止客户端连接群集 API 服务器。 您可以暂时在CBR规则中添加一个允许所有IP和子网的网络区域来测试这一点。 如果临时更改能解决问题,则对规则进行必要更改,以允许流量。
- 通过运行
- 运行命令。 请填写您在 之前步骤 中找到的集群管理服务器 URL。
-
验证与集群负载均衡器的连接是否成功,该负载均衡器暴露了 OpenShift 控制台。
- 运行命令。 请填写您在 之前步骤 中找到的入口子域名。
curl -k -vvv https://console-openshift-console.${CONSOLE_LOAD_BALANCER}/
- 如果连接不成功,请进行以下检查并解决您发现的任何问题。
- 检查子域的主机名部分是否已通过 DNS 解析。 使用
dig console-openshift-console.${CONSOLE_LOAD_BALANCER}
命令。 - 验证您的VPN中是否存在一条通往该负载均衡器子域的路径。 确认路由中包含负载均衡器使用的所有IP或子网。
dig console-openshift-console.${CONSOLE_LOAD_BALANCER}
命令的输出包括当前负载均衡器的IP和子网,但请注意,这些可能会随着负载均衡器的扩展或缩减而改变。 - 如果您修改了应用于负载均衡器的任何安全组、访问控制列表或自定义VPC路由,请检查您应用的任何更改或规则是否阻止了连接。 如果您没有修改任何组件,且它们使用默认值,则可以跳过此步骤。
- 检查是否任何安全组、访问控制列表或自定义的虚拟专用网络路由阻止了VPN与负载均衡器之间的通信。 您可以暂时允许所有入站和出站流量通过VPN安全组和访问控制列表,然后检查是否解决了问题,以此来测试。 如果是这样,请对您的安全组、访问控制列表或自定义路由进行必要的更改,以允许流量通过。
- 检查子域的主机名部分是否已通过 DNS 解析。 使用
- 运行命令。 请填写您在 之前步骤 中找到的入口子域名。
-
验证与集群OAuth服务器的连接是否成功。
- 运行命令。 请填写您在 之前步骤 中找到的集群OAuth URL。
curl -k -vvv ${CLUSTER_OAUTH_URL}/healthz
- 如果连接不成功,请进行以下检查并解决您发现的任何问题。
- 通过运行
ibmcloud oc cluster get -c <CLUSTER-ID>
命令检查集群主节点是否健康。 请参阅 《审查主健康 》以了解如何解决集群主问题。 - 检查集群OAuth URL 的主机名部分是否已通过DNS解析。 请使用
dig $(echo ${CLUSTER_OAUTH_URL} | cut -d/ -f3 | cut -d: -f1)
并指定集群 OAuth URL。 - 请确认您的VPN能够访问集群主服务器OAuth URL。
- 检查是否任何安全组、访问控制列表或自定义的虚拟专用网络路由应用到VPN,从而阻止VPN与集群OAuth服务器之间的通信。 您可以暂时允许所有入站和出站流量通过VPN安全组和访问控制列表,然后检查是否解决了问题,以此来测试。 如果是这样,请对您的安全组、访问控制列表或自定义路由进行必要的更改,以允许流量通过。
- 检查群集上是否有任何基于上下文的限制 (CBR) 规则阻止客户端连接到群集 OAuth 服务器。 您可以暂时在CBR规则中添加一个允许所有IP和子网的网络区域来测试这一点。 如果临时更改能解决问题,则对规则进行必要更改,以允许流量。
- 通过运行
- 运行命令。 请填写您在 之前步骤 中找到的集群OAuth URL。
-
验证与IAM的连接是否成功。
- 运行命令。
curl -vvv https://iam.cloud.ibm.com/healthz curl -vvv -o /dev/null -s https://login.ibm.com/
- 如果这两个命令中的任何一个失败,请检查客户端系统是否能可靠地连接这些URL,以及这些URL是否被任何客户端或公司防火墙阻止。 请注意,这些URL需要访问公共互联网。
- 运行命令。
5. 联系客服
如果您已完成上述所有步骤,但问题仍未解决,请联系支持部门。 提交 支持案例。 在案例详情中,请务必附上相关的日志文件、错误信息或命令输出。