使用 kubeconfig 文件组织集群访问

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

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

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

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

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

    上下文(Context)

    通过 kubeconfig 文件中的 context 元素,使用简便的名称来对访问参数进行分组。每个上下文都有三个参数:cluster、namespace 和 user。默认情况下,kubectl 命令行工具使用 当前上下文 中的参数与集群进行通信。

    选择当前上下文

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

    合并 kubeconfig 文件

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

    1. kubectl config view

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

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

    否则,如果设置了 KUBECONFIG 环境变量,将它用作应合并的文件列表。根据以下规则合并 KUBECONFIG 环境变量中列出的文件:

    • 忽略空文件名。
    • 对于内容无法反序列化的文件,产生错误信息。
    • 第一个设置特定值或者映射键的文件将生效。
    • 永远不会更改值或者映射键。示例:保留第一个文件的上下文以设置 current-context。示例:如果两个文件都指定了 red-user,则仅使用第一个文件的 red-user 中的值。即使第二个文件在 red-user 下有非冲突条目,也要丢弃它们。

    有关设置 KUBECONFIG 环境变量的示例,请参阅设置 KUBECONFIG 环境变量

    否则,使用默认的 kubeconfig 文件, $HOME/.kube/config,不进行合并。

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

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

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

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

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

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

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

    kubeconfig 文件中的文件和路径引用是相对于 kubeconfig 文件的位置。命令行上的文件引用是相当对于当前工作目录的。在 $HOME/.kube/config 中,相对路径按相对路径存储,绝对路径按绝对路径存储。

    接下来