使用 kubeconfig 文件组织集群访问

    说明:

    用于配置集群访问的文件称为 kubeconfig 文件。 这是引用到配置文件的通用方法,并不意味着有一个名为 kubeconfig 的文件。

    警告:

    请务必仅使用来源可靠的 kubeconfig 文件。使用特制的 kubeconfig 文件可能会导致恶意代码执行或文件暴露。 如果必须使用不受信任的 kubeconfig 文件,请首先像检查 Shell 脚本一样仔细检查此文件。

    默认情况下,kubectl$HOME/.kube 目录下查找名为 config 的文件。 你可以通过设置 KUBECONFIG 环境变量或者设置 --kubeconfig参数来指定其他 kubeconfig 文件。

    有关创建和指定 kubeconfig 文件的分步说明, 请参阅。

    假设你有多个集群,并且你的用户和组件以多种方式进行身份认证。比如:

    • 正在运行的 kubelet 可能使用证书在进行认证。
    • 用户可能通过令牌进行认证。
    • 管理员可能拥有多个证书集合提供给各用户。

    使用 kubeconfig 文件,你可以组织集群、用户和命名空间。你还可以定义上下文,以便在集群和命名空间之间快速轻松地切换。

    上下文(Context)

    选择当前上下文:

    KUBECONFIG 环境变量包含一个 kubeconfig 文件列表。 对于 Linux 和 Mac,此列表以英文冒号分隔。对于 Windows,此列表以英文分号分隔。 KUBECONFIG 环境变量不是必需的。 如果 KUBECONFIG 环境变量不存在,kubectl 将使用默认的 kubeconfig 文件:$HOME/.kube/config

    如果 KUBECONFIG 环境变量存在,kubectl 将使用 环境变量中列举的文件合并后的有效配置。

    合并 kubeconfig 文件

    要查看配置,输入以下命令:

    如前所述,输出可能来自单个 kubeconfig 文件,也可能是合并多个 kubeconfig 文件的结果。

    以下是 kubectl 在合并 kubeconfig 文件时使用的规则。

    1. 根据此链中的第一个匹配确定要使用的上下文。

      1. 如果存在上下文,则使用 --context 命令行参数。
      2. 使用合并的 kubeconfig 文件中的 current-context

      这种场景下允许空上下文。

    2. 确定集群和用户。此时,可能有也可能没有上下文。根据此链中的第一个匹配确定集群和用户, 这将运行两次:一次用于用户,一次用于集群。

      1. 如果存在用户或集群,则使用命令行参数:--user 或者 。
      2. 如果上下文非空,则从上下文中获取用户或集群。

      这种场景下用户和集群可以为空。

    3. 确定要使用的实际用户信息。使用与集群信息相同的规则构建用户信息,但对于每个用户只允许使用一种身份认证技术:

      1. 如果存在用户信息,则使用命令行参数:--client-certificate--client-key--username--password--token
      2. 使用合并的 kubeconfig 文件中的 user 字段。
      3. 如果存在两种冲突技术,则配置无效。
    4. 对于仍然缺失的任何信息,使用其对应的默认值,并可能提示输入身份认证信息。

    代理

    你可以在 kubeconfig 文件中,为每个集群配置 proxy-url 来让 kubectl 使用代理,例如: