【发布时间】:2021-07-07 23:08:52
【问题描述】:
我在我的家庭实验室中使用了一个包含 1 个主节点和 2 个节点的裸机集群,其中包含 istio、metallb 和 calico。
我想在 kubernetes 中创建一个 DNS 服务器,为 LAN 上的主机转换 IP。
是否可以使用k8s中已经安装的coreDNS?
【问题讨论】:
标签: kubernetes coredns
我在我的家庭实验室中使用了一个包含 1 个主节点和 2 个节点的裸机集群,其中包含 istio、metallb 和 calico。
我想在 kubernetes 中创建一个 DNS 服务器,为 LAN 上的主机转换 IP。
是否可以使用k8s中已经安装的coreDNS?
【问题讨论】:
标签: kubernetes coredns
是的,这是可能的,但在这样做时需要考虑一些要点。他们中的大多数都在下面的 Stackoverflow 答案中进行了描述:
例如:DNS 服务器将解析 Kubernetes 集群内部的查询(如 nslookup kubernetes.default.svc.cluster.local)。
我已经包含了有关如何将 CoreDNS 暴露给外部源并添加指向某个 IP 地址的 Service 的示例
步骤:
CoreDNS Service 修改为在外部可用。configMap 的CoreDNS 相应地修改为:
Service。CoreDNSService,使其在外部可用。由于您是 Kubernetes 新手,您可能知道Services 的工作原理以及哪些可以在外部使用。您需要将 CoreDNS Service 从 ClusterIP 更改为 NodePort 或 LoadBalancer(考虑到使用了 metallb,我认为 LoadBalancer 会是一个更好的主意,您将访问DNS 端口上的服务器:53)
$ kubectl edit --namespace=kube-system service/coredns (或kube-dns)附注!
CoreDNS同时使用TCP和UDP,在创建LoadBalancer时可能会出现问题。在这里您可以找到有关它的更多信息:
CoreDNS的configMap
如果您想解析域,例如:example.org,您需要按以下方式编辑CoreDNS 的configMap:
$ kubectl edit configmap --namespace=kube-system coredns将该行添加到Corefile:
k8s_external example.org
此插件允许额外的区域来解析 Kubernetes 服务的外部 IP 地址。此插件仅在同时加载了 kubernetes 插件时才有用。
插件使用外部区域来解析集群内 IP 地址。它只处理对 A、AAAA 和 SRV 记录的查询;所有其他都导致 NODATA 响应。为了使其成为适当的 DNS 区域,它会处理区域顶点的 SOA 和 NS 查询。
Service。按照我提供的链接,您现在可以创建一个指向 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),但我认为你可以使用LoadBalancer 的ExternalIP 来检查它:
dig @192.168.49.2 test.default.example.org -p 32261 +short192.168.200.123
地点:
@192.168.49.2 - minikube 的 IP 地址
test.default.example.org - service-name.namespace.k8s_external_domain-p 32261 - NodePort 端口+short - 限制输出其他资源:
【讨论】:
It only handles queries for A, AAAA and SRV records; all others result in NODATA responses.。