service 内部通过 ClusterIP 通信。ClusterIP 经常也是不固定的。
DNS服务监视Kubernetes API,为每一个Service创建DNS记录用于域名解析。
ClusterIP A记录格式:
<service-name>.<namespace-name>.svc.cluster.local
示例:my-svc.my-namespace.svc.cluster.local
[root@centos7 demo]# kubectl get svc -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 10d <none>
web NodePort 10.0.0.19 <none> 80:32045/TCP 47h app=web
web-1 ClusterIP 10.0.0.151 <none> 80/TCP 47h app=web
[root@centos7 demo]#
[root@centos7 demo]# kubectl run -it --image=busybox:1.28.4 --rm --restart=Never sh
If you don't see a command prompt, try pressing enter.
/ #
/ # nslookup kubernetes
Server: 10.0.0.2
Address 1: 10.0.0.2 kube-dns.kube-system.svc.cluster.local
Name: kubernetes
Address 1: 10.0.0.1 kubernetes.default.svc.cluster.local
/ #
/ #
/ # nslookup web-1
Server: 10.0.0.2
Address 1: 10.0.0.2 kube-dns.kube-system.svc.cluster.local
Name: web-1
Address 1: 10.0.0.151 web-1.default.svc.cluster.local
/ #
/ #
注释:
代码在处理的时候,通过CLUSTER-IP进行数据业务处理,但是如果服务down了,重新启动service,CLUSTER-IP就会随机分配一个,难道我们每次都要去修改配置文件里面的CLUSTER-IP吗?
那么就需要根据svc-name 和CLUSTER-IP 映射,无论CLUSTER-IP如何变化,我们在配置文件填写svc-name就可以了。这个实现就是通过coredns来实现的。