首页 > 解决方案 > 从 kubectl rollout 中获取“错误:为第二层用户找到多个身份验证方法;找到 [token basicAuth],只允许一个”

问题描述

我在一家大型企业工作,该企业管理从开发到生产的多个 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"}

关于哪个实际命令失败,它要么是“rollout”,要么是“get”。否则,将提供上面指定的所有选项。

更新

我只是尝试在构建中添加一些调试输出,我想我可能会看到一个线索,但我不知道。

我认为在命令运行之前找出 ~/.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: ...

请注意,用户“tier-two-user”的设置是文件中的最后一个块。

我觉得奇怪的是,错误消息指的是同一用户名的错误设置,指出它同时具有密码设置和令牌。似乎它尝试使用的配置是配置文件的内容与命令行参数连接,其中包括一个“--token”选项。

有问题的配置文件是否可能在第一个非空行之后需要换行符?

标签: kuberneteskubectl

解决方案


您定义users.user.username(and users.user.password),这将导致基本身份验证并与token您在 cli 上提供的参数发生冲突。


推荐阅读