Kubernetes 中服务暴露的主要方式包括:
- ClusterIP:默认类型,提供集群内部访问的虚拟 IP,适用于内部服务通信。
- NodePort:在集群所有节点上开放固定端口(30000-32767),通过节点 IP + 端口实现外部访问。
- LoadBalancer:依赖云厂商的负载均衡器(如 AWS ELB、GCP LB),自动分配外部 IP,适用于公有云环境。
- ExternalName:通过 DNS CNAME 记录映射到外部服务,用于集成集群外服务。
- Ingress:基于 HTTP/HTTPS 的七层路由(需配合 Ingress Controller,如 Nginx、Traefik),支持域名、路径规则及 SSL 终止,可集中暴露多个服务。
- Headless Service:无 ClusterIP,直接返回 Pod IP,适用于有状态应用(如数据库)的直接 Pod 访问。
- External IPs:手动指定服务的
externalIPs字段绑定特定 IP,需自行维护路由。 - Gateway API(新兴):下一代流量管理标准,支持更细粒度的路由策略,逐步替代 Ingress。
场景选择:
- 内部服务:ClusterIP
- 简单外部访问:NodePort / LoadBalancer
- 复杂路由及多服务暴露:Ingress/Gateway API
- 混合云/本地环境:MetalLB(实现 LoadBalancer)或 Ingress + NodePort