kubernetes 中用于翻译 LAN 主机的 DNS 服务器

DNS server in kubernetes for translate LAN hosts

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

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

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

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

  • whosebug.com: Questions: How to expose Kubernetes DNS externally

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


我提供了有关如何将 CoreDNS 公开给外部资源并添加指向某个 IP 地址的 Service 的示例

步骤:

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

修改 CoreDNS Service 以在外部可用。

由于您是 Kubernetes 的新手,您可能知道 Services 如何工作以及哪些可以在外部使用。您需要将 CoreDNS ServiceClusterIP 更改为 NodePortLoadBalancer(我认为 LoadBalancer 会更好考虑到 metallb 已被使用,您将通过以下端口访问 DNS 服务器:53)

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

A side note!

CoreDNS is using TCP and UDP simultaneously, it could be an issue when creating a LoadBalancer. Here you can find more information on it:


修改 CoreDNS

configMap

如果您想像这样解析域:example.org 您需要按以下方式编辑 CoreDNSconfigMap

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

将行添加到 Corefile:

        k8s_external example.org

This plugin allows an additional zone to resolve the external IP address(es) of a Kubernetes service. This plugin is only useful if the kubernetes plugin is also loaded.

The plugin uses an external zone to resolve in-cluster IP addresses. It only handles queries for A, AAAA and SRV records; all others result in NODATA responses. To make it a proper DNS zone, it handles SOA and NS queries for the apex of the zone.

-- CoreDNS.io: Plugins: K8s_external


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

在我包含的 link 之后,您现在可以创建一个指向 IP 地址的 Service

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

测试

我已经将 minikube--driver=docker(与 NodePort)一起使用,但我认为您可以使用 LoadBalancerExternalIP 来检查一下:

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

其中:

  • @192.168.49.2 - minikube
  • 的 IP 地址
  • test.default.example.org - 服务-name.namespace.k8s_external_domain
  • -p 32261 - NodePort 端口
  • +short - 限制输出

其他资源: