| NodePort |
在每个节点上打开一个静态端口,将流量转发到 Service。 |
测试、开发环境,对外部流量要求不高的应用。 |
简单易用 |
端口范围有限,需要管理节点 IP 和端口。 |
| HostPort |
将 Pod 的端口直接映射到宿主机节点的端口。 |
特殊的调试需求,对性能要求极高且 Pod 数量很少的应用。 |
性能好,没有额外的网络跳转。 |
端口冲突可能性高,难以扩展,不推荐生产环境使用。 |
| LoadBalancer |
使用云提供商的负载均衡器,将外部流量分发到 Service。 |
生产环境,需要对外提供高可用服务的应用。 |
高可用、可扩展、易于管理。 |
依赖云提供商,可能产生额外的费用。 |
| Ingress |
使用 Ingress Controller 反向代理外部流量到 Service。 |
生产环境,需要对流量进行精细控制的应用。 |
灵活的路由规则、TLS/SSL 终止、流量控制等高级功能。 |
需要部署和配置 Ingress Controller。 |
| ExternalName |
将 Service 映射到外部域名,通过 DNS 解析访问外部服务。 |
访问集群外部的服务,例如数据库或遗留系统。 |
简单地将 Kubernetes 服务与外部服务集成。 |
不提供负载均衡或其他高级功能。 |
| Port Forwarding |
将本地端口转发到 Pod 或 Service 的端口。 |
调试或临时访问。 |
方便调试 |
临时访问方式,不适合生产环境。 |
| SSH 隧道 |
通过 SSH 隧道访问集群内部的服务。 |
调试或临时访问,尤其是在没有其他访问方式的情况下。 |
在某些限制环境下有用 |
安全性依赖于 SSH 配置, 不适合生产环境长期使用。 |
| Service Mesh |
提供更高级的流量管理、安全性和可观测性。 |
复杂的微服务架构,需要精细的流量控制、安全策略和监控。 |
强大的流量控制能力,例如灰度发布、A/B 测试、熔断、限流等;丰富的监控和日志功能;增强服务之间的安全性。 |
配置和管理复杂,需要学习新的技术栈;会增加一定的资源开销。 |
| Headless Service + External-DNS |
Headless Service 不分配 ClusterIP,配合 External-DNS 可以将 Pod 的 IP 动态注册到外部 DNS 服务。 |
需要客户端直接访问 Pod,例如有状态应用;需要将 Pod IP 暴露给外部服务。 |
灵活,可以实现自定义的负载均衡和服务发现。 |
需要配置 External-DNS,相对复杂。 |
| externalIPs |
允许你将 Service 暴露到指定的外部 IP 地址。 |
需要使用特定的 IP 地址暴露服务,例如已经存在的公网 IP 地址。 |
可以使用特定的 IP 地址暴露服务。 |
需要手动管理 IP 地址,可能会存在安全风险。 |