使用 kubeconfig 文件组织集群访问

使用 kubeconfig 文件来组织有关集群、用户、命名空间和身份验证机制的信息。kubectl 命令行工具使用 kubeconfig 文件来查找选择集群和与集群的 API 服务器通信所需的信息。

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

有关创建和指定 kubeconfig 文件的分步说明,请参阅 配置对多个集群的访问权限

支持多个集群、用户和身份验证机制

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

  • 正在运行的 kubelet 可能会使用证书进行身份验证。
  • 用户可能会使用令牌进行身份验证。
  • 管理员可能有一组证书,他们会将这些证书提供给各个用户。

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

上下文

kubeconfig 文件中的上下文元素用于将访问参数分组在方便的名称下。每个上下文都有三个参数:集群、命名空间和用户。默认情况下,kubectl 命令行工具使用来自当前上下文的参数与集群进行通信。

选择当前上下文

kubectl config use-context

KUBECONFIG 环境变量

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

如果 KUBECONFIG 环境变量存在,kubectl 将使用一个有效配置,该配置是合并 KUBECONFIG 环境变量中列出的文件的結果。

合并 kubeconfig 文件

要查看您的配置,请输入以下命令

kubectl config view

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

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

  1. 如果设置了 --kubeconfig 标志,则仅使用指定的文件。不要合并。此标志仅允许使用一次。

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

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

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

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

  2. 根据以下链中的第一个命中项确定要使用的上下文

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

    此时允许为空上下文。

  3. 确定要使用的集群和用户。此时,可能存在或不存在上下文。根据以下链中的第一个命中项确定集群和用户,该链运行两次:一次用于用户,一次用于集群

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

    此时用户和集群可以为空。

  4. 确定要使用的实际集群信息。此时,可能存在或不存在集群信息。根据以下链构建集群信息的每个部分;第一个命中项获胜

    1. 如果存在,则使用命令行标志:--server--certificate-authority--insecure-skip-tls-verify
    2. 如果合并的 kubeconfig 文件中存在任何集群信息属性,则使用它们。
    3. 如果没有服务器位置,则失败。
  5. 确定要使用的实际用户信息。使用与集群信息相同的规则构建用户信息,但每个用户只允许一种身份验证技术

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

文件引用

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

代理

您可以使用 kubeconfig 文件中的 proxy-url 为每个集群配置 kubectl 使用代理,如下所示

apiVersion: v1
kind: Config

clusters:
- cluster:
    proxy-url: http://proxy.example.org:3128
    server: https://k8s.example.org/k8s/clusters/c-xxyyzz
  name: development

users:
- name: developer

contexts:
- context:
  name: development

接下来

上次修改时间:2022 年 4 月 13 日下午 9:05 PST:kubectl 代理配置的文档修复 (81fe9b4e91)