DNS服务¶
1、K8s集群内有一个DNS服务:
$ k get svc -n kube-system | grep dns
kube-dns ClusterIP 10.0.0.10 <none> 53/UDP,53/TCP,9153/TCP 205d
2、K8s集群内有对应的Pod为coredns:
$ k get po -A | grep dns
kube-system coredns-5db5696c7-9m9s8 1/1 Running 2 (13h ago) 205d
3、查看defalut命名空间Pod里的/etc/resolv.conf
$ k exec cluster-test-79b978867f-4x2lw -- cat /etc/resolv.conf
search default.svc.cluster.local svc.cluster.local cluster.local
nameserver 10.0.0.10
options ndots:5
4、查看aming命名空间Pod里的/etc/resolv.conf
$ k exec ng-deploy-5db56f48f4-qjvsh -n aming -- cat /etc/resolv.conf
search aming.svc.cluster.local svc.cluster.local cluster.local
nameserver 10.0.0.10
options ndots:5
上面参数说明:
- nameserver: 定义DNS服务器的IP,其实就是kube-dns那个service的IP。
- search: 定义域名的查找后缀规则,查找配置越多,说明域名解析查找匹配次数越多。集群匹配有 default.svc.cluster.local、svc.cluster.local、cluster.local 3个后缀,最多进行8次查询 (IPV4和IPV6查询各四次) 才能得到正确解析结果。不同命名空间,这个参数的值也不同。
- option: 定义域名解析配置文件选项,支持多个KV值。例如该参数设置成ndots:5,说明如果访问的域名字符串内的点字符数量超过ndots值,则认为是完整域名,并被直接解析;如果不足ndots值,则追加search段后缀再进行查询。
DNS测试¶
1、安装dig命令
$ yum install -y bind-utils
2、解析外网域名
$ dig @10.0.0.10 www.baidu.com

3、解析内部域名
查看default命名空间下的服务
$ k get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 205d
解析内部域名
$ dig @10.0.0.10 kubernetes.default.svc.cluster.local

说明: kubernetes为service name,service完整域名为service.namespace.svc.cluster.local
4、解析Pod
解析Pod,Pod的域名有点特殊,格式为<pod-ip>.<namespace>.pod.<clusterdomain>,例如10-18-206-93.default.pod.cluster.local
下面进行解析Pod演示说明:
(1)定义YAML
$ vim ng-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: myng
name: ng-deploy
namespace: aming
spec:
replicas: 2 ##副本数
selector:
matchLabels:
app: myng
template:
metadata:
labels:
app: myng
spec:
containers:
- name: myng
image: nginx:1.21.6
ports:
- name: myng-port
containerPort: 80
(2)应用YAML
$ k apply -f ng-deploy.yaml
(3)查看Pod的IP,这里以 172.17.125.18 为例
$ k get po -n aming -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
ng-deploy-5db56f48f4-qjvsh 1/1 Running 0 12h 172.17.125.18 k8s-node01 <none> <none>
ng-deploy-5db56f48f4-w26l8 1/1 Running 0 12h 172.25.244.219 k8s-master01 <none> <none>
(4)解析Pod
$ dig @10.0.0.10 172-17-125-18.aming.pod.cluster.local
DNS配置¶
可以通过查看coredns的configmap来获取DNS的配置信息
$ k describe cm coredns -n kube-system
Name: coredns
Namespace: kube-system
Labels: <none>
Annotations: <none>
Data
====
Corefile:
----
.:53 {
errors
health {
lameduck 5s
}
ready
kubernetes cluster.local in-addr.arpa ip6.arpa {
fallthrough in-addr.arpa ip6.arpa
}
prometheus :9153
forward . /etc/resolv.conf {
max_concurrent 1000
}
cache 30
loop
reload
loadbalance
}
上面参数说明:
- errors:错误信息到标准输出。
- health:CoreDNS自身健康状态报告,默认监听端口8080,一般用来做健康检查。您可以通过http://10.18.206.207:8080/health获取健康状态。(10.18.206.207为coredns其中一个Pod的IP)
- ready:CoreDNS插件状态报告,默认监听端口8181,一般用来做可读性检查。可以通过http://10.18.206.207:8181/ready获取可读状态。当所有插件都运行后,ready状态为200。
- kubernetes:CoreDNS kubernetes插件,提供集群内服务解析能力。
- prometheus:CoreDNS自身metrics数据接口。可以通过http://10.15.0.10:9153/metrics获取prometheus格式的监控数据。(10.15.0.10为kube-dns service的IP)
- forward(或proxy):将域名查询请求转到预定义的DNS服务器。默认配置中,当域名不在kubernetes域时,将请求转发到预定义的解析器(宿主机的/etc/resolv.conf)中,这是默认配置。
- cache:DNS缓存时长,单位秒。
- loop:环路检测,如果检测到环路,则停止CoreDNS。
- reload:允许自动重新加载已更改的Corefile。编辑ConfigMap配置后,请等待两分钟以使更改生效。
- loadbalance:循环DNS负载均衡器,可以在答案中随机A、AAAA、MX记录的顺序。