在 kubectl 配置中使用具有相同用户名的多个上下文

Chr*_*erl 7 kubernetes kubectl

我想在我的集群中使用多个集群kubectl,因此我要么将所有内容放入一个配置中,要么将每个集群的一个配置文件添加到KUBECONFIGenv 变量中。没关系。

我现在的问题是,我的每个集群的用户都具有相同的用户名,但他们对client-key-data每个集群(上下文)使用不同的用户名,但上下文以某种方式使用该用户名,因此不清楚哪个用户属于哪个集群。

最好举个例子:

集群 1:

apiVersion: v1
kind: Config
clusters:
- cluster:
    server: https://10.11.12.13:8888
  name: team-cluster
contexts:
- context:
    cluster: team-cluster
    user: kubernetes-admin
  name: kubernetes-admin@team-cluster
users:
- name: kubernetes-admin
  user:
    client-certificate-data: XXYYYZZZ
    client-key-data: XXXYYYZZZ
Run Code Online (Sandbox Code Playgroud)

集群 2:

apiVersion: v1
kind: Config
clusters:
- cluster:
    server: https://10.11.12.14:8888
  name: dev-cluster
contexts:
- context:
    cluster: dev-cluster
    user: kubernetes-admin
  name: kubernetes-admin@dev-cluster
users:
- name: kubernetes-admin
  user:
    client-certificate-data: AABBCC
    client-key-data: AABBCC
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,在两个集群中都有一个具有名称的用户kubernetes-admin,但从上下文中不清楚是哪一个。也许还有另一种方法可以为其提供上下文使用的唯一标识符。

也许解决方案是显而易见的,但我还没有找到这种情况的任何例子。谢谢你的帮助。

小智 14

我的配置也有同样的问题,发现用户中的名称不是用于登录的用户名 - 它只是用于标识配置中的用户部分的名称。在您的情况下,仅使用证书密钥来了解您是谁。所以你可以使用:

users:
- name: kubernetes-admin-1
  user:
    client-certificate-data: AABBCC
    client-key-data: AABBCC
- name: kubernetes-admin-2
  user:
    client-certificate-data: XXYYYZZZ
    client-key-data: XXXYYYZZZ
Run Code Online (Sandbox Code Playgroud)

并在上下文中通过键引用它:

contexts:
- context:
    cluster: dev-cluster
    user: kubernetes-admin-1
Run Code Online (Sandbox Code Playgroud)

完整配置:

apiVersion: v1
kind: Config
clusters:
- cluster:
    server: https://10.11.12.13:8888
  name: team-cluster
- cluster:
    server: https://10.11.12.14:8888
  name: dev-cluster
contexts:
- context:
    cluster: team-cluster
    user: kubernetes-admin-1
  name: kubernetes-admin@team-cluster
- context:
    cluster: dev-cluster
    user: kubernetes-admin-2
  name: kubernetes-admin@dev-cluster
users:
- name: kubernetes-admin-1
  user:
    client-certificate-data: XXYYYZZZ
    client-key-data: XXXYYYZZZ
- name: kubernetes-admin-2
  user:
    client-certificate-data: AABBCC
    client-key-data: AABBCC
Run Code Online (Sandbox Code Playgroud)

对于需要用户名的身份验证方法,使用如下所示:

users:
- name: kubernetes-admin-with-password
  user:
    username: kubernetes-admin
    password: mySecretPass
Run Code Online (Sandbox Code Playgroud)

使用多个 kubeconfig 不太舒服 - 您需要为每个命令指定它们。如果您想要在一个配置中并选择正确的上下文(并将选定的上下文保存为默认值),您可以拥有尽可能多的上下文和用户。