IBM Cloud 中集群访问问题的故障排除 Kubernetes

通过检查您的用户访问权限和资源组配置,解决在查看或操作您的 IBM Cloud Kubernetes 集群时遇到的问题。

虚拟私有云 传统基础设施

你找不到集群。 运行 ibmcloud oc cluster ls 时,输出中未列出该集群。 或者,你无法与集群一起工作。 运行 ibmcloud oc cluster config 或其他与集群相关的命令时,无法找到该集群。

在 IBM Cloud 中,每个资源都必须位于资源组中。 例如,集群 mycluster 可能存在于 default 资源组中。

当账户所有者通过向您授予“IBM Cloud”IAM平台访问角色来授予您对资源的访问权限时,该访问权限可能针对特定资源,也可能针对资源组。 授予您对特定资源的访问权时,您无权访问资源组。 在这种情况下,您无需将资源组设定为目标就可以使用您有权访问的集群。 如果设定为目标的资源组不是集群所在的资源组,那么针对该集群的操作会失败。 反之,授予您对资源的访问权以作为对资源组访问权的一部分时,必须将资源组设定为目标,才能使用该组中的集群。 如果未将 CLI 会话的目标设定为集群所在的资源组,那么针对该集群的操作会失败。

如果您无法找到或无法使用某个集群,您可能遇到了以下问题之一:

  • 您有权访问集群和集群所在的资源组,但 CLI 会话的目标未设定为集群所在的资源组。
  • 您有权访问集群,但无权访问集群所在的资源组。 CLI 会话的目标设定为此资源组或其他资源组。
  • 您无权访问集群。

要检查用户访问许可权,请执行以下操作:

  1. 列出您所有的用户权限。

    ibmcloud iam user-policies <your_user_name>
    
  2. 检查您是否有权访问集群以及集群所在的资源组。

    1. 查找具有值为集群资源组的 Resource Group Name 以及值为 ** 的 **MemoPolicy applies to the resource group 的策略。 如果具有此策略,说明您有权访问资源组。 例如,以下策略表明某用户有权访问 test-rg 资源组:
        Policy ID:   3ec2c069-fc64-4916-af9e-e6f318e2a16c
        Roles:       Viewer
        Resources:
        Resource Group ID     50c9b81c983e438b8e42b2e8eca04065
        Resource Group Name   test-rg
        Memo                  Policy applies to the resource group
        ```
    2. 查找具有值为集群资源组的 **Resource Group Name**、值为 ** 或没有值的 **Service Name`containers-kubernetes`,以及值为 ** 的 **Memo`Policy applies to the resource(s) within the resource group` 的策略。 如果您拥有此策略,则可以访问集群或资源组内的所有资源。 例如,以下策略表明某用户有权访问 `test-rg` 资源组中的集群:
    ```sh {: screen}
        Policy ID:   e0ad889d-56ba-416c-89ae-a03f3cd8eeea
        Roles:       Administrator
        Resources:
        Resource Group ID     a8a12accd63b437bbd6d58fb6a462ca7
        Resource Group Name   test-rg
        Service Name          containers-kubernetes
        Service Instance
        Region
        Resource Type
        Resource
        Memo                  Policy applies to the resource(s) within the resource group
        ```
    3. 如果您同时拥有这两个策略,请跳至步骤 4 的第一个项目符号项。 如果您没有步骤 2a 中的策略,但确实有步骤 2b 中的策略,请跳至步骤 4 的第二个项目符号项。 如果您没有上述任何一项保单,请继续执行第 3 步。
    
    
  3. 检查您是否有权访问集群,但无权访问集群所在的资源组。

    1. 查找除了 Policy IDRoles 字段外不包含其他任何值的策略。 如果具有此策略,那么您有权访问集群,这是对整个帐户的访问权的一部分。 例如,以下策略表明某用户有权访问该账户中的所有资源:
        Policy ID:   8898bdfd-d520-49a7-85f8-c0d382c4934e
        Roles:       Administrator, Manager
        Resources:
        Service Name
        Service Instance
        Region
        Resource Type
        Resource
        ```
    2. 查找具有值为 ** 的 **Service Name`containers-kubernetes` 以及值为集群标识的 **Service Instance** 的策略。 您可以通过运行 `ibmcloud oc cluster get --cluster <cluster_name>` 来查找集群 ID。 例如,以下策略表明某用户有权访问某个特定集群:
    ```sh {: screen}
        Policy ID:   140555ce-93ac-4fb2-b15d-6ad726795d90
        Roles:       Administrator
        Resources:
        Service Name       containers-kubernetes
        Service Instance   df253b6025d64944ab99ed63bb4567b6
        Region
        Resource Type
        Resource
        ```
    3. 如果您有其中任一策略,请跳至步骤 4 的第二个项目符号点。 如果您没有任何一个策略,请跳至步骤 4 的第三个项目符号点。
    
    
  4. 根据您的访问策略,选择下列其中一个选项。

    • 检查您是否有权访问集群以及集群所在的资源组:
      1. 将资源组设定为目标。 除非修改此资源组,否则无法在其他资源组中使用集群。
        ibmcloud target -g <resource_group>
        
      2. 将集群设定为目标。
        ibmcloud oc cluster config --cluster <cluster_name_or_ID>
        
    • 如果您有权访问集群,但无权访问集群所在的资源组:
      1. 不要将资源组设定为目标。 如果您已将资源组作为目标,请除去该目标。
        ibmcloud target --unset-resource-group
        
      2. 将集群设定为目标。
        ibmcloud oc cluster config --cluster <cluster_name_or_ID>
        
    • 如果您无法访问该集群:
      1. 请联系您的账户所有者,让其为您分配该集群的 “IBM Cloud”IAM平台访问角色
      2. 不要将资源组设定为目标。 如果您已将资源组作为目标,请除去该目标。
        ibmcloud target --unset-resource-group
        
      3. 将集群设定为目标。
        ibmcloud oc cluster config --cluster <cluster_name_or_ID>