Hi~朋友,关注置顶防止错过消息
Service的作用
用来降Pod集合在网络上公开出去,如果流量来自外部可能还需要配合Ingress。Service控制器会不断扫描与其选择符相匹配的集合,然后对Service的EndpointSlice集合进行更新。
EndpointSlice
EndpointSlice的名称在一个命名空间下必须唯一,通过kubernetes.io/service-name标签来指定EndpointSlice链接到哪个Service上。
有选择符和无选择符Service的区别
有选择符的运算符会自动创建对应的EndpointSlice,无选择运算符的Service不会自动创建EndpointSlice,需要手动创建,其中 type为ExternalName的可以不用创建EndpointSlice 。
关于有选择符的运算符的Service的工作原理可以参考Kubernetes Service工作原理分析
Service的类型
- ClusterIp:只能在集群内部访问,默认值
- NodePort:通过Node的端口进行访问
- LoadBalancer:依赖于云平台提供的负载均衡器
- ExternalName:将服务映射到externalName字段的内容
关于负载均衡器也可以利用云供应商提供的内部负载均衡器,需要通过对Service定义注解来实现,每家供应商的该字段不一样。
什么是无头服务(Headless Service)
无头服务是spec.clusterIP被指定为None的Service。
带选择运算符的无头服务,会创建EndpointSlice对象,并且修改 DNS配置返回A记录,这些A记录指向Service的后端Pod集合。
对于没有选择运算符的无头服务,port和targetPort必须匹配,不会创建EndpointSlice对象,但是会执行以下操作:
- type为ExternalName查找配置其DNS CNAME记录
- 其他类型的Service,针对Service就绪端点的IP地址查找和配置DNS A记录