本页面展示了如何使用配置文件来配置对多个集群的访问。在将集群、用户和上下文定义在一个或多个配置文件中后,你可以通过 kubectl config use-context 命令在集群之间快速切换。
kubeconfig 的文件。你需要有一个 Kubernetes 集群,并且必须配置 kubectl 命令行工具以与你的集群通信。建议在至少有两个节点的集群上运行本教程,且这些节点不能作为控制平面主机。如果你还没有集群,可以通过 minikube 创建一个,或者使用以下 Kubernetes 演练场之一。
要检查是否已安装 kubectl,请运行 kubectl version --client。kubectl 的版本应与集群的 API 服务器处于同一个小版本范围内。
假设你有两个集群,一个用于开发工作,一个用于测试工作。在 development 集群中,前端开发人员在名为 frontend 的命名空间中工作,存储开发人员在名为 storage 的命名空间中工作。在你的 test 集群中,开发人员在 default 命名空间中工作,或者根据需要创建辅助命名空间。访问开发集群需要证书认证。访问测试集群需要用户名和密码认证。
创建一个名为 config-exercise 的目录。在你的 config-exercise 目录中,创建一个名为 config-demo 的文件,内容如下
apiVersion: v1
kind: Config
preferences: {}
clusters:
- cluster:
name: development
- cluster:
name: test
users:
- name: developer
- name: experimenter
contexts:
- context:
name: dev-frontend
- context:
name: dev-storage
- context:
name: exp-test
配置文件描述了集群、用户和上下文。你的 config-demo 文件具备描述两个集群、两个用户和三个上下文的框架。
进入你的 config-exercise 目录。输入以下命令将集群详细信息添加到你的配置文件中
kubectl config --kubeconfig=config-demo set-cluster development --server=https://1.2.3.4 --certificate-authority=fake-ca-file
kubectl config --kubeconfig=config-demo set-cluster test --server=https://5.6.7.8 --insecure-skip-tls-verify
将用户详细信息添加到你的配置文件中
kubectl config --kubeconfig=config-demo set-credentials developer --client-certificate=fake-cert-file --client-key=fake-key-seefile
kubectl config --kubeconfig=config-demo set-credentials experimenter --username=exp --password=some-password
kubectl --kubeconfig=config-demo config unset users.<name>kubectl --kubeconfig=config-demo config unset clusters.<name>kubectl --kubeconfig=config-demo config unset contexts.<name>将上下文详细信息添加到你的配置文件中
kubectl config --kubeconfig=config-demo set-context dev-frontend --cluster=development --namespace=frontend --user=developer
kubectl config --kubeconfig=config-demo set-context dev-storage --cluster=development --namespace=storage --user=developer
kubectl config --kubeconfig=config-demo set-context exp-test --cluster=test --namespace=default --user=experimenter
打开你的 config-demo 文件以查看添加的详细信息。作为打开 config-demo 文件的替代方案,你可以使用 config view 命令。
kubectl config --kubeconfig=config-demo view
输出显示了两个集群、两个用户和三个上下文
apiVersion: v1
clusters:
- cluster:
certificate-authority: fake-ca-file
server: https://1.2.3.4
name: development
- cluster:
insecure-skip-tls-verify: true
server: https://5.6.7.8
name: test
contexts:
- context:
cluster: development
namespace: frontend
user: developer
name: dev-frontend
- context:
cluster: development
namespace: storage
user: developer
name: dev-storage
- context:
cluster: test
namespace: default
user: experimenter
name: exp-test
current-context: ""
kind: Config
preferences: {}
users:
- name: developer
user:
client-certificate: fake-cert-file
client-key: fake-key-file
- name: experimenter
user:
# Documentation note (this comment is NOT part of the command output).
# Storing passwords in Kubernetes client config is risky.
# A better alternative would be to use a credential plugin
# and store the credentials separately.
# See https://kubernetes.ac.cn/docs/reference/access-authn-authz/authentication/#client-go-credential-plugins
password: some-password
username: exp
上面的 fake-ca-file、fake-cert-file 和 fake-key-file 是证书文件路径名的占位符。你需要将它们更改为你环境中证书文件的实际路径名。
有时你可能希望在此处嵌入 Base64 编码的数据,而不是使用单独的证书文件;在这种情况下,你需要将 -data 后缀添加到键中,例如 certificate-authority-data、client-certificate-data、client-key-data。
每个上下文都是一个三元组(集群,用户,命名空间)。例如,dev-frontend 上下文表示:“使用 developer 用户的凭证来访问 development 集群的 frontend 命名空间”。
设置当前上下文
kubectl config --kubeconfig=config-demo use-context dev-frontend
现在,每当你输入 kubectl 命令时,该操作都将应用于 dev-frontend 上下文中列出的集群和命名空间。并且该命令将使用 dev-frontend 上下文中列出的用户的凭证。
要仅查看与当前上下文关联的配置信息,请使用 --minify 标志。
kubectl config --kubeconfig=config-demo view --minify
输出显示了与 dev-frontend 上下文关联的配置信息
apiVersion: v1
clusters:
- cluster:
certificate-authority: fake-ca-file
server: https://1.2.3.4
name: development
contexts:
- context:
cluster: development
namespace: frontend
user: developer
name: dev-frontend
current-context: dev-frontend
kind: Config
preferences: {}
users:
- name: developer
user:
client-certificate: fake-cert-file
client-key: fake-key-file
现在假设你想在测试集群中工作一段时间。
将当前上下文更改为 exp-test
kubectl config --kubeconfig=config-demo use-context exp-test
现在你给出的任何 kubectl 命令都将应用于 test 集群的默认命名空间。并且该命令将使用 exp-test 上下文中列出的用户的凭证。
查看与新的当前上下文 exp-test 关联的配置。
kubectl config --kubeconfig=config-demo view --minify
最后,假设你想在 development 集群的 storage 命名空间中工作一段时间。
将当前上下文更改为 dev-storage
kubectl config --kubeconfig=config-demo use-context dev-storage
查看与新的当前上下文 dev-storage 关联的配置。
kubectl config --kubeconfig=config-demo view --minify
在你的 config-exercise 目录中,创建一个名为 config-demo-2 的文件,内容如下
apiVersion: v1
kind: Config
preferences: {}
contexts:
- context:
cluster: development
namespace: ramp
user: developer
name: dev-ramp-up
上述配置文件定义了一个名为 dev-ramp-up 的新上下文。
查看你是否有一个名为 KUBECONFIG 的环境变量。如果有,请保存你当前 KUBECONFIG 环境变量的值,以便稍后恢复它。例如
export KUBECONFIG_SAVED="$KUBECONFIG"
$Env:KUBECONFIG_SAVED=$ENV:KUBECONFIG
KUBECONFIG 环境变量是一个配置文件路径列表。该列表在 Linux 和 Mac 上以冒号分隔,在 Windows 上以分号分隔。如果你有 KUBECONFIG 环境变量,请熟悉列表中的配置文件。
临时将两个路径追加到你的 KUBECONFIG 环境变量中。例如
export KUBECONFIG="${KUBECONFIG}:config-demo:config-demo-2"
$Env:KUBECONFIG=("config-demo;config-demo-2")
在你的 config-exercise 目录中,输入此命令
kubectl config view
输出显示了来自 KUBECONFIG 环境变量中列出的所有文件的合并信息。请特别注意,合并后的信息包含来自 config-demo-2 文件的 dev-ramp-up 上下文以及来自 config-demo 文件的三个上下文。
contexts:
- context:
cluster: development
namespace: frontend
user: developer
name: dev-frontend
- context:
cluster: development
namespace: ramp
user: developer
name: dev-ramp-up
- context:
cluster: development
namespace: storage
user: developer
name: dev-storage
- context:
cluster: test
namespace: default
user: experimenter
name: exp-test
有关 kubeconfig 文件如何合并的更多信息,请参阅使用 kubeconfig 文件组织集群访问
如果你已经有一个集群,并且可以使用 kubectl 与该集群进行交互,那么你的 $HOME/.kube 目录中可能有一个名为 config 的文件。
转到 $HOME/.kube,查看那里有哪些文件。通常,有一个名为 config 的文件。该目录中也可能有其他配置文件。简要了解这些文件的内容。
如果你有一个 $HOME/.kube/config 文件,且它尚未在你的 KUBECONFIG 环境变量中列出,现在将其追加到你的 KUBECONFIG 环境变量中。例如
export KUBECONFIG="${KUBECONFIG}:${HOME}/.kube/config"
$Env:KUBECONFIG="$Env:KUBECONFIG;$HOME\.kube\config"
查看从现在列在你的 KUBECONFIG 环境变量中的所有文件合并而来的配置信息。在你的 config-exercise 目录中,输入
kubectl config view
将你的 KUBECONFIG 环境变量恢复为原始值。例如
export KUBECONFIG="$KUBECONFIG_SAVED"
$Env:KUBECONFIG=$ENV:KUBECONFIG_SAVED
在通过身份验证访问集群后,你将获得哪些属性(用户名、组)并不总是显而易见的。如果你同时管理多个集群,这可能会更具挑战性。
有一个 kubectl 子命令用于检查所选 Kubernetes 客户端上下文的主体属性,例如用户名:kubectl auth whoami。
阅读客户端身份验证信息的 API 访问以了解更多详细信息。