使用 KubeConfig 访问集群

简介

当你需要通过 CLI(ac)、kubectlhelmclient-go 或类似的 Kubernetes 客户端从本地访问集群时,请使用 KubeConfig。

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,而不是长期重复使用下载的文件。

前提条件

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

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

操作步骤

下载并使用平台提供的 KubeConfig

当你需要直接使用平台提供的 KubeConfig 文件访问集群时,请使用此路径。

下载 KubeConfig 文件

Administrator 视图中,进入 Clusters > Clusters,选择目标集群,打开集群详情页,单击 Actions,然后选择 Download 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 文件可直接使用。

当你需要进行集群管理时,可以直接使用这个下载的文件。你也可以将其作为模板,构建一个同时适用于 ackubectl 的基于令牌的 KubeConfig。

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

当你希望 KubeConfig 权限与某个特定的 用户或自动化账号保持一致时,请使用此路径。

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

创建 API 令牌

打开 Profile > API Tokens,创建一个新令牌,并设置与使用场景匹配的过期时间。

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

准备 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 变更的替代方案。

为流水线或连接器访问使用专用账号

对于流水线或连接器访问,请使用专用账号,而不是个人用户账号:

  1. 为流水线或连接器创建一个专用账号。
  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 -Akubectl get pods -n <namespace>,并确认响应与预期访问范围一致。
  3. 对于基于令牌的 KubeConfig,运行 kubectl auth can-i <verb> <resource> -n <namespace>,并确认结果与令牌所有者的角色一致。
  4. 如果你使用 CLI,请运行 ac config current-contextac namespace,并确认当前活动上下文与预期的集群和命名空间一致。
  5. 如果你使用 CLI,请运行 ac get pods -n <namespace>ac get nodes,并确认响应与预期访问范围一致。

后续步骤