From b071aa1e0b2334e25bb4d97aaa80c09f7ec2ec8b Mon Sep 17 00:00:00 2001 From: Qiming Teng Date: Sun, 26 Jun 2022 14:04:35 +0800 Subject: [PATCH] [zh-cn] Resync control-plane node communication page --- .../control-plane-node-communication.md | 141 ++++++++++++------ 1 file changed, 94 insertions(+), 47 deletions(-) diff --git a/content/zh-cn/docs/concepts/architecture/control-plane-node-communication.md b/content/zh-cn/docs/concepts/architecture/control-plane-node-communication.md index 57f05179ed..e8d99338ff 100644 --- a/content/zh-cn/docs/concepts/architecture/control-plane-node-communication.md +++ b/content/zh-cn/docs/concepts/architecture/control-plane-node-communication.md @@ -1,11 +1,11 @@ --- -title: 控制面到节点通信 +title: 节点与控制面之间的通信 content_type: concept weight: 20 --- 本文列举控制面节点(确切说是 API 服务器)和 Kubernetes 集群之间的通信路径。 -目的是为了让用户能够自定义他们的安装,以实现对网络配置的加固,使得集群能够在不可信的网络上 -(或者在一个云服务商完全公开的 IP 上)运行。 +目的是为了让用户能够自定义他们的安装,以实现对网络配置的加固, +使得集群能够在不可信的网络上(或者在一个云服务商完全公开的 IP 上)运行。 + -## 节点到控制面 +## 节点到控制面 {#node-to-control-plane} Kubernetes 采用的是中心辐射型(Hub-and-Spoke)API 模式。 -所有从集群(或所运行的 Pods)发出的 API 调用都终止于 API 服务器。 +所有从节点(或运行于其上的 Pod)发出的 API 调用都终止于 API 服务器。 其它控制面组件都没有被设计为可暴露远程服务。 API 服务器被配置为在一个安全的 HTTPS 端口(通常为 443)上监听远程连接请求, 并启用一种或多种形式的客户端[身份认证](/zh-cn/docs/reference/access-authn-authz/authentication/)机制。 一种或多种客户端[鉴权机制](/zh-cn/docs/reference/access-authn-authz/authorization/)应该被启用, 特别是在允许使用[匿名请求](/zh-cn/docs/reference/access-authn-authz/authentication/#anonymous-requests) -或[服务账号令牌](/zh-cn/docs/reference/access-authn-authz/authentication/#service-account-tokens)的时候。 +或[服务账户令牌](/zh-cn/docs/reference/access-authn-authz/authentication/#service-account-tokens)的时候。 应该使用集群的公共根证书开通节点,这样它们就能够基于有效的客户端凭据安全地连接 API 服务器。 一种好的方法是以客户端证书的形式将客户端凭据提供给 kubelet。 @@ -47,20 +63,25 @@ Nodes should be provisioned with the public root certificate for the cluster suc 以了解如何自动提供 kubelet 客户端证书。 想要连接到 API 服务器的 Pod 可以使用服务账号安全地进行连接。 当 Pod 被实例化时,Kubernetes 自动把公共根证书和一个有效的持有者令牌注入到 Pod 里。 -`kubernetes` 服务(位于 `default` 名字空间中)配置了一个虚拟 IP 地址,用于(通过 kube-proxy)转发 -请求到 API 服务器的 HTTPS 末端。 +`kubernetes` 服务(位于 `default` 名字空间中)配置了一个虚拟 IP 地址, +用于(通过 kube-proxy)转发请求到 API 服务器的 HTTPS 末端。 控制面组件也通过安全端口与集群的 API 服务器通信。 这样,从集群节点和节点上运行的 Pod 到控制面的连接的缺省操作模式即是安全的, 能够在不可信的网络或公网上运行。 @@ -68,26 +89,31 @@ As a result, the default operating mode for connections from the nodes and pods -## 控制面到节点 +## 控制面到节点 {#control-plane-to-node} 从控制面(API 服务器)到节点有两种主要的通信路径。 第一种是从 API 服务器到集群中每个节点上运行的 kubelet 进程。 第二种是从 API 服务器通过它的代理功能连接到任何节点、Pod 或者服务。 -### API 服务器到 kubelet +### API 服务器到 kubelet {#api-server-to-kubelet} 从 API 服务器到 kubelet 的连接用于: @@ -100,15 +126,18 @@ These connections terminate at the kubelet's HTTPS endpoint. By default, the api 在非受信网络或公开网络上运行也是 **不安全的**。 -为了对这个连接进行认证,使用 `--kubelet-certificate-authority` 标志给 API -服务器提供一个根证书包,用于 kubelet 的服务证书。 +为了对这个连接进行认证,使用 `--kubelet-certificate-authority` 标志给 +API 服务器提供一个根证书包,用于 kubelet 的服务证书。 如果无法实现这点,又要求避免在非受信网络或公共网络上进行连接,可在 API 服务器和 kubelet 之间使用 [SSH 隧道](#ssh-tunnels)。 @@ -118,11 +147,16 @@ kubelet 之间使用 [SSH 隧道](#ssh-tunnels)。 来保护 kubelet API。 -### API 服务器到节点、Pod 和服务 +### API 服务器到节点、Pod 和服务 {#api-server-to-nodes-pods-and-services} 从 API 服务器到节点、Pod 或服务的连接默认为纯 HTTP 方式,因此既没有认证,也没有加密。 这些连接可通过给 API URL 中的节点、Pod 或服务名称添加前缀 `https:` 来运行在安全的 HTTPS 连接上。 @@ -133,38 +167,51 @@ The connections from the apiserver to a node, pod, or service default to plain H ### SSH 隧道 {#ssh-tunnels} -Kubernetes 支持使用 SSH 隧道来保护从控制面到节点的通信路径。在这种配置下,API -服务器建立一个到集群中各节点的 SSH 隧道(连接到在 22 端口监听的 SSH 服务) +Kubernetes 支持使用 SSH 隧道来保护从控制面到节点的通信路径。在这种配置下, +API 服务器建立一个到集群中各节点的 SSH 隧道(连接到在 22 端口监听的 SSH 服务器) 并通过这个隧道传输所有到 kubelet、节点、Pod 或服务的请求。 这一隧道保证通信不会被暴露到集群节点所运行的网络之外。 +{{< note >}} + SSH 隧道目前已被废弃。除非你了解个中细节,否则不应使用。 Konnectivity 服务是对此通信通道的替代品。 +{{< /note >}} -### Konnectivity 服务 +### Konnectivity 服务 {#konnectivity-service} {{< feature-state for_k8s_version="v1.18" state="beta" >}} + 作为 SSH 隧道的替代方案,Konnectivity 服务提供 TCP 层的代理,以便支持从控制面到集群的通信。 -Konnectivity 服务包含两个部分:Konnectivity 服务器和 Konnectivity 代理,分别运行在 -控制面网络和节点网络中。Konnectivity 代理建立并维持到 Konnectivity 服务器的网络连接。 +Konnectivity 服务包含两个部分:Konnectivity 服务器和 Konnectivity 代理, +分别运行在控制面网络和节点网络中。 +Konnectivity 代理建立并维持到 Konnectivity 服务器的网络连接。 启用 Konnectivity 服务之后,所有控制面到节点的通信都通过这些连接传输。 请浏览 [Konnectivity 服务任务](/zh-cn/docs/tasks/extend-kubernetes/setup-konnectivity/)