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