短名字不是免费的
一句话总结
短名字越方便,费用就越高,在寻找外面的名字时会收取费用。因为小于5个点的名字都会先搜索。
在容器管理中web只要这样写,也可以找到相同名称空间的服务。很方便。但是这种便利是有代价的,这个代价在寻找****离开的名称时**被收取。
search 和 ndots
帕德的/etc/resolv.conf是这样的。
search default.svc.cluster.local svc.cluster.local cluster.local
nameserver 10.43.0.10
options ndots:5
search是短名字后面依次贴上的标签,ndots:5意思是点数少于5个的名称可能还不是一切都完成的名字,请先尝试搜索。
web因为银点是0个,所以当然要写search。问题是example.com因为只有一个点,所以这个也低于5,所以按照这个顺序问。
example.com.default.svc.cluster.local → NXDOMAIN
example.com.svc.cluster.local → NXDOMAIN
example.com.cluster.local → NXDOMAIN
example.com. → 드디어 응답
一次请求可以往返四次,其中三次会被丢弃。
为什么不被指标抓到呢?
DNS查询不是在应用程序代码上,而是在下面库中发生的。所以应用程序跟踪中经常无法捕捉到段落,对用户来说只看起来像“有点慢的请求”。只有CoreDNS的负载悄悄上升,有一天,分片数增加后达到极限。
虽然可以修好,但不是免费的。
每个paddnsConfig罗ndots可以降低。但是那个派对现在用短名字找不到群集服务。所以只有向出去请求多的派对给予才对。给群集内通信多的派对反而会造成损失。
为什么往返是四次?
帕德的/etc/resolv.conf是这样的。
search labhub-prod.svc.cluster.local svc.cluster.local cluster.local
nameserver 10.96.0.10
options ndots:5
ndots:5认为点少于5个的名称不是完整的名称,请先搜索。
意思是试着贴上。api.example.com因为有2个银点,所以挂在这里。
1. api.example.com.labhub-prod.svc.cluster.local → NXDOMAIN
2. api.example.com.svc.cluster.local → NXDOMAIN
3. api.example.com.cluster.local → NXDOMAIN
4. api.example.com → 응답 ← 네 번째에 성공
如果启用了IPv6,每个问题都会同时询问A和AAAA,所以实际问题有8个 是。在经常调用外部API的服务中,CoreDNS负载的大部分是这个。
三个对应和各自的值
| 方法 | 效果 | 代价 |
|---|---|---|
名字末尾的点(example.com.) |
完全跳过search | 需要修改代码 |
在平板电脑上ndots: 1 |
适用于该帕德的所有名称 | 不能是短名称 |
| NodeLocal DNSCache | 在节点上缓存,CoreDNS负载急剧下降 | 安装·运营负担 |
第一排最便宜、最安全。ndots不将降低到全军的理由是
kubectl可以通过以下方式确认——所有以短名称呼叫服务的代码
会碎掉。
# 파드 단위로만, 그 파드가 짧은 이름을 안 쓴다는 것을 확인하고
spec:
dnsConfig:
options:
- name: ndots
value: "1"
诊断DNS问题的命令
# 파드 안에서 — 어느 단계에서 실패하는지 본다
nslookup api.example.com
nslookup api.example.com. # 끝점을 찍으면 되는가?
# search 가 실제로 어떻게 붙는지
dig +search +short api.example.com
# CoreDNS 가 무엇을 받고 있나
kubectl -n kube-system logs -l k8s-app=kube-dns --tail=50 | grep NXDOMAIN
CoreDNS日志为空的话Corefile在log没有插件。调查一下
只打开和关闭——打开的话日志量会很大。
按症状来看是这样的。间歇性失败通常是conntrack或UDP数据包丢失, 全部失败是CoreDNS或网络政策,只是慢的是上述search 是往返的。
在实际工作中真正重要的东西
经常呼叫外部域名的地方请打上终端。example.com.如加上句号,则被视为完成的名字,整个搜索都跳过。一个代码字符的往返四次变成一次,ndots因为不触及,所以短名字也照样使用。
信号在CoreDNS的查询次数中找到。 垃圾查询也是正常响应(NXDOMAIN),所以错误率不会上升。如果查询次数是服务呼叫次数的几倍,那就是在支付这个费用。
**ndots绝对不会降低到全域。**用短名称呼叫群集内的服务的代码都会崩溃。要更改的话,必须按板块进行,并确认该板块没有使用短名称。
了解交易所就是这个主题的全部。在下次练习中亲自数一下问题数,这个故事就会用数字抓住了。