当加入kubeadm初始化的集群时,我们需要建立双向信任。 分别为发现(具有节点信任Kubernetes控制平面)和TLS引导(具有Kubernetes控制平面信任节点)。
发现主要有两种方案。一个是使用api服务器的IP地址伴随的共享 令牌。第二个是提供一个文件,此文件是标准kubeconfig文件的子集。此文件 可以是本地文件或通过HTTPS URL下载的文件。格式是kubeadm join --discovery-token abcdef.1234567890abcdef 1.2.3.4:6443, kubeadm join --discovery-file path/to/file.conf, 或者 kubeadm join --discovery-file https://url/file.conf. 只能使用其中的一种格式。如果发现信息是从URL加载的,必须使用HTTPS。 另外,在这种情况下,主机安装的CA捆绑包用于验证连接。
如果使用共享令牌进行发现,还应传递 --discovery-token-ca-cert-hash 参数,以便由Kubernetes控制平面校验由根证书颁发机构(CA)颁发的公钥。 此值在“kubeadm init”命令中输出可用,也可以是使用标准工具计算。--discovery-token-ca-cert-hash参数可以重复多次以允许多个公钥。
如果提前不知道CA公钥哈希,可以通过--discovery-token-unsafe-skip-ca-verification参数禁用此功能验证。这削弱了kubeadm安全模型,因为其他节点可能会模拟kubernates控制平面。 TLS引导机制也通过共享令牌驱动。 这是用于临时验证Kubernetes控制平面提交的本地创建密钥对的证书签名请求(CSR)。 默认情况下,kubeadm会设置Kubernetes控制平面以自动批准这些签名请求。此令牌通过--tls-bootstrap-token参数传递。通常情况下,两个部分使用相同的标记。在这种情况下,使用--token参数,而不是单独指定每个令牌。
命令格式:
kubeadm join [api-server-endpoint] [flags]
kubeadm join [command]
"join [api-server-endpoint]" 命令执行以下阶段:
preflight 执行预检
control-plane-prepare 准备好机器以供控制
/download-certs [实验]从kubeadm certs Secret下载控制平面节点之间共享的证书
/certs 为新的控制平面组件生成证书
/kubeconfig 为新的控制平面组件生成kubeconfig
/control-plane 为新的控制平面组件生成清单
kubelet-start 写入kubelet设置、证书并(重新)启动kubelet
control-plane-join 将一台机器作为控制平面实例
/etcd 添加新的本地etcd成员
/update-status 将新的控制平面节点注册到kubeadm config ConfigMap中维护的ClusterStatus中
/mark-control-plane 将节点标记为控制平面
现有命令:
phase 使用此命令可调用联接工作流的单个阶段
参数:
--apiserver-advertise-address string 如果节点应该承载一个新的控制平面实例,那么API服务器将公布它正在侦听的IP地址。如果未设置,将使用默认网络接口。
--apiserver-bind-port int32 如果节点应该承载一个新的控制平面实例,则为API服务器绑定到的端口。(默认6443)
--certificate-key string 使用此密钥解密init上载的证书机密。
--config string kubeadm配置文件的路径。
--control-plane 在此节点上创建新的控制平面实例
--cri-socket string 要连接的CRI套接字的路径。如果为空,kubeadm将尝试自动检测此值;仅当您安装了多个CRI或有非标准CRI套接字时才使用此选项。
--discovery-file string 对于基于文件的发现,从中加载群集信息的文件或URL。
--discovery-token string 对于基于令牌的发现,用于验证从API服务器获取的集群信息的令牌。
--discovery-token-ca-cert-hash strings 对于基于令牌的发现,请验证根CA公钥是否与此哈希匹配(格式:“类型:值”)。
--discovery-token-unsafe-skip-ca-verification 对于基于令牌的发现,允许加入而不使用--discovery-token-ca-cert-hash 阻止。
-k, --experimental-kustomize string 存储静态pod清单的kustomize修补程序的路径。
--ignore-preflight-errors strings 其错误将显示为警告的检查列表。示例:“IsPrivilegedUser,Swap”。值“all”忽略所有检查中的错误。
--node-name string 指定节点名称。
--skip-phases strings 要跳过的阶段列表
--tls-bootstrap-token string 指定用于在加入节点时临时通过Kubernetes控制平面进行身份验证的令牌。
--token string 当未提供发现令牌和tls引导令牌的值时,请将此令牌用于它们。
全局参数:
--add-dir-header 如果为true,则将文件目录添加到标头
--log-file string 如果非空,则使用此日志文件
--log-file-max-size uint 定义日志文件可以增长到的最大大小。单位为兆字节。如果该值为0,则最大文件大小不受限制。(默认值1800)
--rootfs string [实验性]指向“真实”主机根文件系统的路径。
--skip-headers 如果为true,则避免在日志消息中使用头前缀
--skip-log-headers 如果为true,则在打开日志文件时避免使用标头
-v, --v Level 日志级别详细信息的编号