使用 GKE Identity Service 访问集群。

GKE Identity Service 是一项身份验证服务,可让您使用组织的现有身份提供方向多个 GKE Enterprise 环境中的集群进行身份验证,从而使用相同的 ID 登录 Google Cloud、本地和其他公有云上的集群。本文档适用于需要使用此服务访问集群的开发者和其他 GKE 集群用户。如果您需要改为使用您的 Google Cloud ID 通过 Connect 网关登录集群,请参阅使用 Connect 网关

如果您是需要为组织或团队设置 GKE Identity Service 的集群或平台管理员,请参阅 GKE Identity Service 概览,了解支持的集群环境、其他前提条件和相关设置指南。

通过命令行登录集群

要通过命令行向集群进行身份验证,您需要使用集群管理员提供的特殊登录配置文件运行 gcloud 身份验证命令。

准备工作

  1. 确保您已安装以下命令行工具:

    • 最新版本的 Google Cloud CLI,其中包含用于与 Google Cloud 交互的命令行工具 gcloud。如果您需要安装 Google Cloud CLI,请参阅安装指南
    • kubectl,用于对 Kubernetes 集群运行命令。如果您需要安装 kubectl,请参阅安装指南
  2. 运行以下命令以安装或更新 anthos-auth 组件:

    gcloud components update
    gcloud components install anthos-auth
  3. 通过运行以下命令验证工具已成功安装:

    gcloud anthos auth version

    如果返回版本,则表示安装成功。

获取配置文件

gcloud CLI 会为您的身份验证配置文件假设默认文件名和您的本地机器上的位置。您的管理员可能会替您将该文件复制到您的机器上。如果您获得的是手动提供的文件,并且需要自行将其保存到机器上,请使用默认值来简化 gcloud 身份验证命令。

使用以下命令将身份验证配置文件复制到默认位置:

Linux

mkdir -p  $HOME/.config/google/anthos/
cp [AUTH_CONFIG_FILE] $HOME/.config/google/anthos/kubectl-anthos-config.yaml

其中,[AUTH_CONFIG_FILE] 是您的身份验证配置文件的名称。例如 kubectl-anthos-config.yaml

macOS

mkdir -p  $HOME/Library/Preferences/google/anthos/
cp [AUTH_CONFIG_FILE] $HOME/Library/Preferences/google/anthos/kubectl-anthos-config.yaml

其中,[AUTH_CONFIG_FILE] 是您的身份验证配置文件的名称。例如 kubectl-anthos-config.yaml

Windows

md "%APPDATA%\google\anthos"
copy [AUTH_CONFIG_FILE] "%APPDATA%\google\anthos\kubectl-anthos-config.yaml"

其中,[AUTH_CONFIG_FILE] 是您的身份验证配置文件的名称。例如 kubectl-anthos-config.yaml

如果您或您的管理员选择使用其他文件名或位置(例如,如果管理员通过安全网址提供文件),那么您可以在每个身份验证请求中使用 --login-config 标志指定此信息。请参阅以下部分了解详情。

向集群进行身份验证

