Kubeadm: 更好的加入令牌可用性

创建于 2017-11-04  ·  22评论  ·  资料来源: kubernetes/kubeadm

/种类特征
@kubernetes/sig-cli
发生了什么
我发现,如果您没有 kubeadm 的原始连接字符串输出,那么添加新机器就不是那么容易了。 “有没有办法生成整个连接命令?我觉得我必须重置整个集群才能“到达”魔法字符串“(c) @alexellis

你期望发生的事情
同样在 Docker Swarm 中,你总是可以告诉 master 打印一个可复制粘贴的连接字符串来添加......或同化? 更多的机器。

示例输入:

kubeadm token string

示例输出:

kubeadm join --token TOK MASTER_IP:6443 --discovery-token-ca-cert-hash sha256:HASH

还有什么我们需要知道的吗?
你太棒了!

(后续来自:https://github.com/kubernetes/kubernetes/pull/41663)
@luxas @mattmoyer @jamiehannaford

areUX prioritimportant-soon

最有用的评论

@zcalusic目前的方法是像这样使用 OpenSSL 计算散列(在主服务器上或任何有/etc/kubernetes/pki/ca.crt副本的地方运行):

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

所有22条评论

在这样的事情上 +1。

关于这个想法的一些即兴演奏:

  • 一个新的kubeadm ca-cert-hash命令(名称待定),它只是打印出当前的 CA 哈希。 这基本上与我们在kubeadm join docs 中给出的openssl命令相同。
  • kubeadm token create添加一个--print-join-command标志,它会像kubeadm init一样打印出整个连接命令。 这有望通过在配置期间运行kubeadm token create --print-join-command >> worker_init.sh类的内容来轻松实现自动化。

  • 一个新命令kubeadm token get <token id>获取给定 ID 的完整令牌,带有--print-join-command标志以可选地打印完整连接命令,而不仅仅是令牌。

谢谢你在这标记我。 记下 Docker Swarm 的 UX - 在任何时候你都可以输入docker swarm join-token worker并有一个命令来粘贴到一个工人或通过 SSH 发送。 有了 Kubeadm,我真的很难拆除集群来添加一个新节点 - 我对 CLI 非常有信心,所以我确信我不是唯一一个。

此外,init 输出非常繁重,您无法真正获得 join 命令并将其隐藏在某处......目前我正在诉诸kubeadm init ... | grep 'kubeadm join --token' > /some_file
有一个安静模式会很酷,其中 stdout 上唯一的东西是 join 命令。

无论如何,现在获得该 ca-cert-hash 的方法是什么? 当然, kubeadm init输出此时早已不复存在……我没有保存它,因为我希望以后可以轻松地根据需要提取该信息。

我设法加入与令牌kubeadm token list ,并加入与另一个节点kubeadm join --token ,但它是说:

[validation] WARNING: using token-based discovery without DiscoveryTokenCACertHashes can be unsafe (see https://kubernetes.io/docs/admin/kubeadm/#kubeadm-join).
[validation] WARNING: Pass --discovery-token-unsafe-skip-ca-verification to disable this warning. This warning will become an error in Kubernetes 1.9.

那么,在它成为错误之前,我如何传递该参数? 谢谢你的帮助!

@zcalusic目前的方法是像这样使用 OpenSSL 计算散列(在主服务器上或任何有/etc/kubernetes/pki/ca.crt副本的地方运行):

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

谢谢@mattmoyer的提示。 你的 oneliner 工作得很好。

当然,我必须同意--print-join-command会更好的用户体验。

同意--print-join-command

我们在 SIG 会议上得出结论,我们将继续进行https://github.com/kubernetes/kubernetes/pull/55468 _and_ 这个功能添加。
我们稍后会看到确切的形式

这是在 2017 年 11 月 21 日的缩放电话会议上讨论过的; 该电话的会议记录在https://docs.google.com/document/d/1deJYPIF4LmhGjDVaqrswErIrV7mtwJgovtLnPCDxP7U/edit#

我昨天只是快速浏览了一下,但还没有研究它:)

为 kubeadm token create 添加一个 --print-join-command 标志,它会像 kubeadm init 一样打印出整个 join 命令。 这有望通过在配置期间运行 kubeadm token create --print-join-command >> worker_init.sh 之类的东西来轻松实现自动化。

如果我们更喜欢这个,我认为bootstrap token create 中已经有相同的逻辑。 我们可以在这里使用它。

一个新的命令 kubeadm token get获取给定 ID 的完整令牌,带有 --print-join-command 标志可以选择打印完整的连接命令,而不仅仅是令牌。

我个人更喜欢这个。 但是似乎这两个想法在实现时都需要更多的上下文,例如,我们需要 MasterConfiguration 来获取 apiserver 广告地址。 目前token create没有配置。

更新:也许我们可以实现这两个想法? @luxas @mattmoyer

我在https://github.com/kubernetes/kubernetes/pull/56185 中实现了第一个想法kubeadm get想法,但我们时间不够。

IMO 不是创建一个新的kubeadm get ,而是应该在已经存在的kubeadm token list的末尾打印哈希/kubeadm join 语句。

我认为kubeadm token list --print-join-command会很棒!

我喜欢这个想法@luxas。 我认为我们可以让它不那么冗长,我发现与docker CLI 相比,我输入了很长的标志kubeadm

kubeadm token list --verbose

kubeadm token list --tokens

kubeadm token list --join-token

kubeadm token list --verbose|-v适用于我

嘿,这就搞定了吗?
如何获取令牌以加入集群中的新节点?

@tzurE它已合并但尚未发布,它将成为计划于本周晚些时候发布的 Kubernetes 1.9 的一部分。

新功能允许您运行此命令来加入节点:

# on a master node (or any node with admin access to your cluster)
$ kubeadm token create --print-join-command
kubeadm join --token 447067.20b55955bd6abe6c 192.168.99.100:8443 --discovery-token-ca-cert-hash sha256:17023a5c90b996e50c514e63e161e46f78be216fd48c0c3df3be67e008b28889
# on the new node (copy-pasted from the output above)
$ kubeadm join --token 447067.20b55955bd6abe6c 192.168.99.100:8443 --discovery-token-ca-cert-hash sha256:17023a5c90b996e50c514e63e161e46f78be216fd48c0c3df3be67e008b28889

很好谢谢。
在此期间有解决方案吗? 一种不使用常规命令提取它的方法?

@tzurE看到这个评论: https :

@马特莫耶

命令“kubeadm token create --print-join-command”在 1.9 中运行良好。 但是我在我的节点上获得 NotReady 状态。 我正在使用 ubuntu 16.04 和 k8s 1.9.0。 有什么建议?

@siddharthjoshi745部署一个像 Weave Net 这样的 Pod 网络(可以在我们的文档中看到)。
请不要对旧问题发表评论,如果发现错误,请打开一个新问题,或者在 Slack 上寻求帮助
祝你有美好的一天!

我们如何只输出一个值? 说令牌或发现令牌sha等。

此页面是否有帮助?
0 / 5 - 0 等级