外部DNS服务器是否可以针对K8s群集DNS进行解析?我想让驻留在群集外部的应用程序能够解析容器DNS名称吗?
答案 0 :(得分:0)
我从未这样做过,但是从技术上讲,应该可以通过将kube-dns服务公开为NodePort来实现这一点。然后,您应该配置外部DNS服务器,以将对Kube DNS区域“ cluster.local”(或Kube中的其他任何区域)的查询转发到kube-dns地址和端口。
在Bind中可以这样进行:
zone "cluster.local" {
type forward;
forward only;
forwarders{ ANY_NODE_IP port NODEPORT_PORT; };
};
答案 1 :(得分:0)
尽管有可能公开coredns并因此将请求转发到kubernetes,但我在aws中采用的典型方法是使用external-dns controller。
这将使服务和入口与AWS之类的商品同步。它带有一些警告,但是我已经在产品环境中成功使用了它。
答案 2 :(得分:0)
有可能有一篇很好的文章证明了这一概念:https://blog.heptio.com/configuring-your-linux-host-to-resolve-a-local-kubernetes-clusters-service-urls-a8c7bdb212a7
但是,我同意Dan的看法,即通过service + ingress / ELB + external-dns进行公开是解决此问题的常用方法。出于开发目的,我使用https://github.com/txn2/kubefwd,它还会破坏名称解析。
答案 3 :(得分:0)
coredns 将返回通常无法从集群外部访问的集群内部 IP 地址。正确答案是 MichaelK 建议使用 coredns 插件 k8s_external https://coredns.io/plugins/k8s_external/ 删除。
k8s_external 已经是 coredns 的一部分。只需编辑
kubectl -n kube-system edit configmap coredns
并在每个文档的 kubernetes 指令之后添加 k8s_external。
kubernetes cluster.local
k8s_external example.org
k8s_gateway 还处理入口资源的 dns
您还需要具有 type: LoadBalancer
的 metallb 或 rancher/klipper-lb 处理服务,因为 k8s_gateway 不会解析 NodePort 服务。
MichaelK 是 k8s_gateway 的作者,不知道为什么他的回复被版主删除了。