kubernetes - 从 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”选项。
有问题的配置文件是否可能在第一个非空行之后需要换行符?
解决方案
您定义users.user.username
(and users.user.password
),这将导致基本身份验证并与token
您在 cli 上提供的参数发生冲突。
推荐阅读
- r - 在 dplyr 的 group_by 中使用对象而不是列名
- wordpress - 重力表单提交后显示 woocommerce 产品
- avro - 完全兼容和传递完全兼容的区别
- javascript - 复选框,如果选中需要在 div 中求和其价格
- command-line - 用单词列表中的另一个单词更改许多 HTML 页面中的一个单词
- apache-spark - Spark Kafka Streaming - 发送原始时间戳而不是当前时间戳
- entity-framework - 实体框架核心一对多关系
- mysql - 来自两个表的 MySQL 数据:将列标题添加到输出
- java - 如何使用 CQRS 进行 BDD?
- flask - Flask-sqlalchemy-Marshmallow 嵌套模式不起作用