我已经复制了你的场景,它按预期工作。
在这里,我将描述在 Kubernetes 上使用自定义 DNS 的两种不同方法。第一个是在 Pod 级别。您可以自定义 pod 将使用的 DNS 服务器。这在您不想为所有 pod 更改此配置的特定情况下很有用。
为此,您需要添加一些可选字段。要了解更多信息,请阅读此内容。例子:
kind: Pod
metadata:
name: busybox-custom
namespace: default
spec:
containers:
- name: busybox
image: busybox:1.28
command:
- sleep
- "3600"
imagePullPolicy: IfNotPresent
dnsPolicy: "None"
dnsConfig:
nameservers:
- 8.8.8.8
searches:
- ns1.svc.cluster-domain.example
- my.dns.search.suffix
options:
- name: ndots
value: "2"
- name: edns0
restartPolicy: Always
$ kubectl exec -ti busybox-custom -- nslookup cnn.com
Server: 8.8.8.8
Address 1: 8.8.8.8 dns.google
Name: cnn.com
Address 1: 2a04:4e42::323
Address 2: 2a04:4e42:400::323
Address 3: 2a04:4e42:200::323
Address 4: 2a04:4e42:600::323
Address 5: 151.101.65.67
Address 6: 151.101.129.67
Address 7: 151.101.193.67
Address 8: 151.101.1.67
$ kubectl exec -ti busybox-custom -- nslookup kubernetes.default
Server: 8.8.8.8
Address 1: 8.8.8.8 dns.google
nslookup: can't resolve 'kubernetes.default'
command terminated with exit code 1
如您所见,此方法将产生解析内部 DNS 名称的问题。
实现此目的的第二种方法是在集群级别更改 DNS。这是您选择的方式,如您所见。
$ kubectl get cm coredns -n kube-system -o yaml
apiVersion: v1
data:
Corefile: |
.:53 {
errors
health
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
upstream
fallthrough in-addr.arpa ip6.arpa
ttl 30
}
prometheus :9153
forward . 8.8.8.8 8.8.4.4
cache 30
loop
reload
loadbalance
}
kind: ConfigMap
如您所见,我没有consul.local:53
条目。
Consul是一种服务网络解决方案,用于跨任何运行时平台和公共或私有云连接和保护服务
这种设置并不常见,我认为您不需要在设置中包含此条目。这可能是您的问题,当我添加此条目时,我面临您报告的相同问题。
$ kubectl exec -ti busybox -- nslookup cnn.com
Server: 10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
Name: cnn.com
Address 1: 2a04:4e42:200::323
Address 2: 2a04:4e42:400::323
Address 3: 2a04:4e42::323
Address 4: 2a04:4e42:600::323
Address 5: 151.101.65.67
Address 6: 151.101.193.67
Address 7: 151.101.1.67
Address 8: 151.101.129.67
$ kubectl exec -ti busybox -- nslookup kubernetes.default
Server: 10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
Name: kubernetes.default
Address 1: 10.96.0.1 kubernetes.default.svc.cluster.local
另一个主要问题是您正在使用最新的 busybox 映像调试 DNS。我强烈建议您避免使用任何高于 1.28 的版本,因为它已经知道有关名称解析的问题。
正如Oleg Butuzov在评论中推荐的那样,您可以用来解决 DNS 问题的最佳busybox 映像是1.28 。