Skip to content

Commit 4c8474e

Browse files
authored
Merge pull request #34784 from tengqm/zh-kubelet-tls
[zh-cn] Resync kubelet tls bootstrapping page
2 parents a3f48fd + c7220ae commit 4c8474e

File tree

1 file changed

+53
-63
lines changed

1 file changed

+53
-63
lines changed

content/zh-cn/docs/reference/access-authn-authz/kubelet-tls-bootstrapping.md

Lines changed: 53 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,16 @@ recommend using client TLS certificates on nodes.
2121
-->
2222
在一个 Kubernetes 集群中,工作节点上的组件(kubelet 和 kube-proxy)需要与
2323
Kubernetes 控制平面组件通信,尤其是 kube-apiserver。
24-
为了确保通信本身是私密的、不被干扰,并且确保集群的每个组件都在与另一个
25-
可信的组件通信,我们强烈建议使用节点上的客户端 TLS 证书。
24+
为了确保通信本身是私密的、不被干扰,并且确保集群的每个组件都在与另一个可信的组件通信,
25+
我们强烈建议使用节点上的客户端 TLS 证书。
2626

2727
<!--
2828
The normal process of bootstrapping these components, especially worker nodes that need certificates so they can communicate safely with kube-apiserver,
2929
can be a challenging process as it is often outside of the scope of Kubernetes and requires significant additional work.
3030
This in turn, can make it challenging to initialize or scale a cluster.
3131
-->
32-
启动引导这些组件的正常过程,尤其是需要证书来与 kube-apiserver 安全通信的
33-
工作节点,可能会是一个具有挑战性的过程,因为这一过程通常不受 Kubernetes 控制,
34-
需要不少额外工作。
32+
启动引导这些组件的正常过程,尤其是需要证书来与 kube-apiserver 安全通信的工作节点,
33+
可能会是一个具有挑战性的过程,因为这一过程通常不受 Kubernetes 控制,需要不少额外工作。
3534
这也使得初始化或者扩缩一个集群的操作变得具有挑战性。
3635

