如何在外部公开Kubernetes DNS

时间:2019-04-24 16:30:12

标签: kubernetes

外部DNS服务器是否可以针对K8s群集DNS进行解析?我想让驻留在群集外部的应用程序能够解析容器DNS名称吗?

4 个答案:

答案 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 的作者,不知道为什么他的回复被版主删除了。