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
以在外部可用。
- 将
CoreDNS
的 configMap
相应地修改为:
- 创建一个指向外部设备的
Service
。
- 测试
修改 CoreDNS
Service
以在外部可用。
由于您是 Kubernetes 的新手,您可能知道 Services
如何工作以及哪些可以在外部使用。您需要将 CoreDNS
Service
从 ClusterIP
更改为 NodePort
或 LoadBalancer
(我认为 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:
- Metallb.universe.tf: Usage (at the bottom)
修改 CoreDNS
的 configMap
如果您想像这样解析域:example.org
您需要按以下方式编辑 CoreDNS
的 configMap
:
$ 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.
创建一个指向外部设备的 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
)一起使用,但我认为您可以使用 LoadBalancer
的 ExternalIP
来检查一下:
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
- 限制输出
其他资源:
我在我的家庭实验室中使用 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
以在外部可用。 - 将
CoreDNS
的configMap
相应地修改为: - 创建一个指向外部设备的
Service
。 - 测试
修改 CoreDNS
Service
以在外部可用。
由于您是 Kubernetes 的新手,您可能知道 Services
如何工作以及哪些可以在外部使用。您需要将 CoreDNS
Service
从 ClusterIP
更改为 NodePort
或 LoadBalancer
(我认为 LoadBalancer
会更好考虑到 metallb
已被使用,您将通过以下端口访问 DNS
服务器:53
)
$ kubectl edit --namespace=kube-system service/coredns
(或kube-dns
)
A side note!
CoreDNS
is usingTCP
andUDP
simultaneously, it could be an issue when creating aLoadBalancer
. Here you can find more information on it:
- Metallb.universe.tf: Usage (at the bottom)
修改 CoreDNS
的 configMap
如果您想像这样解析域:example.org
您需要按以下方式编辑 CoreDNS
的 configMap
:
$ 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.
创建一个指向外部设备的 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
)一起使用,但我认为您可以使用 LoadBalancer
的 ExternalIP
来检查一下:
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
- 限制输出
其他资源: