K8S headless service服务详解
一、headless和ClusterIP的区别
CoreDNS的作用:在K8S里,我们想要通过name来访问服务的方式就是在Deployment上面添加一层Service,这样我们就可以通过Service name来访问服务了,那其中的原理就是和CoreDNS有关,它将Service name解析成Cluster IP,
这样我们访问Cluster IP的时候就通过Cluster IP作负载均衡,把流量分布到各个POD上面
K8s中资源的全局FQDN格式:
Service_NAME.NameSpace_NAME.Domain.LTD.
Domain.LTD.=svc.cluster.local. #这是默认k8s集群的域名。
1、clusterip举例
ClusterIP
的原理:一个Service
可能对应多个EndPoint(Pod)
,client
访问的是Cluster IP
,通过iptables
规则转到Real Server
,从而达到负载均衡的效果
备注: 从上面的结果中我们可以看到虽然Service
有2个endpoint
,但是dns
查询时只会返回Service
的地址。
具体client
访问的是哪个Real Server,是由
iptables
来决定的
2、headless举例
解释:dns
查询会如实的返回2个真实的endpoint
headless使用场景
第一种:自主选择权,有时候client
想自己来决定使用哪个Real Server
,可以通过查询DNS
来获取Real Server
的信息。
第二种:Headless Service
的对应的每一个Endpoints
,即每一个Pod
,都会有对应的DNS
域名;这样Pod
之间就能互相访问,集群也能单独访问pod