Похоже, что параметр resolv.conf
use-vc
игнорируется в AMI Amazon (последняя версия 2016.09
). Примите во внимание следующее:
[hadoop@ip-172-20-40-202 ~]$ cat /etc/resolv.conf
search default.svc.cluster.local svc.cluster.local cluster.local ec2.internal
options use-vc ndots:5 timeout:2 attempts:5
nameserver 172.20.53.184
nameserver 172.20.0.2
Если я использую nslookup
в интерактивном режиме, принудительно используя TCP через set vc
, запросы будут работать точно так, как ожидалось:
[hadoop@ip-172-20-40-202 ~]$ nslookup
> set vc
> kafka.default.svc.cluster.local
;; Got recursion not available from 172.20.53.184, trying next server
;; Got recursion not available from 172.20.53.184, trying next server
;; Got recursion not available from 172.20.53.184, trying next server
Server: 172.20.53.184
Address: 172.20.53.184#53
Name: kafka.default.svc.cluster.local
Address: 100.96.14.2
Name: kafka.default.svc.cluster.local
Address: 100.96.7.2
Name: kafka.default.svc.cluster.local
Address: 100.96.13.2
> kafka
Server: 172.20.53.184
Address: 172.20.53.184#53
Name: kafka.default.svc.cluster.local
Address: 100.96.14.2
Name: kafka.default.svc.cluster.local
Address: 100.96.7.2
Name: kafka.default.svc.cluster.local
Address: 100.96.13.2
> exit
Однако, если оставить их в покое, nslookup
не работает:
[hadoop@ip-172-20-40-202 ~]$ nslookup kafka.default.svc.cluster.local
Server: 172.20.0.2
Address: 172.20.0.2#53
** server can't find kafka.default.svc.cluster.local: NXDOMAIN
То же самое с dig
. Принудительное использование TCP работает должным образом:
[hadoop@ip-172-20-40-202 ~]$ dig +vc kafka.default.svc.cluster.local
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.52.amzn1 <<>> +vc kafka.default.svc.cluster.local
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55634
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;kafka.default.svc.cluster.local. IN A
;; ANSWER SECTION:
kafka.default.svc.cluster.local. 30 IN A 100.96.13.2
kafka.default.svc.cluster.local. 30 IN A 100.96.14.2
kafka.default.svc.cluster.local. 30 IN A 100.96.7.2
;; Query time: 2 msec
;; SERVER: 172.20.53.184#53(172.20.53.184)
;; WHEN: Thu Mar 16 20:45:06 2017
;; MSG SIZE rcvd: 97
И не принудительное принудительное использование TCP:
[hadoop@ip-172-20-40-202 ~]$ dig kafka.default.svc.cluster.local
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.52.amzn1 <<>> kafka.default.svc.cluster.local
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 9580
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;kafka.default.svc.cluster.local. IN A
;; AUTHORITY SECTION:
. 52 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2017031602 1800 900 604800 86400
;; Query time: 0 msec
;; SERVER: 172.20.0.2#53(172.20.0.2)
;; WHEN: Thu Mar 16 20:44:58 2017
;; MSG SIZE rcvd: 124
Похоже, что use-vc
в строке options use-vc ndots: 5 timeout: 2 попытки: 5
игнорируется.
Как мне исправить мою конфигурацию, чтобы принудительно использовать TCP для всех запросов DNS? man resolv.conf
говорит, что он должен работать!
Похоже, что диагностические инструменты, nslookup
и dig
, вводили меня в заблуждение.
Когда я использовал getent
, я увидел, что имена действительно правильно разрешаются и учитывают опцию use-vc
в /etc/resolv. conf
:
[hadoop@ip-172-20-40-202 ~]$ getent ahosts kafka.default.svc.cluster.local
100.96.13.2 STREAM kafka.default.svc.cluster.local
100.96.13.2 DGRAM
100.96.13.2 RAW
100.96.14.2 STREAM
100.96.14.2 DGRAM
100.96.14.2 RAW
100.96.7.2 STREAM
100.96.7.2 DGRAM
100.96.7.2 RAW
[hadoop@ip-172-20-40-202 ~]$ getent hosts kafka.default.svc.cluster.local
100.96.13.2 kafka.default.svc.cluster.local
100.96.14.2 kafka.default.svc.cluster.local
100.96.7.2 kafka.default.svc.cluster.local
Если я удалю опцию use-vc
в /etc/resolv.conf
, то getent
borks, как и ожидалось.
Кто же знал, верно?
.