节点与控制平面之间的通信

本文档列出了API 服务器与 Kubernetes 集群之间的通信路径。目的是允许用户定制其安装以强化网络配置,使得集群可以在不受信任的网络上运行(或运行在云提供商的完全公共 IP 上)。

节点到控制平面

Kubernetes 具有一种“中心辐射”式 API 模式。所有来自节点(或其运行的 Pod)的 API 使用都终止于 API 服务器。其他控制平面组件均未设计为暴露远程服务。API 服务器被配置为在一个安全的 HTTPS 端口(通常是 443)上监听远程连接,并启用了一种或多种客户端身份认证形式。应该启用一种或多种授权形式,特别是当允许匿名请求ServiceAccount 令牌时。

节点应该配置有集群的公共根证书,以便它们可以与有效的客户端凭据一起安全地连接到 API 服务器。一种好的方法是提供给 kubelet 的客户端凭据采用客户端证书的形式。关于 kubelet 客户端证书的自动化配置,请参见kubelet TLS 引导

希望连接到 API 服务器的Pod可以利用 ServiceAccount 来安全地进行,这样 Kubernetes 在 Pod 实例化时会自动将公共根证书和有效的持有者令牌注入到 Pod 中。kubernetes Service(在 default 命名空间中)被配置了一个虚拟 IP 地址,该地址(通过 kube-proxy)被重定向到 API 服务器上的 HTTPS 端点。

控制平面组件也通过安全端口与 API 服务器通信。

因此,从节点及其上运行的 Pod 到控制平面的连接的默认操作模式是默认安全的,并且可以在不受信任和/或公共网络上运行。

控制平面到节点

从控制平面(API 服务器)到节点有两个主要的通信路径。第一个是 API 服务器到在集群中每个节点上运行的kubelet进程。第二个是通过 API 服务器的*代理*功能从 API 服务器到任何节点、Pod 或 Service。

API 服务器到 kubelet

从 API 服务器到 kubelet 的连接用于:

  • 获取 Pod 的日志。
  • 连接(通常通过 kubectl)到运行中的 Pod。
  • 提供 kubelet 的端口转发功能。

这些连接终止于 kubelet 的 HTTPS 端点。默认情况下,API 服务器不验证 kubelet 的服务证书,这使得连接容易受到中间人攻击,并且在不受信任和/或公共网络上运行**不安全**。

要验证此连接,请使用 --kubelet-certificate-authority 标志为 API 服务器提供一个根证书包,用于验证 kubelet 的服务证书。

如果不可能,如果需要避免通过不受信任或公共网络连接,请在 API 服务器和 kubelet 之间使用SSH 隧道

最后,应启用Kubelet 身份认证和/或授权以保护 kubelet API。

API 服务器到节点、Pod 和 Service

从 API 服务器到节点、Pod 或 Service 的连接默认是纯 HTTP 连接,因此既未进行身份认证也未加密。通过在 API URL 中的节点、Pod 或 Service 名称前加上 https: 前缀,可以在安全的 HTTPS 连接上运行它们,但它们不会验证 HTTPS 端点提供的证书,也不会提供客户端凭据。因此,虽然连接会被加密,但它不提供任何完整性保证。这些连接目前在不受信任或公共网络上运行**不安全**。

SSH 隧道

Kubernetes 支持SSH 隧道以保护控制平面到节点的通信路径。在此配置中,API 服务器会向集群中的每个节点发起 SSH 隧道连接(连接到在端口 22 上监听的 SSH 服务器),并将所有发往 kubelet、节点、Pod 或 Service 的流量通过隧道传输。此隧道确保流量不会暴露在节点运行的网络之外。

Konnectivity 服务

功能状态: Kubernetes v1.18 [beta]

作为 SSH 隧道的替代方案,Konnectivity 服务为控制平面到集群的通信提供了 TCP 级别的代理。Konnectivity 服务包含两部分:控制平面网络中的 Konnectivity 服务器以及节点网络中的 Konnectivity 代理。Konnectivity 代理会向 Konnectivity 服务器发起并维护网络连接。启用 Konnectivity 服务后,所有控制平面到节点的流量都将通过这些连接进行。

请按照Konnectivity 服务任务设置集群中的 Konnectivity 服务。

接下来

上次修改时间:2024年9月1日太平洋标准时间 1:54 AM:修复从 "overview/components/#..." 到 "architecture/#..." 的损坏链接 (#47724) (7e64c2db82)