kubernetes - Kubernetes 中用于翻译 LAN 主机的 DNS 服务器
问题描述
我在我的家庭实验室中使用了一个包含 1 个主节点和 2 个节点的裸机集群,其中包含 istio、metallb 和 calico。
我想在 kubernetes 中创建一个 DNS 服务器,为 LAN 上的主机转换 IP。
是否可以使用已经安装在 k8s 中的 coreDNS?
解决方案
是的,这是可能的,但在这样做时需要考虑一些要点。其中大多数在下面的 Stackoverflow 答案中进行了描述:
例如:DNS 服务器将解析 Kubernetes 集群内部的查询(如nslookup kubernetes.default.svc.cluster.local
)。
我已经包含了有关如何将您的资源暴露CoreDNS
给外部资源并添加一个Service
指向某个 IP 地址的示例
脚步:
- 修改
CoreDNS
Service
以在外部可用。 - 相应地修改
configMap
你CoreDNS
的: - 创建一个
Service
指向外部设备的。 - 测试
修改CoreDNS
Service
以在外部可用。
由于您是 Kubernetes 新手,您可能知道如何Services
工作以及哪些可以在外部使用。您将需要将您的CoreDNS
Service
from更改ClusterIP
为NodePort
or LoadBalancer
(考虑到已使用,我认为LoadBalancer
这是一个更好的主意metallb
,您将DNS
在端口上访问服务器53
:)
$ kubectl edit --namespace=kube-system service/coredns
(或kube-dns
)
旁注!
CoreDNS
同时使用TCP
,UDP
在创建LoadBalancer
. 在这里您可以找到有关它的更多信息:
修改configMap
你的CoreDNS
如果您想解析域,例如:example.org
您需要通过以下方式编辑configMap
of :CoreDNS
$ kubectl edit configmap --namespace=kube-system coredns
将行添加到Corefile
:
k8s_external example.org
这个插件允许一个额外的区域来解析 Kubernetes 服务的外部 IP 地址。此插件仅在同时加载了 kubernetes 插件时才有用。
该插件使用外部区域来解析集群内 IP 地址。它只处理对 A、AAAA 和 SRV 记录的查询;所有其他都导致 NODATA 响应。为了使其成为适当的 DNS 区域,它处理区域顶点的 SOA 和 NS 查询。
创建一个Service
指向外部设备的。
按照我包含的链接,您现在可以创建一个Service
指向 IP 地址的链接:
apiVersion: v1
kind: Service
metadata:
name: test
namespace: default
spec:
clusterIP: None
externalIPs:
- 192.168.200.123
type: ClusterIP
测试
我已经使用minikube
with --driver=docker
(with NodePort
) 但我认为您可以使用ExternalIP
of 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
- 限制输出
其他资源: