3

我在尝试使用切换上下文时遇到了一些非常奇怪的行为kubectl

我的配置文件声明了两个上下文;一个指向内部集群,而另一个指向 Amazon EKS 集群。

apiVersion: v1
kind: Config
clusters:
- cluster:
    certificate-authority-data: <..>
    server: <..>
  name: in-house
- cluster:
    certificate-authority-data: <..>
    server: <..>
  name: eks
contexts:
- context:
    cluster: in-house
    user: divesh-in-house
  name: in-house-context
- context:
    cluster: eks
    user: divesh-eks
  name: eks-context
current-context: in-house-context
preferences: {}
users:
- name: divesh-eks
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1alpha1
      command: aws-iam-authenticator
      args:
      - "token"
      - "-i"
      - "eks"
      env: null
- name: divesh-in-house
  user:
    client-certificate-data: <..>
    client-key-data: <..>

我还使用aws-iam-authenticator对 EKS 集群进行身份验证。

我的问题是——只要我使用内部集群,一切正常。但是,当我执行时kubectl config use-context eks-context,我观察到以下行为。

  • 我尝试在集群上执行的任何操作(例如,kubectl get pods -n production)都会向我显示Please enter Username:提示。我认为aws-iam-authenticator应该为我管理身份验证。我可以确认手动运行身份验证器 ( aws-iam-authenticator token -i eks) 对我来说很好。
  • 执行kubectl config view省略了divesh-eks用户,所以输出看起来像

    users:
    - name: divesh-eks
      user: {}
    
  • 通过执行切换回内部集群会kubectl config use-context in-house-context修改我的配置文件并删除divesh-eks-user,因此配置文件现在包含

    users:
    - name: divesh-eks
      user: {}
    

我的同事似乎没有遇到这个问题。

想法?

4

1 回答 1

0

exec配置的部分是在 1.10 ( https://github.com/kubernetes/kubernetes/pull/59495 )中添加的

如果您使用该版本之前的 kubectl 版本,它将无法识别 exec 插件(导致提示输入凭据),并且如果您使用它进行 kubeconfig 更改,它将在保留更改时删除 exec 字段

于 2018-09-18T00:32:44.193 回答