使用 KubeConfig 访问集群

简介

如果需要从本地使用 CLI(ac)、kubectl、helm、client-go 或类似的 Kubernetes 客户端访问集群,请使用 KubeConfig。本页面中的操作步骤适用于 global 集群以及工作负载集群。

KubeConfig 文件是 YAML 客户端配置文件,不是 Kubernetes 资源。KubeConfig 文件通常会定义目标集群端点、客户端凭证以及将两者关联起来的上下文。

CLI(ac)使用标准 kubeconfig,提供类似 kubectl 的使用体验。它与 kubectl 工作流兼容,同时还提供特定于平台的上下文、集群和会话操作。如果您已在使用 ac login, CLI 可以自动配置 kubeconfig 并创建上下文。以下访问路径包括下载 KubeConfig 文件和手动组装基于令牌的 KubeConfig 文件。

场景

以下场景可使用这些访问路径:

  • 集群管理员需要一个可直接使用的 KubeConfig,用于集群管理、故障排查或检查。
  • 开发人员或项目用户需要一个与其自身 身份和 RBAC 权限相符的 KubeConfig。
  • 流水线或连接器需要独立于个人日常账户的凭证。

选择访问路径

使用下表选择合适的访问路径:

访问路径凭证来源有效权限生命周期控制最适用场景
从平台下载的 KubeConfig嵌入从平台下载的 KubeConfig 文件中的凭证由下载文件中嵌入的凭证决定由平台当前对下载文件的处理方式控制集群管理员和模板准备
基于令牌的 KubeConfig为用户账户创建的 API 令牌受限于令牌所有者的身份和 RBAC 范围由令牌过期或撤销状态控制开发人员、项目用户和自动化账户
当前行为

目前,从 下载的 KubeConfig 文件默认有效期为 10 年。 目前不支持在此访问路径中替换 CA,也不支持为此访问路径指定用户定义的集群 CA。

如果需要更严格的身份隔离或更短的生命周期控制,请使用基于令牌的 KubeConfig,而不要长期重复使用下载的文件。

先决条件

开始之前,请确保满足以下条件:

  • 您可以登录 并访问目标集群。
  • 您已在要使用 KubeConfig 文件的本地计算机上安装 CLI(ac)或 kubectl。
  • 如果要使用基于令牌的 KubeConfig,您可以从个人资料 > API 令牌创建 API 令牌。有关详细信息,请参阅简介。
  • 如果要将 KubeConfig 用于流水线或连接器,请准备一个专用账户,并在创建其令牌之前仅授予所需的权限。

操作步骤

下载并使用平台提供的 KubeConfig

如果需要通过平台提供的 KubeConfig 文件直接访问集群,请使用此路径。

下载 KubeConfig 文件

在管理员视图中,转到集群 > 集群,选择目标集群,打开集群详情页,点击操作,然后选择下载 Kubeconfig。

将下载的文件保存到本地路径,例如 ~/.kube/<cluster-name>.yaml。

选择 KubeConfig 文件

将 CLI(ac)或 kubectl 指向下载的文件:

export KUBECONFIG="$HOME/.kube/<cluster-name>.yaml"
kubectl config get-contexts
kubectl config current-context
ac config current-context

如果您管理多个集群,请使用 kubectl config use-context <context-name> 或 ac config use-context <context-name> 切换到正确的上下文,然后再运行命令。如果使用 CLI 会话,也可以使用 ac config use-cluster <cluster-name> 在当前平台会话中切换集群。

验证集群访问

运行只读命令,确认 KubeConfig 文件按预期工作:

kubectl get nodes
kubectl get pods -A
ac get nodes
ac get pods -A

如果命令返回预期的集群资源,则 KubeConfig 文件可直接使用。

需要进行集群管理时,直接使用此下载文件。您也可以将其用作基于令牌的 KubeConfig 模板,使其同时适用于 ac 和 kubectl。

使用您自己的 API 令牌构建基于令牌的 KubeConfig

如果您希望 KubeConfig 权限与特定 用户或自动化账户匹配,请使用此路径。

