服务(Service)
将在集群中运行的应用通过同一个面向外界的端点公开出去,即使工作负载分散于多个后端也完全可行。
Kubernetes v1.32 版本的文档已不再维护。你现在看到的版本来自于一份静态的快照。如需查阅最新文档,请点击 最新版本。
Kubernetes 网络模型由几个部分构成:
集群中的每个 Pod 都会获得自己的、独一无二的集群范围 IP 地址。
localhost
进行通信。Pod 网络(也称为集群网络)处理 Pod 之间的通信。它确保(除非故意进行网络分段):
Gateway API (或其前身 Ingress 使得集群外部的客户端能够访问 Service。
type: LoadBalancer
可以使用一种更简单但可配置性较低的集群 Ingress 机制。NetworkPolicy 是一个内置的 Kubernetes API,允许你控制 Pod 之间的流量或 Pod 与外部世界之间的流量。
在早期的容器系统中,不同主机上的容器之间没有自动连通, 因此通常需要显式创建容器之间的链路,或将容器端口映射到主机端口,以便其他主机上的容器能够访问。 在 Kubernetes 中并不需要如此操作;在 Kubernetes 的网络模型中, 从端口分配、命名、服务发现、负载均衡、应用配置和迁移的角度来看,Pod 可以被视作虚拟机或物理主机。
这个模型只有少部分是由 Kubernetes 自身实现的。 对于其他部分,Kubernetes 定义 API,但相应的功能由外部组件提供,其中一些是可选的:
Pod 网络本身由 Pod 网络实现管理。 在 Linux 上,大多数容器运行时使用容器网络接口 (CNI) 与 Pod 网络实现进行交互,因此这些实现通常被称为 CNI 插件。
Kubernetes 提供了一个默认的服务代理实现,称为 kube-proxy, 但某些 Pod 网络实现使用其自己的服务代理,以便与实现的其余组件集成得更紧密。
NetworkPolicy 通常也由 Pod 网络实现提供支持。 (某些更简单的 Pod 网络实现不支持 NetworkPolicy,或者管理员可能会选择在不支持 NetworkPolicy 的情况下配置 Pod 网络。在这些情况下,API 仍然存在,但将没有效果。)
Gateway API 的实现有很多, 其中一些特定于某些云环境,还有一些更专注于“裸金属”环境,而其他一些则更加通用。
使用 Service 连接到应用教程通过一个实际的示例让你了解 Service 和 Kubernetes 如何联网。
使用一种能感知协议配置的机制来解析 URI、主机名称、路径等 Web 概念, 让你的 HTTP(或 HTTPS)网络服务可被访问。 Ingress 概念允许你通过 Kubernetes API 定义的规则将流量映射到不同后端。
为了让 Ingress 在你的集群中工作, 必须有一个 Ingress 控制器正在运行。你需要选择至少一个 Ingress 控制器并确保其已被部署到你的集群中。 本页列出了你可以部署的常见 Ingress 控制器。