Glab

kubernetes基础02:kubernetes中的域名解析原理分析


k8s解析服务:kube-dns vs coredns

旧版k8s默认使用kube-dns, 由于kube-dns的复杂性,新版的k8s已改成默认使用coredns

怎么使用域名

由于k8s的dns服务没有对外暴露,所以解析只能用于k8s集群内使用,一般的需求是在pod里根据service名正常解析出ip地址;
如果暴露出dns服务,或许也可以供外部使用,这里不讨论这种情况。

域名的形式: ..svc.cluster.local

解析原理:

k8s使用kube-dns或者coredns部署dns服务,之后kubectl添加service时,将生成的pod的/etc/resolv.conf指向dns服务。如下

# cat /etc/resolv.conf
nameserver 10.96.0.10
search <namespace_name>.svc.cluster.local svc.cluster.local cluster.local
options ndots:5

#search:自动尝试解析,如nslookup test,会去自动尝试解析
test.default.svc.cluster.local 、test.svc.cluster.local 、test.cluster.local,直到解析成功或者解析失败进行后续处理;
所以可以直接使用服务名,系统会自动进行查找解析。

因为<namespace_name>的存在,所以同namespace下的服务解析可省略输入namespace_name

ps:并不是所有的pod会配置指向k8s的dns,比如kube-proxy的pod,默认情况下会自动指向,除非做了特殊设定,这里暂不讨论。

测试
当前所有的svc(用于举例说明)
# kubectl get svc -A 
NAMESPACE              NAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE
default                kubernetes                  ClusterIP   10.96.0.1        <none>        443/TCP                  5d
default                nginx                       NodePort    10.101.176.192   <none>        88:31659/TCP             5d
kube-system            kube-dns                    ClusterIP   10.96.0.10       <none>        53/UDP,53/TCP,9153/TCP   5d
kubernetes-dashboard   dashboard-metrics-scraper   ClusterIP   10.111.20.195    <none>        8000/TCP                 4d23h
kubernetes-dashboard   kubernetes-dashboard        NodePort    10.102.233.237   <none>        443:32000/TCP            4d23h



# kubectl run dig --rm -it --image=docker.io/azukiapp/dig /bin/sh #下面的操作在这个新建pod里执行
/ # nslookup kubernetes
Server:         10.96.0.10
Address:        10.96.0.10#53

Name:   kubernetes.default.svc.cluster.local
Address: 10.96.0.1

/ # nslookup kubernetes.default
Server:         10.96.0.10
Address:        10.96.0.10#53

Name:   kubernetes.default.svc.cluster.local
Address: 10.96.0.1

/ # nslookup kubernetes.default.svc
Server:         10.96.0.10
Address:        10.96.0.10#53

Name:   kubernetes.default.svc.cluster.local
Address: 10.96.0.1

/ # nslookup kubernetes.default.svc.cluster
Server:         10.96.0.10
Address:        10.96.0.10#53

** server cannot find kubernetes.default.svc.cluster: SERVFAIL 

/ # nslookup kubernetes.default.svc.cluster.local
Server:         10.96.0.10
Address:        10.96.0.10#53

Name:   kubernetes.default.svc.cluster.local
Address: 10.96.0.1
# 上面的测试,可以看到进行了search搜索
# 继续测试
/ # nslookup  dashboard-metrics-scraper.kubernetes-dashboard
Server:         10.96.0.10
Address:        10.96.0.10#53

Name:   dashboard-metrics-scraper.kubernetes-dashboard.svc.cluster.local
Address: 10.111.20.195

/ # nslookup  dashboard-metrics-scraper #因为不在同一个namespace里所以报错
Server:         10.96.0.10
Address:        10.96.0.10#53

** server cannot find dashboard-metrics-scraper: SERVFAIL

当前页面是本站的「Baidu MIP」版。查看和发表评论请点击:完整版 »