服务、负载均衡和网络

Kubernetes 网络背后的概念和资源。

Kubernetes 网络模型

集群中的每个 Pod 都会获得其唯一的集群范围 IP 地址(每个 IP 地址系列一个地址)。这意味着您无需在 Pod 之间显式创建链接,并且几乎不需要处理将容器端口映射到主机端口。
这创建了一个干净、向后兼容的模型,其中 Pod 可以从端口分配、命名、服务发现、负载均衡、应用程序配置和迁移的角度来看待,就像虚拟机或物理主机一样。

Kubernetes 对任何网络实现都施加了以下基本要求(除非有任何有意为之的网络分段策略):

  • Pod 可以与任何其他 节点 上的所有其他 Pod 通信,而无需 NAT
  • 节点上的代理(例如系统守护程序、kubelet)可以与该节点上的所有 Pod 通信

这种模式不仅总体上不那么复杂,而且与 Kubernetes 希望实现将应用程序从虚拟机轻松移植到容器的愿望基本兼容。如果您的作业以前在虚拟机中运行,则您的虚拟机有一个 IP 地址,并且可以与您项目中的其他虚拟机通信。这是相同的基本模型。

Kubernetes IP 地址存在于 Pod 范围内 - Pod 内的容器共享其网络命名空间 - 包括其 IP 地址和 MAC 地址。这意味着 Pod 内的容器都可以通过 localhost 访问彼此的端口。这也意味着 Pod 内的容器必须协调端口使用,但这与虚拟机中的进程没有什么不同。这被称为“每个 Pod 一个 IP”模型。

如何实现这一点是所使用的特定容器运行时的细节。

可以请求 节点 本身上的端口,这些端口转发到您的 Pod(称为主机端口),但这是一种非常特殊的操作。如何实现该转发也是容器运行时的细节。Pod 本身并不知道主机端口的存在与否。

Kubernetes 网络解决了四个问题:

使用服务连接应用程序 教程让您通过一个动手示例了解服务和 Kubernetes 网络。

集群网络 解释了如何为您的集群设置网络,并概述了所涉及的技术。


服务

将集群中运行的应用程序公开在一个面向外部的端点后面,即使工作负载分散在多个后端也是如此。

Ingress

使用协议感知配置机制使您的 HTTP(或 HTTPS)网络服务可用,该机制了解 URI、主机名、路径等 Web 概念。Ingress 概念允许您根据您通过 Kubernetes API 定义的规则将流量映射到不同的后端。

Ingress 控制器

为了使 Ingress 在您的集群中工作,必须运行一个 *ingress 控制器*。您需要选择至少一个 ingress 控制器,并确保它在您的集群中设置好了。此页面列出了您可以部署的常见 ingress 控制器。

网关 API

网关 API 是一系列 API 类型,提供动态基础设施配置和高级流量路由。

EndpointSlices

EndpointSlice API 是 Kubernetes 用来让您的服务扩展以处理大量后端的机制,并允许集群有效地更新其健康后端列表。

网络策略

如果您想在 IP 地址或端口级别(OSI 第 3 层或第 4 层)控制流量,NetworkPolicy 允许您为集群内的流量以及 Pod 与外部世界之间的流量指定规则。您的集群必须使用支持 NetworkPolicy 实施的网络插件。

服务和 Pod 的 DNS

您的工作负载可以使用 DNS 发现集群中的服务;此页面解释了它是如何工作的。

IPv4/IPv6 双栈

Kubernetes 允许您配置单栈 IPv4 网络、单栈 IPv6 网络或同时激活两个网络系列的双栈网络。此页面解释了如何做到这一点。

拓扑感知路由

*拓扑感知路由* 提供了一种机制,帮助将网络流量保持在其 originating 的区域内。优先考虑集群中 Pod 之间的同区域流量有助于提高可靠性、性能(网络延迟和吞吐量)或降低成本。

Windows 上的网络

服务 ClusterIP 分配

服务内部流量策略

如果集群中的两个 Pod 想要通信,并且两个 Pod 实际上都在同一个节点上运行,则使用 *服务内部流量策略* 将网络流量保持在该节点内。避免通过集群网络进行往返可以帮助提高可靠性、性能(网络延迟和吞吐量)或降低成本。

上次修改时间:2024 年 7 月 4 日下午 4:17 PST:nit: add new line (320e29ee0e)