此路径不会提升权限。KubeConfig 文件仅携带连接和身份验证设置。实际访问边界仍取决于令牌所有者及该身份的 RBAC 分配。

创建 API 令牌

打开个人资料 > API 令牌,创建新令牌,并设置与您的使用场景相匹配的过期时间。

安全存储令牌。如果计划将其用于自动化,请避免使用个人日常账户。

准备 KubeConfig 模板

使用以下方法之一:

  • 下载平台提供的 KubeConfig 文件,并另存一份副本用于基于令牌的访问。
  • 手动创建标准 KubeConfig 文件。

如果手动创建文件,请使用以下格式的目标集群端点:

https://<platform-access-address>/kubernetes/<cluster-name>

如果不想从头构建集群部分,请先下载平台提供的 KubeConfig,并将其中的集群和 CA 字段作为模板重复使用。

在 KubeConfig 文件中设置 API 令牌

将 users[].user.token 值替换为您为目标用户或自动化账户创建的 API 令牌。

以下示例展示了基于令牌的 KubeConfig:

KubeConfig.yaml
apiVersion: v1
kind: Config
clusters:
  - name: <cluster-name>
    cluster:
      server: https://<platform-access-address>/kubernetes/<cluster-name>
      certificate-authority-data: <base64-encoded-ca-data>
users:
  - name: <user-name>
    user:
      token: <platform-api-token>
contexts:
  - name: <context-name>
    context:
      cluster: <cluster-name>
      user: <user-name>
      namespace: <namespace>
current-context: <context-name>

namespace 是可选的。它用于设置命令的默认命名空间,但不会扩大令牌的权限范围。

验证有效权限

使用新的 KubeConfig 文件,并验证返回的权限是否与预期角色匹配:

export KUBECONFIG="$HOME/.kube/<user-or-automation>.yaml"
kubectl auth can-i get pods -n <namespace>
kubectl get pods -n <namespace>
ac config current-context
ac get pods -n <namespace>

如果命令针对 kubectl auth can-i 返回 no,请授予所需角色或使用其他账户。不要将 KubeConfig 更改视为 RBAC 更改的替代方案。

使用专用账户进行 Pipeline 或 Connector 访问

对于 Pipeline 或 Connector 访问,请使用专用账户,而不是个人用户账户:

  1. 为 Pipeline 或 Connector 创建专用账户。
  2. 仅向该账户授予所需的项目级或租户级权限。
  3. 为该账户创建一个 API 令牌。
  4. 使用该令牌构建基于令牌的 KubeConfig。
  5. 将令牌或 KubeConfig 文件存储在自动化平台的密钥管理系统中。
  6. 通过创建新令牌、更新密钥并撤销旧令牌来轮换凭证。

此模式为自动化提供独立凭证,但它不是 中原生的项目级 KubeConfig 对象。

生命周期和撤销

生命周期行为取决于您使用的访问路径:

访问路径有效性控制因素当前行为
平台下载的 KubeConfig当前平台对下载文件的行为下载的 KubeConfig 当前默认有效期为 10 年。 当前不为此路径提供 CA 替换或用户定义的集群 CA。
基于令牌的 KubeConfigusers[].user.token 中的 API 令牌KubeConfig 仅在令牌有效期间保持可用。令牌过期或被撤销后,KubeConfig 也会停止工作。

如果您需要更短的有效期或更便捷的撤销方式,请优先使用基于令牌的路径。

验证

准备好 KubeConfig 文件后,执行以下检查:

  1. 运行 kubectl config get-contexts,确认存在预期的上下文。
  2. 运行 kubectl get pods -A 或 kubectl get pods -n <namespace> 等只读命令,确认响应与预期的访问范围一致。
  3. 对于基于令牌的 KubeConfig,运行 kubectl auth can-i <verb> <resource> -n <namespace>,确认结果与令牌所有者的角色一致。
  4. 如果使用 CLI,运行 ac config current-context 或 ac namespace,确认活动上下文与预期的集群和命名空间一致。
  5. 如果使用 CLI,运行 ac get pods -n <namespace> 或 ac get nodes,确认响应与预期的访问范围一致。

后续步骤