我在一家大型企业中工作,该企业管理从开发到生产的多个k8s集群。
我们经常在Jenkins构建中运行“ kubectl”命令,用于“推出”或获取configmap数据以用于诊断或其他用途。
每个“ kubectl”调用都会获得一组基本参数,如下所示:
kubectl ... --namespace ... --server=... --insecure-skip-tls-verify=true --token=...
最近几周,我们已经看到许多命令由于以下原因而失败:
error: more than one authentication method found for tier-two-user; found [token basicAuth], only one is allowed
有时,当重新生成相同的构建时,这些消失。有时它更持久。我们已经有很多人在研究这个问题了一段时间,并且没有明显的解决方案。
我们不知道是什么添加了基本身份验证凭据。
我会很感激您能提供的任何适用信息。
更新:
% kubectl version
Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.3", GitCommit:"2bba0127d85d5a46ab4b778548be28623b32d0b0", GitTreeState:"clean", BuildDate:"2018-05-21T09:17:39Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"windows/amd64"}
Server Version: version.Info{Major:"1", Minor:"8+", GitVersion:"v1.8.5+coreos.0", GitCommit:"b8e596026feda7b97f4337b115d1a9a250afa8ac", GitTreeState:"clean", BuildDate:"2017-12-12T11:01:08Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}
关于哪个实际命令失败,它是“推出”或“获取”。否则,将提供上面指定的所有选项。
更新:
我只是尝试向构建中添加一些调试输出,我想我可能会发现一个线索,但是我不知道。
我认为在命令运行之前找出〜/ .kube / config文件会很有趣。
这基本上就是它的显示内容:
apiVersion: v1
clusters:
- cluster:
...
contexts:
- context:
cluster: target
user: tier-two-user
name: aaf-edge-upgrade
...
users:
...
- name: tier-two-user
user:
password: ...
username: ...
请注意,用户“二级用户”的设置是文件中的最后一个块。
我感到奇怪的是,该错误消息引用了相同用户名的错误设置,并指出它同时具有密码设置和令牌。几乎要尝试使用的配置似乎是配置文件的内容与命令行参数串联在一起的,其中包括“ --token”选项。
有问题的配置文件是否可能在第一行非空白行之后需要换行?
答案 0 :(得分:1)
您定义users.user.username
(和users.user.password
),这将导致基本身份验证,并与您在cli上提供的token
参数冲突。