Pod地址可变性
Pod销毁重建后,其IP地址也会变化,例如deployment工作负载升级时,新建的pod地址会改变。
Kubernetes的Service可提供一个固定的IP地址(来自订购集群时配置的服务网段)和Service域名,结合标签选择器,对一组pod做负载均衡。客户端可通过该地址或域名访问IP地址可变的pod。
如下图所示,nginx部署的前端服务,通过service地址访问后端服务:
Service类型
Service支持如下类型:
- ClusterIP:Service默认类型,用于集群内应用间访问,客户端可通过ClusterIP或内部Service域名访问后端Pod;
- NodePort:用于集群外部访问集群内服务,将Service通过集群节点固定端口暴露,集群外部可通过任一集群节点IP和该固定端口来访问Serivce;
- LoadBalancer:用于集群外部访问集群内服务,通过LoadBalancer实例访问NodePort或直通Pod,相对于NodePort方式,有更高的可用性和性能;
- Headless:该类Service没有IP地址,可用于DNS负载均衡场景,客户端访问Service域名时会通过DNS返回该Service所有后端Pod的IP地址;
- ExternalName:将集群外部域名映射到集群内部Service上,使得集群内可通过Service名访问外部域名。
LoadBalancer类型Service
创建Service时,服务类型选择“负载均衡”,访问方式可以选择私网访问或公网访问,并在负载均衡列表中选择一个负载均衡实例。
使用已有负载均衡时,需要提前到负载均衡控制台创建。多个Service可以同时复用一个负载均衡,但当存在相同监听端口时,旧的监听端口会被覆盖,建议在复用已有负载均衡前需留意监听端口是否冲突,避免预期外的端口覆盖。