3736
<!--
@@ -41,9 +40,8 @@ found [here](https://github.com/kubernetes/kubernetes/pull/20439).
4140
This document describes the process of node initialization, how to set up TLS client certificate bootstrapping for
4241
kubelets, and how it works.
4342
-->
44-
为了简化这一过程,从 1.4 版本开始,Kubernetes 引入了一个证书请求和签名
45-
API。该提案可在
46-
[这里](https://github.com/kubernetes/kubernetes/pull/20439)看到。
43+
为了简化这一过程,从 1.4 版本开始,Kubernetes 引入了一个证书请求和签名 API。
44+
该提案可在[这里](https://github.com/kubernetes/kubernetes/pull/20439)看到。
4745

4846
本文档描述节点初始化的过程,如何为 kubelet 配置 TLS 客户端证书启动引导,
4947
以及其背后的工作原理。
@@ -77,8 +75,8 @@ Note that the above process depends upon:
7775
* Existence of a key and certificate on the local host in the `kubeconfig`
7876
* The certificate having been signed by a Certificate Authority (CA) trusted by the kube-apiserver
7977
-->
80-
假定 kube-apiserver 成功地认证了 kubelet 的凭据数据,它会将 kubelet 视为
81-
一个合法的节点并开始将 Pods 分派给该节点。
78+
假定 kube-apiserver 成功地认证了 kubelet 的凭据数据,它会将 kubelet
79+
视为一个合法的节点并开始将 Pod 分派给该节点。
8280

8381
注意,签名的过程依赖于:
8482

@@ -93,9 +91,6 @@ All of the following are responsibilities of whoever sets up and manages the clu
9391
3. Creating a key and certificate for each kubelet; strongly recommended to have a unique one, with a unique CN, for each kubelet
9492
4. Signing the kubelet certificate using the CA key
9593
5. Distributing the kubelet key and signed certificate to the specific node on which the kubelet is running
96-
97-
The TLS Bootstrapping described in this document is intended to simplify, and partially or even completely automate, steps 3 onwards, as these are the most common when initializing or scaling
98-
a cluster.
9994
-->
10095
负责部署和管理集群的人有以下责任:
10196

@@ -106,8 +101,12 @@ a cluster.
106101
4. 使用 CA 密钥对 kubelet 证书签名
107102
5. 将 kubelet 密钥和签名的证书发布到 kubelet 运行所在的特定节点上
108103

109-
本文中描述的 TLS 启动引导过程有意简化甚至完全自动化上述过程,尤其是
110-
第三步之后的操作,因为这些步骤是初始化或者扩缩集群时最常见的操作。
104+
<!--
105+
The TLS Bootstrapping described in this document is intended to simplify, and partially or even completely automate, steps 3 onwards, as these are the most common when initializing or scaling
106+
a cluster.
107+
-->
108+
本文中描述的 TLS 启动引导过程有意简化甚至完全自动化上述过程,
109+
尤其是第三步之后的操作,因为这些步骤是初始化或者扩缩集群时最常见的操作。
111110

112111
<!--
113112
### Bootstrap Initialization
@@ -134,8 +133,7 @@ In the bootstrap initialization process, the following occurs:
134133
1. kubelet 启动
135134
2. kubelet 看到自己**没有**对应的 `kubeconfig` 文件
136135
3. kubelet 搜索并发现 `bootstrap-kubeconfig` 文件
137-
4. kubelet 读取该启动引导文件,从中获得 API 服务器的 URL 和用途有限的
138-
一个“令牌(Token)”
136+
4. kubelet 读取该启动引导文件,从中获得 API 服务器的 URL 和用途有限的一个“令牌(Token)”
139137
5. kubelet 建立与 API 服务器的连接,使用上述令牌执行身份认证
140138
6. kubelet 现在拥有受限制的凭据来创建和取回证书签名请求(CSR)
141139
7. kubelet 为自己创建一个 CSR,并将其 signerName 设置为 `kubernetes.io/kube-apiserver-client-kubelet`
@@ -195,7 +193,7 @@ to sign the kubelet certificate. As before, it is your responsibility to distrib
195193
-->
196194
## 证书机构 {#certificate-authority}
197195

198-
就像在没有启动引导的情况下,你会需要证书机构(CA)密钥和证书。
196+
就像在没有 TLS 启动引导支持的情况下,你会需要证书机构(CA)密钥和证书。
199197
这些数据会被用来对 kubelet 证书进行签名。
200198
如前所述,将证书机构密钥和证书发布到控制平面节点是你的责任。
201199

@@ -205,12 +203,11 @@ We will refer to these as "Kubernetes CA certificate and key".
205203
206204
All Kubernetes components that use these certificates - kubelet, kube-apiserver, kube-controller-manager - assume the key and certificate to be PEM-encoded.
207205
-->
208-
就本文而言,我们假定这些数据被发布到控制平面节点上的
209-
`/var/lib/kubernetes/ca.pem`(证书)和
206+
就本文而言,我们假定这些数据被发布到控制平面节点上的 `/var/lib/kubernetes/ca.pem`(证书)和
210207
`/var/lib/kubernetes/ca-key.pem`(密钥)文件中。
211208
我们将这两个文件称作“Kubernetes CA 证书和密钥”。
212-
所有 Kubernetes 组件(kubelet、kube-apiserver、kube-controller-manager)都使用
213-
这些凭据,并假定这里的密钥和证书都是 PEM 编码的。
209+
所有 Kubernetes 组件(kubelet、kube-apiserver、kube-controller-manager)
210+
都使用这些凭据,并假定这里的密钥和证书都是 PEM 编码的。
214211

215212
<!--
216213
## kube-apiserver configuration
@@ -223,7 +220,7 @@ The kube-apiserver has several requirements to enable TLS bootstrapping:
223220
-->
224221
## kube-apiserver 配置 {#kube-apiserver-configuration}
225222

226-
启用 TLS 启动引导对 kube-apiserver 有若干需求
223+
启用 TLS 启动引导对 kube-apiserver 有若干要求
227224

228225
* 能够识别对客户端证书进行签名的 CA
229226
* 能够对启动引导的 kubelet 执行身份认证,并将其置入 `system:bootstrappers`
@@ -254,8 +251,8 @@ You can use any [authenticator](/docs/reference/access-authn-authz/authenticatio
254251
### 初始启动引导认证 {#initial-bootstrap-authentication}
255252

256253
为了让启动引导的 kubelet 能够连接到 kube-apiserver 并请求证书,
257-
它必须首先在服务器上认证自身身份。你可以使用任何一种能够对 kubelet 执行身份认证的
258-
[身份认证组件](/zh-cn/docs/reference/access-authn-authz/authentication/)
254+
它必须首先在服务器上认证自身身份。你可以使用任何一种能够对 kubelet
255+
执行身份认证的[身份认证组件](/zh-cn/docs/reference/access-authn-authz/authentication/)
259256

260257
<!--
261258
While any authentication strategy can be used for the kubelet's initial
@@ -396,9 +393,8 @@ systemd unit file perhaps) to enable the token file. See docs
396393
further details.
397394
-->
398395
向 kube-apiserver 添加 `--token-auth-file=FILENAME` 标志(或许这要对 systemd
399-
的单元文件作修改)以启用令牌文件。参见
400-
[这里](/zh-cn/docs/reference/access-authn-authz/authentication/#static-token-file)
401-
的文档以了解进一步的细节。
396+
的单元文件作修改)以启用令牌文件。有关进一步细节的文档,
397+
可参见[这里](/zh-cn/docs/reference/access-authn-authz/authentication/#static-token-file)
402398

403399
<!--
404400
### Authorize kubelet to create CSR
@@ -413,8 +409,8 @@ To do this, you only need to create a `ClusterRoleBinding` that binds the `syste
413409
-->
414410
### 授权 kubelet 创建 CSR {#authorize-kubelet-to-create-csr}
415411

416-
现在启动引导节点被身份认证为 `system:bootstrapping` 组的成员,它需要被**授权**
417-
创建证书签名请求(CSR)并在证书被签名之后将其取回。
412+
现在启动引导节点被 **身份认证**`system:bootstrapping` 组的成员,
413+
它需要被 **授权** 创建证书签名请求(CSR)并在证书被签名之后将其取回。
418414
幸运的是,Kubernetes 提供了一个 `ClusterRole`,其中精确地封装了这些许可,
419415
`system:node-bootstrapper`
420416

@@ -445,8 +441,8 @@ the controller-manager is responsible for issuing actual signed certificates.
445441
-->
446442
## kube-controller-manager 配置 {#kube-controller-manager-configuration}
447443
448-
API 服务器从 kubelet 收到证书请求并对这些请求执行身份认证,但真正负责发放
449-
签名证书的是控制器管理器
444+
API 服务器从 kubelet 收到证书请求并对这些请求执行身份认证,
445+
但真正负责发放签名证书的是控制器管理器(controller-manager)
450446
451447
<!--
452448
The controller-manager performs this function via a certificate-issuing control loop.
@@ -455,9 +451,9 @@ This takes the form of a
455451
assets on disk. Currently, all certificates issued have one year validity and a
456452
default set of key usages.
457453
-->
458-
控制器管理器通过一个证书发放的控制回路来执行此操作。该操作的执行方式是使用磁盘上
459-
的文件用 [cfssl](https://blog.cloudflare.com/introducing-cfssl/) 本地签名组件
460-
来完成。目前,所发放的所有证书都有一年的有效期,并设定了默认的一组密钥用法。
454+
控制器管理器通过一个证书发放的控制回路来执行此操作。该操作的执行方式是使用磁盘上的文件用
455+
[cfssl](https://blog.cloudflare.com/introducing-cfssl/) 本地签名组件来完成。
456+
目前,所发放的所有证书都有一年的有效期,并设定了默认的一组密钥用法。
461457
462458
<!--
463459
In order for the controller-manager to sign certificates, it needs the following:
@@ -467,7 +463,7 @@ In order for the controller-manager to sign certificates, it needs the following
467463
-->
468464
为了让控制器管理器对证书签名,它需要:
469465
470-
* 能够访问你之前所创建并分发的“Kubernetes CA 密钥和证书”
466+
* 能够访问你之前所创建并分发的 “Kubernetes CA 密钥和证书”
471467
* 启用 CSR 签名
472468
473469
<!--
@@ -537,18 +533,17 @@ There are two distinct sets of permissions:
537533
-->
538534
许可权限有两组:
539535

540-
* `nodeclient`:如果节点在为节点创建新的证书,则该节点还没有证书。该节点
541-
使用前文所列的令牌之一来执行身份认证,因此是组 `system:bootstrappers` 组
542-
的成员。
536+
* `nodeclient`:如果节点在为节点创建新的证书,则该节点还没有证书。
537+
该节点使用前文所列的令牌之一来执行身份认证,因此是组 `system:bootstrappers` 组的成员。
543538
* `selfnodeclient`:如果节点在对证书执行续期操作,则该节点已经拥有一个证书。
544539
节点持续使用现有的证书将自己认证为 `system:nodes` 组的成员。
545540

546541
<!--
547542
To enable the kubelet to request and receive a new certificate, create a `ClusterRoleBinding` that binds the group in which the bootstrapping node is a member `system:bootstrappers` to the `ClusterRole` that grants it permission, `system:certificates.k8s.io:certificatesigningrequests:nodeclient`:
548543
-->
549-
要允许 kubelet 请求并接收新的证书,可以创建一个 `ClusterRoleBinding` 将启动
550-
引导节点所处的组 `system:bootstrappers` 绑定到为其赋予访问权限的
551-
`ClusterRole` `system:certificates.k8s.io:certificatesigningrequests:nodeclient`
544+
要允许 kubelet 请求并接收新的证书,可以创建一个 `ClusterRoleBinding`
545+
将启动引导节点所处的组 `system:bootstrappers` 绑定到为其赋予访问权限的 `ClusterRole`
546+
`system:certificates.k8s.io:certificatesigningrequests:nodeclient`
552547

553548
```yaml
554549
# 批复 "system:bootstrappers" 组的所有 CSR
@@ -630,10 +625,9 @@ The kubelet requires the following configuration to bootstrap:
630625
kubelet 需要以下配置来执行启动引导:
631626

632627
* 一个用来存储所生成的密钥和证书的路径(可选,可以使用默认配置)
633-
* 一个用来指向尚不存在的 `kubeconfig` 文件的路径;kubelet 会将启动引导
634-
配置文件放到这个位置
635-
* 一个指向启动引导 `kubeconfig` 文件的路径,用来提供 API 服务器的 URL
636-
和启动引导凭据,例如,启动引导令牌
628+
* 一个用来指向尚不存在的 `kubeconfig` 文件的路径;kubelet 会将启动引导配置文件放到这个位置
629+
* 一个指向启动引导 `kubeconfig` 文件的路径,用来提供 API 服务器的 URL 和启动引导凭据,
630+
例如,启动引导令牌
637631
* 可选的:轮换证书的指令
638632

639633
<!--
@@ -676,8 +670,7 @@ The important elements to note are:
676670
-->
677671
需要额外注意的一些因素有:
678672

679-
* `certificate-authority`:指向 CA 文件的路径,用来对 kube-apiserver 所出示
680-
的服务器证书进行验证
673+
* `certificate-authority`:指向 CA 文件的路径,用来对 kube-apiserver 所出示的服务器证书进行验证
681674
* `server`:用来访问 kube-apiserver 的 URL
682675
* `token`:要使用的令牌
683676

@@ -720,9 +713,9 @@ specified by `--kubeconfig`. The certificate and key file will be placed in the
720713
directory specified by `--cert-dir`.
721714
-->
722715
在启动 kubelet 时,如果 `--kubeconfig` 标志所指定的文件并不存在,会使用通过标志
723-
`--bootstrap-kubeconfig` 所指定的启动引导 kubeconfig 配置来向 API 服务器请求
724-
客户端证书。在证书请求被批复并被 kubelet 收回时,一个引用所生成的密钥和所获得
725-
证书的 kubeconfig 文件会被写入到通过 `--kubeconfig` 所指定的文件路径下。
716+
`--bootstrap-kubeconfig` 所指定的启动引导 kubeconfig 配置来向 API 服务器请求客户端证书。
717+
在证书请求被批复并被 kubelet 收回时,一个引用所生成的密钥和所获得证书的 kubeconfig
718+
文件会被写入到通过 `--kubeconfig` 所指定的文件路径下。
726719
证书和密钥文件会被放到 `--cert-dir` 所指定的目录中。
727720
728721
<!--
@@ -744,9 +737,8 @@ To secure these, the kubelet can do one of:
744737
* create self-signed key and certificate, if a key and certificate are not provided
745738
* request serving certificates from the cluster server, via the CSR API
746739
-->
747-
kubelet 也可以使用**服务(Serving)**证书。kubelet 自身向外提供一个
748-
HTTPS 末端,包含若干功能特性。要保证这些末端的安全性,kubelet 可以执行以下操作
749-
之一:
740+
kubelet 也可以使用 **服务(Serving)** 证书。kubelet 自身向外提供一个 HTTPS 末端,
741+
包含若干功能特性。要保证这些末端的安全性,kubelet 可以执行以下操作之一:
750742
751743
* 使用通过 `--tls-private-key-file` 和 `--tls-cert-file` 所设置的密钥和证书
752744
* 如果没有提供密钥和证书,则创建自签名的密钥和证书
@@ -783,9 +775,8 @@ Kubernetes v1.8 和更高版本的 kubelet 实现了对客户端证书与/或服
783775
certificates by creating new CSRs as its existing credentials expire. To enable
784776
this feature pass the following flag to the kubelet:
785777
-->
786-
`RotateKubeletClientCertificate` 会导致 kubelet 在其现有凭据即将过期时通过
787-
创建新的 CSR 来轮换其客户端证书。要启用此功能特性,可将下面的标志传递给
788-
kubelet:
778+
`RotateKubeletClientCertificate` 会导致 kubelet 在其现有凭据即将过期时通过创建新的
779+
CSR 来轮换其客户端证书。要启用此功能特性,可将下面的标志传递给 kubelet:
789780
790781
```
791782
--rotate-certificates
@@ -796,9 +787,8 @@ kubelet:
796787
certificate after bootstrapping its client credentials **and** to rotate that
797788
certificate. To enable this feature pass the following flag to the kubelet:
798789
-->
799-
`RotateKubeletServerCertificate` 会让 kubelet 在启动引导其客户端凭据之后请求
800-
一个服务证书 **且** 对该服务证书执行轮换操作。要启用此功能特性,将下面的标志
801-
传递给 kubelet:
790+
`RotateKubeletServerCertificate` 会让 kubelet 在启动引导其客户端凭据之后请求一个服务证书
791+
**且** 对该服务证书执行轮换操作。要启用此功能特性,将下面的标志传递给 kubelet:
802792
803793
```
804794
--rotate-server-certificates
@@ -812,9 +802,8 @@ reasons](https://github.com/kubernetes/community/pull/1982). To use
812802
`RotateKubeletServerCertificate` operators need to run a custom approving
813803
controller, or manually approve the serving certificate requests.
814804
-->
815-
Kubernetes 核心中所实现的 CSR 批复控制器出于
816-
[安全原因](https://github.com/kubernetes/community/pull/1982)
817-
并不会自动批复节点的**服务**证书。
805+
出于[安全原因](https://github.com/kubernetes/community/pull/1982),Kubernetes 核心中所实现的
806+
CSR 批复控制器并不会自动批复节点的**服务**证书。
818807
要使用 `RotateKubeletServerCertificate` 功能特性,
819808
集群运维人员需要运行一个定制的控制器或者手动批复服务证书的请求。
820809
@@ -901,3 +890,4 @@ certificate approve <name>` and `kubectl certificate deny <name>`.
901890
`kubectl descsribe csr <name>` 来描述某个 CSR 的细节。
902891
管理员可以使用 `kubectl certificate approve <name` 来批准某 CSR,或者
903892
`kubectl certificate deny <name>` 来拒绝某 CSR。
893+

0 commit comments

Comments
 (0)