IBM Cloud Docs
专用VPC集群:为什么无法连接到 OpenShift 控制台?

专用VPC集群:为什么无法连接到 OpenShift 控制台?

排除在只有专用服务端点的群集上连接 OpenShift 控制台的问题。

本故障排除指南中的信息仅适用于具有专用服务端点的VPC集群。

1. 了解集群连接流程

下图显示了VPC集群的连接流程,其中包含用于连接 OpenShift Web控制台的私有服务端点。 此图假设集群具有默认的OAuth设置。 请查看此图和以下描述,以便更好地了解可能需要采取哪些故障排除步骤。

OpenShift
OpenShift VPC集群的Web控制台连接流程,带有私有服务端点 VPC集群的Web控制台连接流程,带有私有服务端点。

  1. 网络浏览器通过虚拟专用网络连接到集群主应用程序接口服务器。 交换签名证书,并使用重定向指令让网络浏览器连接到 OpenShift 控制台负载均衡器。
  2. (a) Web浏览器通过VPN连接到 OpenShift 控制台负载均衡器,该负载均衡器公开了 OpenShift 控制台。(b) 此请求被发送到两个openshift-console容器中的一个。
  3. openshift-console pod连接到集群主OAuth服务器端口,检查连接是否已通过身份验证。 如果请求已经过身份验证,则与 OpenShift 网络控制台的连接已完成,可以访问网络控制台。 如果请求未通过验证,用户将被重定向到集群主服务器上的集群OAuth服务。
  4. 网络浏览器通过VPN连接到集群的OAuth服务器端口,该端口将客户端重定向到IAM。
  5. 网络浏览器通过公共网络连接到IAM。 用户输入密码,必要时还需输入 2FA 验证信息。 如果这一步成功,用户将被重新定向到集群的OAuth服务器。
  6. 网络浏览器通过VPN再次连接到集群的OAuth服务器端口。 连接被重定向回 OpenShift 控制台负载均衡器。
  7. 网络浏览器通过VPN连接到 OpenShift 控制台负载均衡器,从而暴露了 OpenShift 控制台。 该请求发送到两个openshift-console容器中的一个,后者再次连接到集群主OAuth服务器端口,以检查连接是否已通过身份验证。 如果用户输入了密码并通过了 2FA 验证,则认证通过,用户将连接到 OpenShift 控制台的主网页。

2. 检查您的VPC和集群配置

