服务
将运行在集群中的应用程序暴露在单个对外端点后,即使工作负载分布在多个后端上,也能使其可用。
Kubernetes 网络模型由以下几个部分组成:
集群中的每个Pod都有自己独特的集群范围 IP 地址。
Pod网络(也称为集群网络)处理Pod之间的通信。它确保(排除有意分割网络的情况):
所有 Pod 都可以与其他所有 Pod 通信,无论它们是在同一节点上还是在不同节点上。Pod 可以直接相互通信,无需使用代理或地址转换 (NAT)。
在 Windows 上,此规则不适用于主机网络 Pod。
节点上的代理(例如系统守护进程或 kubelet)可以与该节点上的所有 Pod 通信。
Service API 允许你为由一个或多个后端 Pod 实现的服务提供一个稳定的(长期存在的)IP 地址或主机名,其中组成服务的单个 Pod 可能会随时间而变化。
Kubernetes 自动管理 EndpointSlice 对象,以提供当前支持 Service 的 Pod 信息。
服务代理实现监视 Service 和 EndpointSlice 对象的集合,并通过使用操作系统或云提供商 API 来拦截或重写数据包,从而编程数据平面以将服务流量路由到其后端。
Gateway API(或其前身Ingress)允许您让集群外部的客户端访问服务。
NetworkPolicy是 Kubernetes 内置的 API,允许您控制 Pod 之间或 Pod 与外部世界之间的流量。
在较旧的容器系统中,不同主机上的容器之间没有自动连接,因此通常需要显式地在容器之间创建链接,或者将容器端口映射到主机端口以使其可被其他主机上的容器访问。这在 Kubernetes 中不需要;Kubernetes 的模型是,从端口分配、命名、服务发现、负载均衡、应用程序配置和迁移的角度来看,Pod 可以像虚拟机或物理主机一样处理。
此模型中只有少数部分由 Kubernetes 本身实现。对于其他部分,Kubernetes 定义了 API,但相应的功能由外部组件提供,其中一些是可选的。
Pod 网络命名空间设置由实现容器运行时接口的系统级软件处理。
Pod 网络本身由Pod 网络实现管理。在 Linux 上,大多数容器运行时使用容器网络接口 (CNI)与 Pod 网络实现进行交互,因此这些实现通常被称为_CNI 插件_。
Kubernetes 提供了一个服务代理的默认实现,称为kube-proxy,但一些 Pod 网络实现则使用自己的服务代理,该代理与实现的其他部分更紧密集成。
NetworkPolicy 通常也由 Pod 网络实现来实施。(一些更简单的 Pod 网络实现不支持 NetworkPolicy,或者管理员可能会选择在没有 NetworkPolicy 支持的情况下配置 Pod 网络。在这些情况下,API 仍然存在,但不会产生任何效果。)
Gateway API有许多实现,其中一些特定于特定的云环境,一些更侧重于“裸机”环境,还有一些更通用。
通过使用服务连接应用程序教程,您可以通过动手示例了解服务和 Kubernetes 网络。
集群网络解释了如何为您的集群设置网络,并提供了所涉及技术的概述。
将运行在集群中的应用程序暴露在单个对外端点后,即使工作负载分布在多个后端上,也能使其可用。
使用协议感知的配置机制使您的 HTTP(或 HTTPS)网络服务可用,该机制理解 URI、主机名、路径等 Web 概念。Ingress 概念允许您根据通过 Kubernetes API 定义的规则将流量映射到不同的后端。
为了让Ingress在您的集群中工作,必须有一个_Ingress 控制器_正在运行。您需要至少选择一个 Ingress 控制器并确保其已在您的集群中设置。此页面列出了您可以部署的常见 Ingress 控制器。
Gateway API 是一系列 API 种类,提供动态基础设施供应和高级流量路由。
EndpointSlice API 是 Kubernetes 用来让您的 Service 扩展以处理大量后端,并允许集群高效更新其健康后端列表的机制。
如果你想在 IP 地址或端口级别(OSI 第 3 层或第 4 层)控制流量,NetworkPolicy 允许你指定集群内部以及 Pod 与外部世界之间的流量规则。你的集群必须使用支持 NetworkPolicy 强制执行的网络插件。
您的工作负载可以使用 DNS 在集群中发现服务;本页解释了其工作原理。
Kubernetes 允许您配置单栈 IPv4 网络、单栈 IPv6 网络或同时激活两种网络家族的双栈网络。本页解释了如何操作。
“拓扑感知路由”提供了一种机制,有助于将网络流量保留在其来源区域内。优先选择集群中 Pod 之间的同区域流量有助于提高可靠性、性能(网络延迟和吞吐量)或降低成本。
如果集群中的两个 Pod 需要通信,并且它们都运行在同一节点上,请使用_服务内部流量策略_将网络流量保留在该节点内。避免通过集群网络进行往返有助于提高可靠性、性能(网络延迟和吞吐量)或降低成本。