如何在使用 kubeadm init 后以编程方式获取 Kubernetes 在 --discovery-token-ca-cert-hash 中打印的值

问题描述 投票:0回答:3

我有一个特定的用例,其中我们在大量机器上远程创建 Kubernetes 集群。当我们最后运行

kubeadm init
时,连接命令将打印为:

kubeadm join [IPv6-Address]:6443 --token TOKEN_VALUE --discovery-token-ca-cert-hash CERT_HASH

为了以编程方式加入工作节点,我们有一个脚本需要

TOKEN_VALUE
CERT_HASH

现在我正在使用以下命令获取

TOKEN_VALUE
sudo kubeadm token list | awk 'NR == 2 {print $1}'
。但是,我还没有找到一种简单的方法(或根本没有任何方法)来获得
CERT_HASH

任何帮助或指示将不胜感激。

kubernetes kubeadm
3个回答
3
投票

对于那些有同样问题的人来说,似乎没有一个超级干净或简单的方法来解决它。但看了一些地方后,对我有用的是

openssl x509 -in /etc/kubernetes/pki/ca.crt -noout -pubkey | openssl rsa -pubin -outform DER 2>/dev/null | sha256sum | cut -d' ' -f1


2
投票

只需在控制节点上运行以下命令

kubeadm token create --print-join-command

请参阅文档此处


0
投票

如果您使用 ansible 来自动化加入过程,您可以使用

x509_certificate_info
模块:

# Get cert info
- name: Get CA certificate hash
  delegate_to: "{{ groups.k8s_master }}"
  community.crypto.x509_certificate_info:
    path: /etc/kubernetes/pki/ca.crt
  register: __k8s_pki_ca

# Use the info
- name: debug
  debug:
    msg: 'sha256:{{ __k8s_pki_ca["public_key_fingerprints"]["sha256"] | replace(":","") }}'

使用它可以自动执行连接命令,即使使用新的 kubeadm conf 选项也是如此。有关 crypto-cert 模块的更多信息可以在 ansible 文档

中找到
© www.soinside.com 2019 - 2024. All rights reserved.