我有一些初始化容器无法解析其他容器的服务名称,因为 nslookup 中的某些行为似乎是错误的:
我的初始化容器只是尝试“until nslookup h2agent”(h2agent 是我的服务名称),但抛出这个输出:
/ #
/ # nslookup h2agent
Server: 10.96.0.10
Address: 10.96.0.10:53
** server can't find h2agent.cluster.local: NXDOMAIN
** server can't find h2agent.svc.cluster.local: NXDOMAIN
Name: h2agent.ns-ct-h2agent.svc.cluster.local
Address: 10.105.47.206
** server can't find h2agent.cluster.local: NXDOMAIN
** server can't find h2agent.svc.cluster.local: NXDOMAIN
/ #
/ # echo $?
1
这是我在init容器中的resolv.conf文件:
/ # cat /etc/resolv.conf
nameserver 10.96.0.10
search ns-ct-h2agent.svc.cluster.local svc.cluster.local cluster.local
options ndots:5
也就是说,即使解析提供的搜索后缀之一(h2agent.ns-ct-h2agent.svc.cluster.local),实用程序返回 1,因为其他人都失败了。这是正确的行为吗?我认为 nslookup 在解决之前尝试了不同的后缀,如果解决了则返回代码 0,而不管其他人是否没有解决。至少我认为这是我以前在 busybox 旧图像中的行为,因为这个问题使我的组件测试由于 init 容器而无法启动,因为几天以来没有任何改变(但使用 busybox 的最新图像是 1 周前更新的)。
我的修复包括将
<namespace>.svc.cluster.local
添加到我的初始容器的部署清单中的服务名称:
until nslookup h2agent.ns-ct-h2agent.svc.cluster.local ...
但我不想那样做。
我应该用其他实用程序替换 nslookup 吗? 当 IP 被解析时,我如何强制 nslookup 返回 0?
我测试了基于 alpine 和 ubuntu 最新 x86_64 图像的 init 容器,但同样的问题,所以这似乎是 nslookup 规范的变化。
使用 minikube 版本:v1.23.2,kubectl v1.22.4