服务
公开集群中运行的应用程序,使其位于单个面向外部的端点之后,即使工作负载分散在多个后端。
集群中的每个 Pod
都获得其自身的唯一集群范围 IP 地址(每个 IP 地址族一个地址)。这意味着您无需显式创建 Pod
之间的链接,并且几乎不需要处理将容器端口映射到主机端口。
这创建了一个干净的、向后兼容的模型,其中 Pod
可以从端口分配、命名、服务发现、负载均衡、应用程序配置和迁移的角度来看,被视为 VM 或物理主机。
Kubernetes 对任何网络实现施加以下基本要求(不包括任何故意的网络分段策略)
Pod
的平台(例如 Linux),当 pod 连接到节点的主机网络时,它们仍然可以与所有节点上的所有 pod 进行通信,而无需 NAT。此模型不仅总体上更简单,而且它主要与 Kubernetes 启用将应用程序从 VM 轻松移植到容器的愿望兼容。如果您的作业以前在 VM 中运行,那么您的 VM 具有一个 IP 并可以与项目中的其他 VM 进行通信。这是相同的基本模型。
Kubernetes IP 地址存在于 Pod
范围内 - Pod
内部的容器共享其网络命名空间 - 包括它们的 IP 地址和 MAC 地址。这意味着 Pod
内部的容器都可以通过 localhost
访问彼此的端口。这也意味着 Pod
内部的容器必须协调端口使用,但这与 VM 中的进程没有什么不同。这称为“每个 pod 一个 IP”模型。
如何实现这一点是正在使用的特定容器运行时的细节。
可以请求 节点
本身的端口,这些端口转发到您的 Pod
(称为主机端口),但这是一种非常利基的操作。如何实现该转发也是容器运行时的细节。Pod
本身对主机端口的存在或不存在一无所知。
Kubernetes 网络解决了四个问题
Pod
内部的容器 使用网络通过环回进行通信。服务
API 允许您 公开在 Pod 中运行的应用程序 以便从集群外部访问。使用服务连接应用程序
教程将指导您了解服务和 Kubernetes 网络,并提供一个动手操作示例。
集群网络
解释了如何为您的集群设置网络,并概述了所涉及的技术。
公开集群中运行的应用程序,使其位于单个面向外部的端点之后,即使工作负载分散在多个后端。
使用了解 web 概念(如 URI、主机名、路径等)的协议感知配置机制,使您的 HTTP(或 HTTPS)网络服务可用。入口的概念允许您根据通过 Kubernetes API 定义的规则将流量映射到不同的后端。
网关 API 是一个 API 类族,提供动态基础设施配置和高级流量路由。
EndpointSlice API 是 Kubernetes 用于让您的服务扩展以处理大量后端以及允许集群有效地更新其健康后端列表的机制。
如果您想在 IP 地址或端口级别控制流量流(OSI 第 3 层或第 4 层),则 NetworkPolicy 允许您指定集群内以及 Pod 与外部世界之间流量流的规则。您的集群必须使用支持 NetworkPolicy 强制的网络插件。
您的工作负载可以使用 DNS 发现集群内的服务;本页面解释了该工作原理。
Kubernetes 允许您配置单栈 IPv4 网络、单栈 IPv6 网络或双栈网络(两个网络族都处于活动状态)。本页面解释了如何实现。
拓扑感知路由提供了一种机制,有助于将网络流量保留在它起源的区域内。优先考虑集群中 Pod 之间的相同区域流量有助于提高可靠性、性能(网络延迟和吞吐量)或降低成本。
如果您的集群中的两个 Pod 想要进行通信,并且这两个 Pod 实际上都运行在同一个节点上,请使用服务内部流量策略将网络流量保留在该节点内。避免通过集群网络进行往返旅程有助于提高可靠性、性能(网络延迟和吞吐量)或降低成本。