使用配置文件登录

借助 GKE Identity Service,您可以使用第三方身份提供方提供的用户名和密码通过命令行登录已配置的集群。如果您的集群管理员已选择共享登录配置文件供您在通过 gcloud CLI 进行身份验证时使用,请按照本页面中的说明操作。如需详细了解如何访问集群,请参阅选择访问方法以登录集群

登录工作流

以下是 GKE Identity Service 用于允许您使用登录配置文件登录已配置的集群的工作流。具体流程取决于所使用的身份提供方类型。

OIDC 工作流

使用 OIDC 提供方时,集群管理员会将 GKE Identity Service 注册为身份提供方的客户端应用,并设置每个集群。如果需要,他们可以使用 Kubernetes 基于角色的访问权限控制 (RBAC) 添加精细的访问权限控制。

您可以通过以下方式登录集群:

命令行访问权限

  1. 进行身份验证:运行 gcloud anthos auth login 命令并输入 OIDC 登录凭据。这将从提供方检索身份令牌。
  2. 更新 Kubeconfig:检索到的令牌会自动添加到您的 kubeconfig 文件中。
  3. 访问集群:使用 kubectl 与集群进行交互。Kubernetes API 服务器使用 GKE Identity Service 来验证您的令牌并授予访问权限。

Google Cloud 控制台访问权限

  1. 发起登录:当您从 Google Cloud 控制台登录时,系统会将您重定向到身份提供方的登录页面。
  2. 身份验证:输入您的凭据并成功登录。
  3. 访问集群:返回到 Google Cloud 控制台,查看和管理您的集群资源。

LDAP 工作流

使用 LDAP 提供方时,集群管理员会为每个集群设置 GKE Identity Service,包括 LDAP 客户端凭据。如果需要,集群管理员可以使用 Kubernetes 基于角色的访问权限控制 (RBAC) 添加精细的访问权限控制。

命令行访问权限

  1. 发起登录:运行 gcloud anthos auth login 命令并输入您的 LDAP 登录凭据。
  2. 令牌生成:GKE Identity Service 会查询 LDAP 服务器,检索您的用户属性,然后将这些属性打包到短期令牌 (STS) 中。您的 LDAP 凭据不会存储在本地。
  3. Kubeconfig 更新:STS 令牌会自动添加到您的 kubeconfig 文件中。
  4. 集群访问权限:使用 kubectl 与集群交互。Kubernetes API 服务器使用 GKE Identity Service 验证令牌并授权访问。默认情况下,令牌会在一小时后过期,届时用户需要重新登录。

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

获取配置文件

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