Да, это возможно, но при этом следует учитывать некоторые моменты. Большинство из них описано в ответе на Stackoverflow ниже:
Например: DNS-сервер будет разрешать запросы, которые являются внутренними для кластера Kubernetes (например, nslookup kubernetes.default.svc.cluster.local
).
Я включил пример того, как вы можете открыть свой CoreDNS
внешним источникам и добавить Service
, который будет указывать на какой-то IP-адрес.
Шаги:
- Измените
CoreDNS
Service
, чтобы он был доступен снаружи.
- Modify the
configMap
of your CoreDNS
accordingly to:
- Создайте
Service
, указывающий на внешнее устройство.
- Контрольная работа
Измените CoreDNS
Service
, чтобы он был доступен снаружи.
Поскольку вы новичок в Kubernetes, вы, вероятно, знаете, как Services
работает и что можно сделать доступным извне. Вам нужно будет изменить свой CoreDNS
Service
с ClusterIP
на NodePort
или LoadBalancer
(я бы подумал, что LoadBalancer
было бы лучше, учитывая, что metallb
используется, и вы получите доступ к DNS
серверу через порт: 53
)
$ kubectl edit --namespace=kube-system service/coredns
(or kube-dns
)
Примечание!
CoreDNS
использует TCP
и UDP
одновременно, это может быть проблемой при создании LoadBalancer
. Здесь вы можете найти больше информации об этом:
Измените configMap
вашего CoreDNS
Если вы хотите разрешить домен, например: example.org
, вам нужно будет отредактировать configMap
из CoreDNS
следующим образом:
$ kubectl edit configmap --namespace=kube-system coredns
Добавьте строку в Corefile
:
k8s_external example.org
Этот плагин позволяет дополнительной зоне разрешать внешний IP-адрес (а) службы Kubernetes. Этот плагин полезен, только если также загружен плагин 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
Контрольная работа
Я использовал minikube
с --driver=docker
(с NodePort
), но полагаю, вы можете использовать ExternalIP
своего LoadBalancer
, чтобы проверить это:
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
- имя-службы.namespace.k8s_external_domain
-p 32261
- NodePort
порт
+short
- для ограничения вывода
Дополнительные ресурсы:
person
Dawid Kruk
schedule
08.07.2021