首页 > 解决方案 > Kubernetes 中用于翻译 LAN 主机的 DNS 服务器

问题描述

我在我的家庭实验室中使用了一个包含 1 个主节点和 2 个节点的裸机集群,其中包含 istio、metallb 和 calico。

我想在 kubernetes 中创建一个 DNS 服务器,为 LAN 上的主机转换 IP。

是否可以使用已经安装在 k8s 中的 coreDNS?

标签: kubernetescoredns

解决方案


是的,这是可能的,但在这样做时需要考虑一些要点。其中大多数在下面的 Stackoverflow 答案中进行了描述:

例如:DNS 服务器将解析 Kubernetes 集群内部的查询(如nslookup kubernetes.default.svc.cluster.local)。


我已经包含了有关如何将您的资源暴露CoreDNS给外部资源并添加一个Service指向某个 IP 地址的示例

脚步:

  • 修改CoreDNS Service以在外部可用。
  • 相应地修改configMapCoreDNS的:
  • 创建一个Service指向外部设备的。
  • 测试

修改CoreDNS Service以在外部可用。

由于您是 Kubernetes 新手,您可能知道如何Services工作以及哪些可以在外部使用。您将需要将您的CoreDNS Servicefrom更改ClusterIPNodePortor LoadBalancer(考虑到已使用,我认为LoadBalancer这是一个更好的主意metallb,您将DNS在端口上访问服务器53:)

  • $ kubectl edit --namespace=kube-system service/coredns (或kube-dns

旁注!

CoreDNS同时使用TCPUDP在创建LoadBalancer. 在这里您可以找到有关它的更多信息:


修改configMap你的CoreDNS

如果您想解析域,例如:example.org您需要通过以下方式编辑configMapof :CoreDNS

  • $ kubectl edit configmap --namespace=kube-system coredns

将行添加到Corefile

        k8s_external example.org

这个插件允许一个额外的区域来解析 Kubernetes 服务的外部 IP 地址。此插件仅在同时加载了 kubernetes 插件时才有用。

该插件使用外部区域来解析集群内 IP 地址。它只处理对 A、AAAA 和 SRV 记录的查询;所有其他都导致 NODATA 响应。为了使其成为适当的 DNS 区域,它处理区域顶点的 SOA 和 NS 查询。

-- CoreDNS.io:插件:K8s_external


创建一个Service指向外部设备的。

按照我包含的链接,您现在可以创建一个Service指向 IP 地址的链接:

apiVersion: v1
kind: Service
metadata:
 name: test
 namespace: default
spec:
 clusterIP: None
 externalIPs:
 - 192.168.200.123
 type: ClusterIP

测试

我已经使用minikubewith --driver=docker(with NodePort) 但我认为您可以使用ExternalIPof yourLoadBalancer来检查它:

  • dig @192.168.49.2 test.default.example.org -p 32261 +short
192.168.200.123

在哪里:

  • @192.168.49.2- IP 地址minikube
  • test.default.example.org- 服务名称.命名空间.k8s_external_domain
  • -p 32261-NodePort港口
  • +short- 限制输出

其他资源:


推荐阅读