nslookup 和 awk 获取第二个地址

nslookup and awk get 2nd address

我正在尝试从我的 nslookup

的以下结果中获取地址

这里我要获取的是第二个地址10.0.45.45

Server:         10.152.183.10
Address:        10.152.183.10#53

Name:   pg-master-0.pg-master-headless.postgres.svc.cluster.local
Address: 10.1.45.45

这是我的代码

MASTER_HOST=$(nslookup pg-master-0.pg-master-headlesss | awk '/^Address:/ {A=}; END {print A}');

echo $MASTER_HOST

不幸的是,我的输出是:

10.152.183.10#53

我在这里登录了 pod 然后 运行 这样的 nslookup。

如果您想要 nslookup 输出中的第二个“地址:”,您可以简单地执行:

awk '/^Address/{n++; if (n==2){print ; exit}}'

检查该行是否以 Address 开头,然后递增计数器 n++,当 n == 2 时输出第二个字段并退出。

示例Use/Output

使用名为 nslookup.txt 的文件中的数据,您将收到以下内容:

$ awk '/^Address/{n++; if (n==2){print ; exit}}' nslookup.txt
10.1.45.45

当然,使用 nslookup,您只需将输出通过管道传输到 awk。例如,如果我想在我的本地子网上获得机器 valkyrie 的 IP,我会使用:

$ nslookup valkyrie | awk '/^Address/{n++; if (n==2){print ; exit}}'
192.168.6.135

检查一下,如果您还有其他问题,请告诉我。

看起来 nslookup 无法解析 pg-master-0.pg-master-headlesss。您可能 运行 来自不同 pod 的操作或来自您个人 server/machine 的操作,它们不知道集群中的服务 运行。 (您的笔记本电脑在您的 K8s 集群中没有使用 CoreDNS)

您可以尝试 运行 来自集群中 pod 的脚本,并使用完整的 FQDN 以确保安全:

$ kubectl run -i --tty --rm debug --image=ubuntu --restart=Never -- bash
#
# apt update; apt -y install dnsutils # Installs dnslookup ...
# export MASTER_HOST=$(nslookup pg-master-0.pg-master-headless.postgres.svc.cluster.local | awk '/^Address:/ {A=}; END {print A}'); echo $MASTER_HOST"