k8s解析服务:kube-dns vs coredns
旧版k8s默认使用kube-dns, 由于kube-dns的复杂性,新版的k8s已改成默认使用coredns
怎么使用域名
由于k8s的dns服务没有对外暴露,所以解析只能用于k8s集群内使用,一般的需求是在pod里根据service名正常解析出ip地址;
如果暴露出dns服务,或许也可以供外部使用,这里不讨论这种情况。
域名的形式:
解析原理:
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
评论