使用 kubeconfig 文件组织集群访问
使用 kubeconfig 文件来组织有关集群、用户、命名空间和身份验证机制的信息。kubectl 命令行工具使用 kubeconfig 文件来查找选择集群以及与集群的 API 服务器通信所需的信息。
注意
用于配置集群访问的文件称为 _kubeconfig 文件_。这是指代配置文件的一种通用方式。它并不意味着存在一个名为kubeconfig 的文件。警告
只使用来自可信源的 kubeconfig 文件。使用特制 kubeconfig 文件可能导致恶意代码执行或文件泄露。如果必须使用不可信的 kubeconfig 文件,请像检查 shell 脚本一样,首先仔细检查它。默认情况下,kubectl 在 $HOME/.kube 目录中查找名为 config 的文件。你可以通过设置 KUBECONFIG 环境变量或设置 --kubeconfig 标志来指定其他 kubeconfig 文件。
有关创建和指定 kubeconfig 文件的分步说明,请参阅 配置对多个集群的访问。
支持多个集群、用户和身份验证机制
假设你有多个集群,并且你的用户和组件以各种方式进行身份验证。例如:
- 正在运行的 kubelet 可能使用证书进行身份验证。
- 用户可能使用令牌进行身份验证。
- 管理员可能拥有一组证书,他们将其提供给各个用户。
通过 kubeconfig 文件,你可以组织你的集群、用户和命名空间。你还可以定义上下文,以便在集群和命名空间之间快速轻松地切换。
上下文
kubeconfig 文件中的 _context_ 元素用于将访问参数归组到一个方便的名称下。每个上下文有三个参数:集群、命名空间和用户。默认情况下,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 文件时使用的规则:
- 如果设置了 - --kubeconfig标志,则仅使用指定的文件。不进行合并。只允许此标志的一个实例。- 否则,如果设置了 - KUBECONFIG环境变量,则将其用作需要合并的文件列表。根据以下规则合并- KUBECONFIG环境变量中列出的文件:- 忽略空文件名。
- 对于内容无法反序列化的文件生成错误。
- 第一个设置特定值或映射键的文件获胜。
- 永不更改值或映射键。示例:保留第一个文件设置 current-context的上下文。示例:如果两个文件都指定了red-user,则仅使用第一个文件中red-user的值。即使第二个文件在red-user下有不冲突的条目,也将其丢弃。
 - 有关设置 - KUBECONFIG环境变量的示例,请参阅 设置 KUBECONFIG 环境变量。- 否则,使用默认的 kubeconfig 文件 - $HOME/.kube/config,不进行合并。
- 根据此链中的第一个匹配项确定要使用的上下文: - 如果存在 --context命令行标志,则使用它。
- 使用合并的 kubeconfig 文件中的 current-context。
 - 此时允许空上下文。 
- 如果存在 
- 确定集群和用户。此时,可能存在或不存在上下文。根据此链中的第一个匹配项确定集群和用户,此链运行两次:一次用于用户,一次用于集群: - 如果存在命令行标志:--user或--cluster,则使用它们。
- 如果上下文非空,则从上下文中获取用户或集群。
 - 此时用户和集群可以是空的。 
- 如果存在命令行标志:
- 确定要使用的实际集群信息。此时,可能存在或不存在集群信息。根据此链构建集群信息的每个部分;第一个匹配项获胜: - 如果存在命令行标志:--server、--certificate-authority、--insecure-skip-tls-verify,则使用它们。
- 如果合并的 kubeconfig 文件中存在任何集群信息属性,则使用它们。
- 如果没有服务器位置,则失败。
 
- 如果存在命令行标志:
- 确定要使用的实际用户信息。使用与集群信息相同的规则构建用户信息,但每个用户只允许一种身份验证技术: - 如果存在命令行标志:--client-certificate、--client-key、--username、--password、--token,则使用它们。
- 使用合并的 kubeconfig 文件中的 user字段。
- 如果存在两种冲突的技术,则失败。
 
- 如果存在命令行标志:
- 对于仍缺失的任何信息,使用默认值并可能提示输入身份验证信息。 
文件引用
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