Mỗi Service có bản ghi DNS dạng <service>.<namespace>.svc.cluster.local do CoreDNS phục vụ. Trong cùng namespace gọi ngắn gọn api là đủ; khác namespace phải api.payment.
Điều làm nhiều người bất ngờ nằm ở /etc/resolv.conf mà kubelet inject vào Pod:
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5ndots:5 nghĩa là: tên nào có ít hơn 5 dấu chấm sẽ được thử ghép lần lượt với từng search domain trước khi hỏi như tên tuyệt đối. Nên api.github.com (2 dấu chấm) phải qua 3 truy vấn hỏng rồi mới tới truy vấn đúng — nhân đôi vì hỏi cả A và AAAA. Với service gọi domain ngoài dày đặc, đây là nguồn latency và tải CoreDNS đáng kể.
Cách xử lý: thêm dấu chấm cuối để dùng FQDN tuyệt đối (api.github.com.), hoặc hạ ndots trong dnsConfig của Pod, hoặc bật NodeLocal DNSCache.
Một điểm nữa: headless Service (clusterIP: None) không trả về một VIP mà trả danh sách IP của từng Pod — đây là cách StatefulSet cho phép định danh từng instance qua DNS.