运行 gcloud 命令以向您的集群进行身份验证:

  1. 运行 gcloud anthos auth login 命令以启动身份验证流程:

    gcloud anthos auth login \
     --cluster [CLUSTER_NAME] \
     --user [USER_NAME] \
     --login-config [AUTH_CONFIG_FILE_PATH] \
     --login-config-cert [CA_CERT_PEM_FILE] \
     --kubeconfig [CLUSTER_KUBECONFIG]

    其中:

    • [CLUSTER_NAME](可选)指定集群的名称。如果省略此标志,则系统会提示您从身份验证配置文件中指定的集群中进行选择。

    • [USER_NAME](可选)指定存储在 kubeconfig 文件中的凭据的用户名。默认值为 [CLUSTER_NAME]-anthos-default-user

    • [AUTH_CONFIG_FILE_PATH](可选)指定存储或托管身份验证配置文件的自定义路径或网址。如果文件位于默认位置,则可以省略此参数。示例:--login-config /path/to/custom/authentication-config.yaml

    • [CA_CERT_PEM_FILE](可选)指定来自您的 CA 的 PEM 证书文件的路径。如果您的身份验证配置文件是安全托管的,您可以使用 HTTPS 连接访问该文件。示例:--login-config-cert my-cert.pem

    • [CLUSTER_KUBECONFIG](可选)指定集群的 kubeconfig 文件的自定义路径。您的 OpenID 提供方返回的 OIDC ID 令牌存储在 kubeconfig 文件中。

      如果您的 kubeconfig 文件未存储在默认位置,请使用此标志。如果省略此标志,则身份验证令牌会添加到默认位置的 kubeconfig 文件中。示例:--kubeconfig /path/to/custom.kubeconfig

    示例

    • 向特定集群进行身份验证:

      gcloud anthos auth login --cluster my-production-cluster
      
    • 使用提示选择要通过身份验证的集群:

      gcloud anthos auth login
      

      结果:

      Please use the --cluster flag to specify a cluster from the list below:
      Source: $HOME/.config/google/anthos/kubectl-anthos-config.yaml
      1. Cluster: projects/1000000000000/locations/global/memberships/gke-gcp-cluster ServerIP: https://104.198.180.50:440
      2. Cluster: projects/1000000000000/locations/global/memberships/gke-baremetal-cluster ServerIP: https://104.198.180.51:440
      3. Cluster: projects/1000000000000/locations/global/memberships/gke-onprem-cluster ServerIP: https://104.198.180.52:440
      4. Cluster: projects/1000000000000/locations/global/memberships/gke-aws-cluster ServerIP: https://104.198.180.53:440
      
    • 使用托管的身份验证配置文件:

      gcloud anthos auth login \
       --cluster my-production-cluster \
       --login-config HTTPS://my-secure-server/kubectl-anthos-config.yaml \
       --login-config-cert my-cert.pem
      
    • 使用提示选择身份验证选项。您可以在下文的选择身份验证选项中了解详情,包括示例。

  2. 在打开的基于浏览器的同意屏幕中输入您的凭据。 如果成功,您的 kubeconfig 文件现在应包含一个 ID 令牌,您的 kubectl 命令将使用该令牌向集群上的 Kubernetes API 服务器进行身份验证。

  3. 通过运行一个 kubectl 命令来访问集群上的资源,以验证身份验证已成功。例如,如果您有权访问集群上的“节点”资源(此访问权限由集群管理员配置),您应该能够运行以下命令并查看集群的节点:

    kubectl get nodes --kubeconfig [CLUSTER_KUBECONFIG]

如需排查与用户访问权限相关的问题,请参阅排查用户访问权限问题

选择身份验证方法

如果您的集群管理员为集群配置了多个身份提供商(例如,OIDC 提供商和 LDAP 服务器),但尚未为集群配置默认提供商,则登录时,系统会提示您选择身份验证选项,如以下示例所示:

gcloud anthos auth login

Please select your preferred authentication option for cluster [gke-onprem-ldap]
[1] LDAP Server
[2] OIDC
[3] cancel

Please enter your numeric choice:

1

Setting Preferred Authentication option to [LDAP Server]

输入一个数字选项,然后按照向集群进行身份验证中所述继续登录。

系统会保存您选择的身份验证选项,直到您的集群管理员更改此集群的默认提供商,或者您自行更改该选项。如需更改首选身份验证选项,请使用 --set-preferred-authentication 标志。

gcloud anthos auth login --set-preferred-authentication

您应该会看到类似如下示例的结果,此时您可以选择新的首选身份验证选项:

Your current authentication method is [1] AD Server. Please select your preferred authentication option for cluster [gke-onprem-ldap]
[1] LDAP Server
[2] OIDC
[3] cancel

Please enter your numeric choice:

2

Setting Preferred Authentication option to [OIDC]

使用 SSH 从远程机器进行身份验证

假设您要通过 SSH 连接到远程机器,并从远程机器向集群进行身份验证。为此,您的身份验证配置文件必须位于远程机器上,并且您必须能够从本地机器访问 OpenID 提供方。

在本地机器上,运行以下命令:

ssh [USER_NAME]@[REMOTE_MACHINE] -L [LOCAL_PORT]:localhost:[REMOTE_PORT]

其中:

  • [USER_NAME][REMOTE_MACHINE] 是用于通过 SSH 登录的标准值。

  • [LOCAL_PORT] 是您在本地机器上选择的用于访问远程机器的开放端口。

  • [REMOTE_PORT] 是您为 OIDC 重定向网址配置的端口。您可以在身份验证配置文件的 kubectlRedirectURI 字段中找到此端口。

在 SSH Shell 中,运行以下命令以启动身份验证:

gcloud anthos auth login --login-config [AUTH_CONFIG_FILE]

其中,[AUTH_CONFIG_FILE] 是您的身份验证配置文件在远程机器上的路径。

在本地机器上的浏览器中,转到 http://localhost:[LOCAL_PORT]/login 并完成 OIDC 登录流程。

现在,您的远程机器上的 kubeconfig 文件包含您访问集群所需的令牌。

在 SSH Shell 中,验证您是否有权访问集群:

kubectl --kubeconfig [CLUSTER_KUBECONFIG] get nodes

通过 Google Cloud 控制台登录集群(仅限 OIDC 提供商)

按照通过 Google Cloud 控制台使用集群中的说明进行操作。