Начиная с Kubernetes v1.6, kube-dns поддерживает настройку для пользовательских зон DNS (например, .consul.local
) с внешним преобразователем и для внешнего DNSсерверы для обслуживания запросов в «другие зоны».
Чтобы использовать эту функцию, необходимо правильно настроить две вещи:
- Добавить пользовательские зоны в kube-dns ConfigMap
- Установите для pod dnsPolicy значение ClusterFirst
(поиск подробностей в разделе «Политика DNS Pod» связанного документа)
С помощьюdnsPolicy, для которого установлено значение «ClusterFirst», DNS-запрос сначала отправляется на уровень кэширования DNS в kube-dns. Отсюда суффикс запроса проверяется, а затем перенаправляется в соответствующий DNS. В этом случае имена с суффиксом кластера (например, «.cluster.local») отправляются в kube-dns. Имена с суффиксом домена-заглушки (например, «.acme.local») будут отправляться в настроенный пользовательский преобразователь. Наконец, запросы, которые не совпадают ни с однимиз этих суффиксов будут перенаправлены в вышестоящий DNS.
Вот пример добавления настраиваемой карты для зоны .consul.local
и настраиваемых вышестоящих служб.
apiVersion: v1
kind: ConfigMap
metadata:
name: kube-dns
namespace: kube-system
data:
stubDomains: |
{“consul.local”: [“10.150.0.1”]}
upstreamNameservers: |
["8.8.8.8", "8.8.4.4"]
Чтобы применить этоконфигурации, сохраните ее в файл kube-dns-consul-stubdomain.yml
и выполните команду (настройте имя зоны и IP-адрес сервера в соответствии с вашими потребностями):
kubectl create -f kube-dns-consul-stubdomain.yml
Это пример конфигурации модуля с помощью dnsPolicy
apiVersion: v1
kind: Pod
metadata:
name: busybox
namespace: default
spec:
containers:
- image: busybox
command:
- sleep
- "3600"
imagePullPolicy: IfNotPresent
name: busybox
restartPolicy: Always
hostNetwork: true
dnsPolicy: ClusterFirst
Эти ресурсы могут оказаться полезными для понимания деталей функции «Частные зоны DNS»: