排查用户访问权限问题

本文档提供有关排查 GKE Identity Service 中的用户访问权限问题的指导。

gcloud anthos create-login-config 未能获取 clientconfig

此问题会在以下情况下发生:

  • 传递给 gcloud anthos create-login-config 的 kubeconfig 文件不正确。
  • ClientConfig 自定义资源在集群中不存在(集群中未安装 GKE Identity Service)。

错误消息

  failed to get clientconfig default in namespace kube-public
  

解决方案

如需解决此问题,请执行以下操作:

  1. 确保您的集群具有正确的 kubeconfig 文件。
  2. 要验证 ClientConfig 自定义资源是否在集群中,请运行以下命令:

    kubectl --kubeconfig KUBECONFIG  get clientconfig default -n kube-public
    

    如果集群中不存在 ClientConfig,请在集群上安装并配置 GKE Identity Service。如需详细了解集群设置选项,请参阅集群设置选项

gcloud anthos create-login-config 由于集群名称重复而失败

如果您尝试在已经包含此集群登录配置的文件中创建此集群的登录配置,则会出现此问题。

错误消息

  error merging with file FILENAME because FILENAME contains a
    cluster with the same name as the one read from KUBECONFIG.
  

解决方案

如需解决此问题,请使用 --output 标志指定新的目标文件。

如果未提供 --output,此登录配置数据将写入当前目录中名为 kubectl-anthos-config.yaml 的文件。

gcloud anthos auth login 失败并显示 proxyconnect tcp

如果 https_proxyHTTPS_PROXY 环境变量配置出错,就会出现此问题。如果环境变量中指定了 https://,则当代理配置为使用其他协议(如 SOCK5)来处理 HTTPS 连接时,GoLang HTTP 客户端库可能会失败。

错误消息

  proxyconnect tcp: tls: first record does not look like a TLS handshake
  

解决方案

如需解决此问题,请修改 https_proxyHTTPS_PROXY 环境变量以省略 https:// prefix。在 Windows 上,修改系统环境变量。 例如,将 https_proxy 环境变量的值从 https://webproxy.example.com:8000 更改为 webproxy.example.com:8000

使用 gcloud anthos auth login 生成的 kubeconfig 时集群访问失败

当 Kubernetes API 服务器出于以下某种原因无法向用户授权时,就会出现此问题:

  • 用于使用 gcloud anthos auth login 命令登录的配置存在错误。
  • 用户必需的 RBAC 政策不正确或缺失。

错误消息

  Unauthorized
  

解决方案

如需解决此问题,请执行以下操作:

  1. 验证用于登录的配置。

    OIDC 配置

    用户集群配置文件中的 authentication.oidc 部分具有 groupusername 字段,这两个字段用于设置 Kubernetes API 服务器中的 --oidc-group-claim--oidc-username-claim 标志。当 API 服务器收到用户的身份令牌后,它会将令牌转发到 GKE Identity Service,后者会将提取的 group-claimusername-claim 返回到 API 服务器。API 服务器使用响应来验证对应的组或用户具有正确的权限。

    验证 ID 令牌中包含集群配置文件的 authentication.oidc 部分中为 groupuser 设置的声明。

  2. 验证已应用的 RBAC 政策。

    如需了解如何为 GKE Identity Service 设置正确的 RBAC 政策,请参阅设置基于角色的访问权限控制 (RBAC)

群组的 RBAC 无法用于 OIDC 提供方

  1. 验证 ID 令牌是否包含群组信息

    在您运行 gcloud anthos auth login 命令以启动 OIDC 身份验证流程后,ID 令牌会存储在 kubeconfig 文件的 id-token 字段中。使用 jwt.io 解码 ID 令牌并验证它是否按预期包含用户的群组信息。

  2. 如果 ID 令牌没有用户的群组信息,请按照 OIDC 提供方的文档正确配置 OIDC 提供方以返回群组信息。例如,如果您使用的是 Okta 身份提供方的 OIDC 配置,请按照 Okta 身份提供方的文档配置 ID 令牌中的群组。

  3. 如果 ID 令牌有群组信息,请验证 ID 令牌中的群组信息键是否与 oidc 部分下配置的 groupsClaim 字段匹配。

    例如,如果 ID 令牌在 groups 键中包含群组信息:

    "groups" : ["group1", "group2" ...]
    

    oidc 部分中的 groupsClaim 字段的值应为 groups

    修改 oidc 部分中的配置后,请务必运行设置用户访问权限访问集群中列出的说明。

排查身份提供方问题

如果您在 GKE 集群中使用 OIDC 或 LDAP 时遇到问题,请按照本部分中的步骤排查 GKE Identity Service 问题,并确定身份提供方配置是否存在问题。

启用 GKE Identity Service 调试日志

为了帮助排查集群中与身份相关的问题,请启用 GKE Identity Service 调试日志。

  1. 使用 kubectl patch 修补现有集群:

    kubectl patch deployment ais \
      -n anthos-identity-service --type=json \
      -p='[{"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value":"--vmodule=cloud/identity/hybrid/charon/*=LOG_LEVEL"}]' \
      --kubeconfig KUBECONFIG
    

    替换以下内容:

    • LOG_LEVEL:对于最详细的日志,请在排查问题时将此值设置为级别 3

    • KUBECONFIG:用户集群 kubeconfig 文件的路径。

检查 GKE Identity Service 容器日志

查看 GKE Identity Service 容器日志的内容,了解是否有任何错误或警告。

  1. 如需查看日志,请使用 kubectl logs

    kubectl logs -f -l k8s-app=ais \
      -n anthos-identity-service \
      --kubeconfig KUBECONFIG
    

    KUBECONFIG 替换为用户集群 kubeconfig 文件的路径。

重启 GKE Identity Service pod

如果容器日志显示问题,请重启 GKE Identity Service pod。

  1. 如需重启 GKE Identity Service pod,请删除现有 pod。系统会自动创建新 pod 作为替换项。

    kubectl delete pod -l k8s-app=ais \
      -n anthos-identity-service \
      --kubeconfig KUBECONFIG
    

    KUBECONFIG 替换为用户集群 kubeconfig 文件的路径。

排查与身份提供方的连接问题

如果 GKE Identity Service pod 看起来运行正常,请测试与远程身份提供方的连接。

  1. 在 GKE Identity Service pod 所在的命名空间中启动 busybox pod:

    kubectl run curl --image=radial/busyboxplus:curl \
      -n anthos-identity-service -- sleep 3000 \
      --kubeconfig KUBECONFIG
    

    KUBECONFIG 替换为用户集群 kubeconfig 文件的路径。

  2. 如需检查您是否可以提取发现网址,请进入 busybox pod 并运行 curl 命令:

    kubectl exec pod/curl -n anthos-identity-service -- \
      curl ISSUER_URL \
      --kubeconfig KUBECONFIG
    

    请替换以下内容:

    • ISSUER_URL:您的身份提供方的颁发者网址。
    • KUBECONFIG:用户集群 kubeconfig 文件的路径。

    成功的响应是包含详细身份提供方端点的 JSON 结果。

  3. 如果上一个命令未返回预期的结果,请与您的身份提供方管理员联系,以获取额外的帮助。

LDAP 登录不适用于 Anthos on VMware 管理员集群

目前只有 Anthos on VMware 用户集群支持 LDAP。