Kubernetes教程

Kubernetes Kubeconfig

一、Kubeconfig文件

Kubeconfig 文件用于组织有关 Kubernetes 集群、用户、命名空间和身份认证机制的信息,并配置集群访问。Kubectl 命令行工具使用 Kubeconfig 文件来查找选择集群所需的信息,并与集群的 API 服务器进行通信。Kubeconfig 文件包含多个配置项,每个配置项包括集群、用户、命名空间和其他可选字段的定义。

"Kubeconfig" 并不是一个特定的文件名,而是一个通用引用配置文件的术语。通常,每个用户/开发者都会有其自己的 Kubeconfig 文件,用于访问 Kubernetes 集群和管理它们的资源。在实践中,Kubeconfig 文件可以放置在任何位置,并可以通过设置 Kubeconfig 环境变量来指定位置。

注意:

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

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

二、身份认证机制

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

1、正在运行的 kubelet 可能使用证书在进行认证;

2、用户可能通过令牌进行认证;

3、管理员可能拥有多个证书集合提供给各用户。

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

三、上下文

通过 Kubeconfig 文件中的 context 元素,使用简便的名称来对访问参数进行分组。 每个 context 都有三个参数:cluster、namespace 和 user。 默认情况下,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 下有非冲突条目,也要丢弃它们。

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

  • 如果存在上下文,则使用 --context 命令行参数;
  • 使用合并的 Kubeconfig 文件中的 current-context。
  • 这种场景下允许空上下文。

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

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

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

4、确定要使用的实际集群信息。此时,可能有也可能没有集群信息。 基于此链构建每个集群信息;第一个匹配项会被采用:

  • 如果存在集群信息,则使用命令行参数:--server、--certificate-authority 和 --insecure-skip-tls-verify;
  • 如果合并的 Kubeconfig 文件中存在集群信息属性,则使用这些属性;
  • 如果没有 server 配置,则配置无效。

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

  • 如果存在用户信息,则使用命令行参数:--client-certificate、--client-key、--username、--password 和 --token;
  • 使用合并的 Kubeconfig 文件中的 user 字段;
  • 如果存在两种冲突技术,则配置无效。

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
广告合作
QQ群号:707632017

温馨提示:

1、本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com。(#改为@)

2、本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。

目录