我想通过向 DNS 服务器添加 stub 区域来解析来自 Kubernetes 集群外部的 kube-dns 名称。这需要将 cluster.local 域更改为适合我的 DNS 命名空间的内容。
集群 DNS 与 cluster.local 一起工作正常。要更改域,我已将/etc/systemd/system/kubelet.service.d/10-kubeadm.conf 上的 KUBELET_DNS_ARGS 行修改为:
Environment="KUBELET_DNS_ARGS=--cluster-dns=x.y.z --cluster-domain=cluster.mydomain.local --resolv-conf=/etc/resolv.conf.kubernetes"
重启后 kubelet 外部名称可解析但 kubernetes 名称解析失败。我可以看到 kube-dns 仍在运行:
/kube-dns --domain=cluster.local. --dns-port=10053 --config-dir=/kube-dns-config --v=2
我能够找到 cluster.local 的唯一地方是在 pods yaml 配置中,它显示: containers:
- args:
- --domain=cluster.local.
- --dns-port=10053
- --config-dir=/kube-dns-config
- --v=2
修改 yaml 并使用重新创建 pod 后kubectl replace --force -f kube-dns.yaml
我仍然看到 kube-dns 开始使用 --domain=cluster.local。我错过了什么?
最佳答案
我在将基于微服务的应用程序移植到 Kubernetes 时遇到了类似的问题。将内部 DNS 区域更改为 cluster.local 将是一项相当复杂的任务,我们并不真正想要处理。
在我们的例子中,我们 switched from KubeDNS to CoreDNS ,并简单地启用 coreDNS rewrite plugin 将我们的 our.internal.domain
转换为 ourNamespace.svc.cluster.local
。
执行此操作后,我们的 CoreDNS 配置映射的核心文件部分如下所示:
data:
Corefile: |
.:53 {
errors
health
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
upstream
fallthrough in-addr.arpa ip6.arpa
}
prometheus :9153
rewrite name substring our.internal.domain ourNamespace.svc.cluster.local
proxy . /etc/resolv.conf
cache 30
}
这使我们的 kubernetes 服务能够同时响应默认 DNS 区域和我们自己的区域。
关于kubernetes - 如何更改使用 kubeadm 部署的 kubernetes 1.9 上的 cluster.local 默认域?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48326773/