From 8b1afccd0ab23d4a8441fdebec2cd93a9af44a77 Mon Sep 17 00:00:00 2001 From: "zhenghao.zhu" Date: Thu, 18 May 2023 22:05:29 +0800 Subject: [PATCH] resync kubeadm-join&cleanup kubeadm-inti --- .../setup-tools/kubeadm/kubeadm-init.md | 50 ++++++++-------- .../setup-tools/kubeadm/kubeadm-join.md | 59 ++++++++++++++++--- 2 files changed, 76 insertions(+), 33 deletions(-) diff --git a/content/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-init.md b/content/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-init.md index 8f255401fa..cb01dae1d2 100644 --- a/content/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-init.md +++ b/content/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-init.md @@ -126,8 +126,8 @@ following steps: - 配置自动签发新的 CSR 请求。 更多相关信息,请查看 [kubeadm join](/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-join/)。 - - -### 在 kubeadm 中使用 init 阶段 {#init-phases} + +### 在 kubeadm 中使用 init 阶段 {#init-phases} Kubeadm 允许你使用 `kubeadm init phase` 命令分阶段创建控制平面节点。 @@ -213,7 +214,7 @@ will create a control plane node with the custom manifest files. {{< feature-state for_k8s_version="v1.22" state="beta" >}} - 或者,你可以使用 `InitConfiguration` 下的 `skipPhases` 字段。 @@ -262,12 +263,12 @@ For more information on the fields and usage of the configuration you can naviga 关于配置的字段和用法的更多信息,你可以访问 [API 参考页面](/zh-cn/docs/reference/config-api/kubeadm-config.v1beta3/)。 - ### 使用 kubeadm init 时设置特性门控 {#feature-gates} - 特性门控的列表: @@ -313,12 +314,12 @@ Once a feature gate goes GA its value becomes locked to `true` by default. 一旦特性门控变成了 GA,它的值会被默认锁定为 `true`。 {{< /note >}} - 特性门控的描述: - 你可以通过 `--config` 把 [kubeadm 配置文件](#config-file) 传递给上述命令来控制 `kubernetesVersion` 和 `imageRepository` 字段。 - kubeadm 需要的所有默认 `registry.k8s.io` 镜像都支持多种硬件体系结构。 @@ -453,7 +454,7 @@ Allowed customization are: * 使用其他的 `imageRepository` 来代替 `registry.k8s.io`。 * 为 etcd 或 CoreDNS 提供特定的 `imageRepository` 和 `imageTag`。 - 确保将镜像推送到 kubeadm 可以使用的自定义仓库的路径中,你必须: - 1. 生成一个令牌。这个令牌必须采用的格式为:`<6 个字符的字符串>.<16 个字符的字符串>`。 更加正式的说法是,它必须符合正则表达式:`[a-z0-9]{6}\.[a-z0-9]{16}`。 - + kubeadm 可以为你生成一个令牌: ```shell @@ -698,4 +699,3 @@ provisioned). For details, see the [kubeadm join](/docs/reference/setup-tools/ku 将 Kubernetes 集群升级到新版本 * [kubeadm reset](/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-reset/) 恢复 `kubeadm init` 或 `kubeadm join` 命令对节点所作的变更 - diff --git a/content/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-join.md b/content/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-join.md index 6ceea2a63e..a6ba7de662 100644 --- a/content/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-join.md +++ b/content/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-join.md @@ -162,11 +162,16 @@ that the API server certificate is valid under the root CA. 以及 API 服务器证书在根 CA 下是否有效。 CA 键哈希格式为 `sha256:`。 -默认情况下,在 `kubeadm init` 最后打印的 `kubeadm join` 命令 -或者 `kubeadm token create --print-join-command` 的输出信息中返回哈希值。 +默认情况下,哈希值会打印在 `kubeadm init` 命令输出的末尾 +或者从 `kubeadm token create --print-join-command` 命令的输出信息中返回。 它使用标准格式(请参考 [RFC7469](https://tools.ietf.org/html/rfc7469#section-2.4)) 并且也能通过第三方工具或者制备系统进行计算。 例如,使用 OpenSSL CLI: @@ -354,6 +359,45 @@ In case the discovery file does not contain credentials, the TLS discovery token 如果发现文件包含凭据,你必须对其保密并通过安全通道进行传输。 这可能通过你的云提供商或供应工具来实现。 + +#### 将自定义 kubelet 凭据与 `kubeadm join` 结合使用 + + +要允许 `kubeadm join` 使用预定义的 kubelet 凭据并跳过客户端 TLS 引导程序和新节点的 CSR 批准: + + +1. 从集群中带有 `/etc/kubernetes/pki/ca.key` 的工作控制平面节点执行 + `kubeadm kubeconfig user --org system:nodes --client-name system:node:$NODE > kubelet.conf`。 + `$NODE` 必须设置为新节点的名称。 +2. 手动修改生成的 `kubelet.conf` 以调整集群名称和服务器端点, + 或运行 `kubeadm kubeconfig user --config`(它接受 `InitConfiguration`)。 + + +如果集群没有 `ca.key` 文件,你必须在外部对 `kubelet.conf` 中嵌入的证书进行签名。 + + +1. 将生成的 `kubelet.conf` 复制为新节点上的 `/etc/kubernetes/kubelet.conf`。 +2. 在新节点上带着标志 + `--ignore-preflight-errors=FileAvailable--etc-kubernetes-kubelet.conf` 执行 `kubeadm join`。 + @@ -378,7 +422,7 @@ automatically approve kubelet client certs, you can turn it off by executing thi --> 默认情况下,Kubernetes 启用了 CSR 自动批准器,如果在身份验证时使用启动引导令牌, 它会批准对 kubelet 的任何客户端证书的请求。 -如果不希望集群自动批准kubelet客户端证书,可以通过执行以下命令关闭它: +如果不希望集群自动批准 kubelet 客户端证书,可以通过执行以下命令关闭它: ```shell kubectl delete clusterrolebinding kubeadm:node-autoapprove-bootstrap @@ -402,15 +446,15 @@ After that, `kubeadm join` will block until the admin has manually approved the The output is similar to this: --> 输出类似于: - + ``` NAME AGE REQUESTOR CONDITION node-csr-c69HXe7aYcqkS1bKmH4faEnHAWxn6i2bHZ2mD04jZyQ 18s system:bootstrap:878f07 Pending ``` 2. `kubectl certificate approve` 允许管理员批准 CSR。 此操作告知证书签名控制器向请求者颁发一个证书,该证书具有 CSR 中所请求的那些属性。 @@ -573,4 +617,3 @@ For more information on the fields and usage of the configuration you can naviga 管理 `kubeadm join` 的令牌。 * [kubeadm reset](/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-reset/) 将 `kubeadm init` 或 `kubeadm join` 对主机的更改恢复到之前状态。 -