Coredns 添加主机名解析,无法解析

在 coredns 的 configmap 添加了主机名解析

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

.:53 { errors health { lameduck 5s } ready kubernetes cluster.local in-addr.arpa ip6.arpa { pods insecure fallthrough in-addr.arpa ip6.arpa ttl 30 } hosts { 10.10.10.155 api-server01 #添加了这些 10.10.10.156 api-server02 10.10.10.157 api-server03 10.10.10.158 api-server04 10.10.10.159 api-server05 fallthrough } prometheus :9153 forward . /etc/resolv.conf { max_concurrent 1000 } cache 30 loop reload loadbalance }

通过 nodelocaldnscache 无法解析此主机名

1 2 3 4 5 6

nslookup api-server01 169.254.25.10

Server: 169.254.25.10
Address: 169.254.25.10#53

*** Can't find api-server01: No answer

通过 coredns 却是正常的

1
2
3
4
5
6
7

nslookup api-server01 11.253.0.3

Server: 11.253.0.3
Address: 11.253.0.3#53

Name: api-server01
Address: 10.10.10.155

原因分析:

查看 nodelocaldns 的 configmap 有如下部分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

Corefile: |
cluster.local:53 {
errors
cache {
success 9984 30
denial 9984 5
}
reload
loop
bind 169.254.25.10
forward . 11.253.0.3 {
force_tcp
}
prometheus :9253
health 169.254.25.10:9254
}
……
.:53 {
errors
cache 30
reload
loop
bind 169.254.25.10
forward . /etc/resolv.conf
prometheus :9253
}

可以看到符合 k8s cluster.local 格式的域名 forward 是 coredns ,而其他的域名 forward 是 /etc/resolv.conf (主机系统的 dns),所以是解析不到自己添加在 coredns 中的主机名的。

解决方法:修改其他域名的 forward 也走 coredns

1
2
3
4
5
6
7
8
9
10

.:53 {
errors
cache 30
reload
loop
bind 169.254.25.10
forward . 11.253.0.3 {
force_tcp
}
prometheus :9253