服务、负载均衡和网络

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

Kubernetes 网络模型

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

Kubernetes 对任何网络实现施加以下基本要求(不包括任何故意的网络分段策略)

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

此模型不仅总体上更简单,而且它主要与 Kubernetes 启用将应用程序从 VM 轻松移植到容器的愿望兼容。如果您的作业以前在 VM 中运行,那么您的 VM 具有一个 IP 并可以与项目中的其他 VM 进行通信。这是相同的基本模型。

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

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

可以请求 节点 本身的端口,这些端口转发到您的 Pod(称为主机端口),但这是一种非常利基的操作。如何实现该转发也是容器运行时的细节。Pod 本身对主机端口的存在或不存在一无所知。

Kubernetes 网络解决了四个问题

使用服务连接应用程序 教程将指导您了解服务和 Kubernetes 网络,并提供一个动手操作示例。

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


服务

公开集群中运行的应用程序,使其位于单个面向外部的端点之后,即使工作负载分散在多个后端。

入口

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

入口控制器

为了使 入口 在您的集群中工作,必须运行一个入口控制器。您需要选择至少一个入口控制器,并确保它已在您的集群中设置。本页面列出了您可以部署的常用入口控制器。

网关 API

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

端点切片

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

网络策略

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

服务和 Pod 的 DNS

您的工作负载可以使用 DNS 发现集群内的服务;本页面解释了该工作原理。

IPv4/IPv6 双栈

Kubernetes 允许您配置单栈 IPv4 网络、单栈 IPv6 网络或双栈网络(两个网络族都处于活动状态)。本页面解释了如何实现。

拓扑感知路由

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

Windows 上的网络

服务 ClusterIP 分配

服务内部流量策略

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

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