diff --git a/content/zh-cn/docs/reference/setup-tools/kubeadm/implementation-details.md b/content/zh-cn/docs/reference/setup-tools/kubeadm/implementation-details.md index 78c80b0554..c7059200ef 100644 --- a/content/zh-cn/docs/reference/setup-tools/kubeadm/implementation-details.md +++ b/content/zh-cn/docs/reference/setup-tools/kubeadm/implementation-details.md @@ -23,7 +23,7 @@ However, it might not be obvious _how_ kubeadm does that. --> `kubeadm init` 和 `kubeadm join` 结合在一起提供了良好的用户体验, 因为从头开始创建实践最佳而配置最基本的 Kubernetes 集群。 -但是,kubeadm **如何** 做到这一点可能并不明显。 +但是,kubeadm **如何**做到这一点可能并不明显。 - `/etc/kubernetes/` 作为带有控制平面组件身份标识的 kubeconfig 文件的路径。kubeconfig 文件的名称为: - - `kubelet.conf` (在 TLS 引导时名称为 `bootstrap-kubelet.conf`) + - `kubelet.conf`(在 TLS 引导时名称为 `bootstrap-kubelet.conf`) - `controller-manager.conf` - `scheduler.conf` - `admin.conf` 用于集群管理员和 kubeadm 本身 + - `super-admin.conf` 用于可以绕过 RBAC 的集群超级管理员 -Kubeadm 在启动 init 之前执行一组预检,目的是验证先决条件并避免常见的集群启动问题。 +kubeadm 在启动 init 之前执行一组预检,目的是验证先决条件并避免常见的集群启动问题。 用户可以使用 `--ignore-preflight-errors` 选项跳过特定的预检或全部检查。 -- [错误] 如果 API ​​服务器绑定的端口或 10250/10251/10252 端口已被占用 +- [错误] 如果 API 服务器绑定的端口或 10250/10251/10252 端口已被占用 - [错误] 如果 `/etc/kubernetes/manifest` 文件夹已经存在并且不为空 -- [错误] 如果 `/proc/sys/net/bridge/bridge-nf-call-iptables` 文件不存在或不包含 1 -- [错误] 如果建议地址是 ipv6,并且 `/proc/sys/net/bridge/bridge-nf-call-ip6tables` 不存在或不包含 1 - [错误] 如果启用了交换分区 - [错误] 如果命令路径中没有 `conntrack`、`ip`、`iptables`、`mount`、`nsenter` 命令 -Kubeadm 生成用于不同目的的证书和私钥对: +kubeadm 生成用于不同目的的证书和私钥对: - Kubernetes 集群的自签名证书颁发机构会保存到 `ca.crt` 文件和 `ca.key` 私钥文件中 @@ -325,6 +323,7 @@ Kubeadm 生成用于不同目的的证书和私钥对: - 用于 API 服务器安全连接到 kubelet 的客户端证书,使用 `ca.crt` 作为 CA 生成, 并保存到 `apiserver-kubelet-client.crt`,私钥保存到 `apiserver-kubelet-client.key` 文件中。该证书应该在 `system:masters` 组织中。 + - 用于签名 ServiceAccount 令牌的私钥保存到 `sa.key` 文件中,公钥保存到 `sa.pub` 文件中。 - 用于前端代理的证书颁发机构保存到 `front-proxy-ca.crt` 文件中,私钥保存到 `front-proxy-ca.key` 文件中 + - 前端代理客户端的客户端证书,使用 `front-proxy-ca.crt` 作为 CA 生成,并保存到 `front-proxy-client.crt` 文件中,私钥保存到 `front-proxy-client.key` 文件中 @@ -390,7 +390,7 @@ Please note that: -Kubeadm 生成具有用于控制平面组件身份标识的 kubeconfig 文件: +kubeadm 生成具有用于控制平面组件身份标识的 kubeconfig 文件: -- 供 kubelet 在 TLS 引导期间使用的 kubeconfig 文件——`/etc/kubernetes/bootstrap-kubelet.conf`。 +- 供 kubelet 在 TLS 引导期间使用的 kubeconfig 文件 —— `/etc/kubernetes/bootstrap-kubelet.conf`。 在此文件中,有一个引导令牌或内嵌的客户端证书,向集群表明此节点身份。 此客户端证书应: @@ -435,19 +435,39 @@ Kubeadm 生成具有用于控制平面组件身份标识的 kubeconfig 文件: 默认定义的。 -另外,用于 kubeadm 本身和 admin 的 kubeconfig 文件也被生成并保存到 -`/etc/kubernetes/admin.conf` 文件中。 -此处的 admin 定义为正在管理集群并希望完全控制集群(**root**)的实际人员。 -内嵌的 admin 客户端证书应是 `system:masters` 组织的成员, -这一组织名由默认的 [RBAC 面向用户的角色绑定](/zh-cn/docs/reference/access-authn-authz/rbac/#user-facing-roles) -定义。它还应包括一个 CN。kubeadm 使用 `kubernetes-admin` CN。 +此外,还会生成将 kubeadm 作为管理实体的 kubeconfig 文件并将其保存到 `/etc/kubernetes/admin.conf` 中。 +该文件包含一个带有 `Subject: O = kubeadm:cluster-admins, CN = kubernetes-admin` +的证书。`kubeadm:cluster-admins` 是一个由 kubeadm 管理的组, +它在 `kubeadm init` 期间通过使用 `super-admin.conf` 文件绑定到 +`cluster-admin` ClusterRole,不需要 RBAC。 +此 `admin.conf` 文件必须保留在控制平面节点上,并且不得与其他用户共享。 + + +在 `kubeadm init` 期间,会生成另一个 kubeconfig 文件并将其存储在 `/etc/kubernetes/super-admin.conf` 中。 +该文件包含一个带有 `Subject: O = system:masters, CN = kubernetes-super-admin` 的证书。 +`system:masters` 是一个绕过 RBAC 的超级用户组,使 `super-admin.conf` +在紧急情况下非常有用,因为 RBAC 配置错误导致集群被锁定。 +`super-admin.conf` 文件可以存储在安全位置,并且不会与其他用户共享。 + + +有关 RBAC 和内置 ClusterRoles 和组的其他信息, +请参阅[面向用户的 RBAC 角色绑定](/zh-cn/docs/reference/access-authn-authz/rbac/#user-facing-roles)。 请注意: @@ -482,8 +502,8 @@ It should also include a CN. Kubeadm uses the `kubernetes-admin` CN. Kubeadm writes static Pod manifest files for control plane components to `/etc/kubernetes/manifests`. The kubelet watches this directory for Pods to create on startup. --> -Kubeadm 将用于控制平面组件的静态 Pod 清单文件写入 `/etc/kubernetes/manifests` 目录。 -Kubelet 启动后会监视这个目录以便创建 Pod。 +kubeadm 将用于控制平面组件的静态 Pod 清单文件写入 `/etc/kubernetes/manifests` 目录。 +kubelet 启动后会监视这个目录以便创建 Pod。 静态 Pod 清单有一些共同的属性: @@ -546,7 +566,7 @@ The static Pod manifest for the API server is affected by following parameters p --> #### API 服务器 {#api-server} -API 服务器的静态 Pod 清单会受到用户提供的以下参数的影响: +API 服务器的静态 Pod 清单会受到用户提供的以下参数的影响: - 要绑定的 `apiserver-advertise-address` 和 `apiserver-bind-port`; 如果未提供,则这些值默认为机器上默认网络接口的 IP 地址和 6443 端口。 -- `service-cluster-ip-range` 给 service 使用 +- `service-cluster-ip-range` 给 Service 使用 - `--enable-admission-plugins` 设为: + - [`NamespaceLifecycle`](/zh-cn/docs/reference/access-authn-authz/admission-controllers/#namespacelifecycle) 例如,避免删除系统保留的名字空间 - [`LimitRanger`](/zh-cn/docs/reference/access-authn-authz/admission-controllers/#limitranger) 和 @@ -679,7 +700,7 @@ Other API server flags that are set unconditionally are: --> - 其他用于保护前端代理( [API 聚合层](/zh-cn/docs/concepts/extend-kubernetes/api-extension/apiserver-aggregation/)) - 通信的标志: + 通信的标志: - `--requestheader-username-headers=X-Remote-User` - `--requestheader-group-headers=X-Remote-Group` @@ -695,7 +716,7 @@ Other API server flags that are set unconditionally are: The static Pod manifest for the controller manager is affected by following parameters provided by the users: --> -控制器管理器的静态 Pod 清单受用户提供的以下参数的影响: +控制器管理器的静态 Pod 清单受用户提供的以下参数的影响: -Kubeadm 使用[引导令牌认证](/zh-cn/docs/reference/access-authn-authz/bootstrap-tokens/) +kubeadm 使用[引导令牌认证](/zh-cn/docs/reference/access-authn-authz/bootstrap-tokens/) 将新节点连接到现有集群;更多的详细信息, 请参见[设计提案](https://git.k8s.io/design-proposals-archive/cluster-lifecycle/bootstrap-discovery.md)。 @@ -982,7 +1003,7 @@ Please note that: Kubeadm ensures that users in `system:bootstrappers:kubeadm:default-node-token` group are able to access the certificate signing API. --> -Kubeadm 确保 `system:bootstrappers:kubeadm:default-node-token` 组中的用户能够访问证书签名 API。 +kubeadm 确保 `system:bootstrappers:kubeadm:default-node-token` 组中的用户能够访问证书签名 API。 -Kubeadm 确保 csrapprover 控制器自动批准引导令牌的 CSR 请求。 +kubeadm 确保 csrapprover 控制器自动批准引导令牌的 CSR 请求。 -Kubeadm 确保节点启用了证书轮换,csrapprover 控制器将自动批准节点的新证书的 CSR 请求。 +kubeadm 确保节点启用了证书轮换,csrapprover 控制器将自动批准节点的新证书的 CSR 请求。 -1. 对 `cluster-info` ConfigMap 的访问 **不受** 速率限制。 +1. 对 `cluster-info` ConfigMap 的访问**不受**速率限制。 如果你把 API 服务器暴露到外网,这可能是一个问题,也可能不是; 这里最坏的情况是 DoS 攻击,攻击者使用 kube-apiserver 能够处理的所有动态请求来为 `cluster-info` ConfigMap 提供服务。 @@ -1082,7 +1103,7 @@ Please note that: -Kubeadm 通过 API 服务器安装内部 DNS 服务器和 kube-proxy 插件。 +kubeadm 通过 API 服务器安装内部 DNS 服务器和 kube-proxy 插件。 -- CoreDNS 服务的名称为 `kube-dns`。这样做是为了防止当用户将集群 DNS 从 kube-dns +- CoreDNS Service 的名称为 `kube-dns`。这样做是为了防止当用户将集群 DNS 从 kube-dns 切换到 CoreDNS 时出现服务中断。`--config` 方法在 [这里](/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-addon) 有描述。 @@ -1341,4 +1362,3 @@ Please note that: - 临时身份验证解析到 `system:bootstrappers:kubeadm:default-node-token` 组的一个用户成员, 该成员在 `kubeadm init` 过程中被授予对 CSR API 的访问权 - 根据 `kubeadm init` 过程的配置,自动 CSR 审批由 csrapprover 控制器管理 -