请确认您的VPC和集群配置正确。 配置不正确可能会导致您无法访问 OpenShift 网络控制台。

  1. 请确保您的网络浏览器运行在客户端系统中,该客户端系统与您的集群位于同一 VPC 中,或通过 VPN 连接到该 VPC。 OpenShift 控制台由专用VPC负载均衡器提供,只能通过VPC的专用网络访问。

  2. 确保客户系统能够访问IAM的公共服务终端,可通过 iam.cloud.ibm.comlogin.ibm.com 访问。

  3. 对于运行版本 4.13:

    • 如果您的集群使用默认的 4.13 Oauth配置,或者您已将集群设置为使用VPE Gateway进行Oauth,请确保您的客户端正在使用VPC的专用DNS,并且该DNS流量通过VPN路由到VPC。 除非您使用自定义的DNS解析器,否则私人DNS通常是 161.26.0.7161.26.0.8。 这是必需的,以便可以在VPC的专用DNS中找到任何公共DNS中都不存在的 apiserverOauth 的VPE网关。
  4. 对于运行任何受支持版本(除 4.13:

    • 如果您使用的是默认的Oauth集群设置,请确保VPN配置中存在路由,以便所有 166.8.0.0/14 流量都通过同一VPN或连接到 IBM Cloud 的其他VPN进行路由。 这是连接集群的API服务器和OAuth服务器端口所必需的。

3. 收集集群数据

请按照以下步骤收集故障诊断所需的集群信息。 您使用这些命令收集的输出将在后续步骤中使用。

  1. 找到集群API服务器 URL。 在以后的命令中,这个 URL 被称为 ${CLUSTER_APISERVER_URL}

    1. 运行 ibmcloud ks cluster get -c <cluster-id> 命令。
      ibmcloud oc cluster get -c <cluster-id>
      
    2. 在输出的 Master 部分,找到 URL。 URL 的格式应为:https://c<XXX>-e.private.<REGION>.containers.cloud.ibm.com:<YYYYY>
  2. 找到集群 OAuth URL。 在以后的命令中,这个 URL 被称为 ${CLUSTER_OAUTH_URL}

    1. 运行 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
      
    2. 在输出中,找到以下格式之一的 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>
  3. 找到入口子域。 在以后的命令中,这个子域被称为 ${CONSOLE_LOAD_BALANCER}

    1. 运行 ibmcloud oc cluster get -c <CLUSTER-ID> 命令。
      ibmcloud oc cluster get -c <CLUSTER-ID>
      
    2. 在输出中,找到符合以下格式的子域:<CLUSTER-NAME-PLUS-RANDOM-UNIQUE-STRING>.<REGION>.containers.appdomain.cloud。 请注意,如果您配置了自定义入口子域,则格式将改为与您的自定义配置匹配。

4. 验证连接并进行故障排除

请按照以下步骤检查 连接流程中 描述的连接。 如果您发现连接有问题,请使用这些信息排除故障。

  1. 检查入口是否正常,路由器和控制台是否正常。

    1. 运行命令。
      ibmcloud oc cluster get -c <CLUSTERID>
      ibmcloud oc ingress status-report get -c <CLUSTERID>
      
    2. 如果输出显示错误状态,请使用 入口故障排除文档 解决问题。
  2. 请确认 OpenShift 集群操作员是否健康。

    1. 运行命令。
      oc get clusteroperators
      
    2. 如果输出显示任何操作员不健康或未运行当前版本,请使用 OpenShift 集群版本故障排除文档 来解决这个问题。 或者,您也可以在 IBM 和 Red Hat 文档中搜索显示的任何特定错误。
    3. 如果控制台操作员特别不健康,请检查 openshift-console/console...openshift-console-operator/console-operator... pod日志,查看安全组、ACL或DNS自定义是否阻止了pod连接到OAuth端口或 OpenShift 控制台 URL。 安全组、访问控制列表或域名系统(DNS)的配置可能会阻止连接。
  3. 确认与集群主API服务器的连接是否成功。

    1. 运行命令。 请填写您在 之前步骤 中找到的集群管理服务器 URL。
      curl -k -vvv ${CLUSTER_APISERVER_URL}/version
      
    2. 如果连接不成功,请进行以下检查并解决您发现的任何问题。
      1. 通过运行 ibmcloud oc cluster get -c <CLUSTER-ID> 命令检查集群主节点是否健康。 请参阅 《审查主健康 》以了解如何解决集群主问题。
      2. 检查 URL 的主机名部分是否已通过DNS解析。 使用 dig $(echo ${CLUSTER_APISERVER_URL} | cut -d/ -f3 | cut -d: -f1) 命令并指定集群API服务器 URL。
      3. 请确认您的VPN中有一条连接到集群API服务器 URL 的路径。
      4. 如果集群apiserver URL 包含您的集群ID(这表明集群使用VPE网关连接集群apiserver),请检查集群主机的VPE网关安全组是否允许来自您的VPN客户端子网的流量。 按照 当 OAuth 访问设置为 VPE 网关时访问 OpenShift 控制台 中的步骤进行操作。
      5. 检查是否任何安全组、访问控制列表或自定义的虚拟专用网络路由阻止了VPN与集群API服务器之间的通信。 您可以暂时允许所有入站和出站流量通过VPN安全组和访问控制列表,然后检查是否解决了问题,以此来测试。 如果是这样,请对您的安全组、访问控制列表或自定义路由进行必要的更改,以允许流量通过。
      6. 检查群集中是否有任何基于上下文的限制 (CBR) 规则阻止客户端连接群集 API 服务器。 您可以暂时在CBR规则中添加一个允许所有IP和子网的网络区域来测试这一点。 如果临时更改能解决问题,则对规则进行必要更改,以允许流量。
  4. 验证与集群负载均衡器的连接是否成功,该负载均衡器暴露了 OpenShift 控制台。

    1. 运行命令。 请填写您在 之前步骤 中找到的入口子域名。
      curl -k -vvv https://console-openshift-console.${CONSOLE_LOAD_BALANCER}/
      
    2. 如果连接不成功,请进行以下检查并解决您发现的任何问题。
      1. 检查子域的主机名部分是否已通过 DNS 解析。 使用 dig console-openshift-console.${CONSOLE_LOAD_BALANCER} 命令。
      2. 验证您的VPN中是否存在一条通往该负载均衡器子域的路径。 确认路由中包含负载均衡器使用的所有IP或子网。 dig console-openshift-console.${CONSOLE_LOAD_BALANCER} 命令的输出包括当前负载均衡器的IP和子网,但请注意,这些可能会随着负载均衡器的扩展或缩减而改变。
      3. 如果您修改了应用于负载均衡器的任何安全组、访问控制列表或自定义VPC路由,请检查您应用的任何更改或规则是否阻止了连接。 如果您没有修改任何组件,且它们使用默认值,则可以跳过此步骤。
      4. 检查是否任何安全组、访问控制列表或自定义的虚拟专用网络路由阻止了VPN与负载均衡器之间的通信。 您可以暂时允许所有入站和出站流量通过VPN安全组和访问控制列表,然后检查是否解决了问题,以此来测试。 如果是这样,请对您的安全组、访问控制列表或自定义路由进行必要的更改,以允许流量通过。
  5. 验证与集群OAuth服务器的连接是否成功。

    1. 运行命令。 请填写您在 之前步骤 中找到的集群OAuth URL。
      curl -k -vvv ${CLUSTER_OAUTH_URL}/healthz
      
    2. 如果连接不成功,请进行以下检查并解决您发现的任何问题。
      1. 通过运行 ibmcloud oc cluster get -c <CLUSTER-ID> 命令检查集群主节点是否健康。 请参阅 《审查主健康 》以了解如何解决集群主问题。
      2. 检查集群OAuth URL 的主机名部分是否已通过DNS解析。 请使用 dig $(echo ${CLUSTER_OAUTH_URL} | cut -d/ -f3 | cut -d: -f1) 并指定集群 OAuth URL。
      3. 请确认您的VPN能够访问集群主服务器OAuth URL。
      4. 检查是否任何安全组、访问控制列表或自定义的虚拟专用网络路由应用到VPN,从而阻止VPN与集群OAuth服务器之间的通信。 您可以暂时允许所有入站和出站流量通过VPN安全组和访问控制列表,然后检查是否解决了问题,以此来测试。 如果是这样,请对您的安全组、访问控制列表或自定义路由进行必要的更改,以允许流量通过。
      5. 检查群集上是否有任何基于上下文的限制 (CBR) 规则阻止客户端连接到群集 OAuth 服务器。 您可以暂时在CBR规则中添加一个允许所有IP和子网的网络区域来测试这一点。 如果临时更改能解决问题,则对规则进行必要更改,以允许流量。
  6. 验证与IAM的连接是否成功。

    1. 运行命令。
      curl -vvv https://iam.cloud.ibm.com/healthz
      curl -vvv -o /dev/null -s https://login.ibm.com/
      
    2. 如果这两个命令中的任何一个失败,请检查客户端系统是否能可靠地连接这些URL,以及这些URL是否被任何客户端或公司防火墙阻止。 请注意,这些URL需要访问公共互联网。

5. 联系客服

如果您已完成上述所有步骤,但问题仍未解决,请联系支持部门。 提交 支持案例。 在案例详情中,请务必附上相关的日志文件、错误信息或命令输出。