Краткое описание обучения Kubernetes (37) — приложение CoreDNS Kubernetes корпоративного уровня

Предисловие

IP-адрес изменится.Программа настраивает IP-адрес.Все места, связанные с этим IP-адресом, необходимо изменить, что не удобно для эксплуатации, обслуживания и исследований и разработок. IP-адреса нелегко запомнить. Введите доменное имя для замены IP-адреса, чтобы бизнес использовал уникальное идентификационное доменное имя, а доменное имя можно было преобразовать в IP-адрес через DNS-сервер для трехуровневой связи бизнеса. Бизнес и IP-адрес разделены через доменное имя. Если IP-адрес, соответствующий доменному имени, изменится, просто измените разрешение доменного имени, не внося изменений в бизнес. Работа по исследованиям и разработкам, а также по эксплуатации и техническому обслуживанию с использованием доменных имен также разделена. В случае изменения IP-адреса эксплуатация и обслуживание не требуют от НИОКР изменения конфигурации бизнес-кода. С точки зрения читабельности и запоминаемости доменные имена обычно состоят из значимых слов или фраз, которые людям легче понять и запомнить. Напротив, IP-адрес представляет собой строку цифр, которую нелегко запомнить.

Принцип DNS

1. Что такое DNS?

Энциклопедия Baidu: Сервер преобразования доменного имени и соответствующего IP-адреса DNS (сервер доменных имен, сервер доменных имен) — это сервер, который преобразует доменное имя (доменное имя) и соответствующий IP-адрес (IP-адрес). DNS хранит таблицу доменных имен и соответствующих IP-адресов для разрешения доменных имен сообщений. Доменное имя — это имя компьютера или группы компьютеров в Интернете. Оно используется для идентификации электронного местоположения (иногда также географического местоположения) компьютера во время передачи данных. Доменное имя представляет собой строку имен, разделенных точками, обычно включающую название организации, и всегда включает двух- или трехбуквенный суффикс, обозначающий тип организации или страну, в которой расположен домен.

2. Иерархическая структура

Иерархия доменных имен

DNS (система доменных имен) использует иерархическую структуру для организации доменных имен и реализации распределенной системы разрешения доменных имен. Он делит доменные имена на несколько уровней: от корневого домена до наиболее конкретных поддоменов. Основными компонентами иерархической структуры являются следующие:

Иерархия эффект пример
корневая зона Корневой домен — это самый высокий уровень иерархии DNS и обозначается одной точкой (.). Это отправная точка всего пространства имен DNS. В корневом домене нет доменного имени верхнего уровня. Его основная функция — направлять DNS-запросы дальше к серверу домена верхнего уровня. .
Домен верхнего уровня Домен верхнего уровня — это домен следующего уровня, расположенный сразу за корневым доменом, и обычно представляет собой идентификатор, представляющий страну или общую категорию. Например, .com, .org и .net — это общие общие домены верхнего уровня, а .us, .uk и .cn — это домены верхнего уровня, представляющие страны. Домены верхнего уровня управляются и назначаются администраторами доменов верхнего уровня. .com
Домен второго уровня Домен второго уровня — это домен следующего уровня под доменным именем верхнего уровня, который выбирается и регистрируется организациями, компаниями или частными лицами. Например, в доменном имени example.com «example» — это домен второго уровня. Доменные имена второго уровня могут использоваться для представления конкретной организации, бренда или услуги. example.com
дочерняя область Субдомен — это доменное имя более низкого уровня, расположенное ниже доменного имени второго уровня. Имена субдоменов создаются путем добавления префикса перед именем домена второго уровня. Например, «blog.example.com» — это поддомен доменного имени «example.com». Доменное имя третьего уровня: www.example.com

Доменное имя четвертого уровня: www.test.example.com

Иерархический стиль доменного имени соответствует иерархическому DNS-серверу, рассмотрим его ниже.

Иерархия DNS
DNS эффект Примечание
Корневой сервер имен Корневой сервер имен — это самый высокий уровень иерархии DNS и обозначается одной точкой (.). Это отправная точка всей системы DNS, которая отвечает за хранение и предоставление адресов серверов доменных имен верхнего уровня. В мире их всего 13, итеративный запрос
сервер доменных имен верхнего уровня Сервер доменных имен верхнего уровня расположен на следующем уровне иерархии DNS и отвечает за управление информацией DNS для определенных доменных имен верхнего уровня (таких как .com, .org, .net и т. д.). Каждое доменное имя верхнего уровня имеет свой собственный набор серверов доменных имен верхнего уровня, которые обслуживаются соответствующим управляющим агентством. Итеративный запрос
Авторитетный сервер доменных имен Авторитетные серверы имен — это серверы, ответственные за хранение и обслуживание записей DNS для определенного доменного имени. Каждое доменное имя имеет как минимум один авторитетный сервер имен. Итеративный запрос
локальный сервер имен Локальные серверы имен также называются рекурсивными серверами имен или серверами имен по умолчанию. Это DNS-сервер на компьютере или в сети пользователя, который обрабатывает запросы DNS с устройства пользователя. рекурсивный запрос

3. Как работает DNS?

персональный компьютер

Вопрос 1: 个人电脑Введите в браузере www.example.com. DNS-клиент сначала проверяет 个人电脑, есть ли соответствующее разрешение доменного имени в DNS-кэше.

A1: Если в кеше есть результат, результат будет возвращен. Если кеш не возвращает пустой

Вопрос 2: Если кеша нет, проверьте файл хостов

A2: Если есть, верните и кэшируйте его, если нет, верните пустым.

Персональный компьютер запрашивает локальный DNS-сервер

Вопрос 3: Если в приведенных выше вопросах 1 и 2 результат не найден, запрос разрешения доменного имени DNS будет инициирован к локальному DNS, настроенному 个人电脑вверх

A3: Локальный DNS-сервер возвращает результаты запроса.

Рабочий процесс локального сервера разрешения доменных имен

Вопрос 4. 本地域名服务器Запрос локального кэша DNS

A4: Если есть результат, он будет возвращен 本地域名服务器. Локальный сервер доменных имен вернет результат на персональный компьютер, то есть A3. Если результата нет, он вернет пустой.

Вопрос 5: Если A4 возвращает пустое значение, запросите конфигурацию разрешения DNS. Если есть результат, он будет возвращен 本地域名服务器и кэширован. 本地域名服务器Результат будет возвращен на 个人电脑шаг A3. Если результата нет, он вернет пустой.

 Если сервер доменных имен本地域名服务器 не находит результат в кеше или базе данных, он инициирует 根域名запрос к серверу.Эта часть запроса является итеративным запросом.

Вопрос 6: Начать 本地域名服务器запрос根域名服务器

A6: 根域名服务器На основе запрошенной информации о доменном имени верните IP-адрес сервера доменных имен верхнего уровня .com.

Вопрос 7. 本地域名服务器На основе 根域名服务器возвращенного 顶级域名服务器IP-адреса 顶级域名服务器инициируйте разрешение доменного имени для

A7: 顶级域名服务器На основе информации о доменном имени example.comвозвращаемый 权威域名服务器IP-адрес

Вопрос 8. 本地域名服务器На основании 顶级域名服务器полученной информации 权威域名服务器инициируйте разрешение доменного имени , чтобы

A8. 权威域名服务器Запросите конфигурацию кеша и доменного имени и верните результаты.

Наконец 本地域名服务器, результат возвращается на персональный компьютер, и это весь процесс разрешения доменного имени. Давайте посмотрим на процесс отслеживания доменного имени.Процесс dig www.example.com +traceотслеживания заключается в 域名服务器том, как найти процесс разрешения доменного имени.

### 13个根域名服务器
; <<>> DiG 9.10.6 <<>> www.example.com +trace
;; global options: +cmd
.   450212 IN NS i.root-servers.net.
.   450212 IN NS h.root-servers.net.
.   450212 IN NS k.root-servers.net.
.   450212 IN NS m.root-servers.net.
.   450212 IN NS a.root-servers.net.
.   450212 IN NS f.root-servers.net.
.   450212 IN NS g.root-servers.net.
.   450212 IN NS j.root-servers.net.
.   450212 IN NS b.root-servers.net.
.   450212 IN NS d.root-servers.net.
.   450212 IN NS e.root-servers.net.
.   450212 IN NS l.root-servers.net.
.   450212 IN NS c.root-servers.net.
;; Received 492 bytes from 10.1.210.254#53(10.1.210.254) in 53 ms

### 顶级域名服务器
com.   172800 IN NS b.gtld-servers.net.
com.   172800 IN NS k.gtld-servers.net.
com.   172800 IN NS f.gtld-servers.net.
com.   172800 IN NS a.gtld-servers.net.
com.   172800 IN NS e.gtld-servers.net.
com.   172800 IN NS g.gtld-servers.net.
com.   172800 IN NS m.gtld-servers.net.
com.   172800 IN NS d.gtld-servers.net.
com.   172800 IN NS h.gtld-servers.net.
com.   172800 IN NS i.gtld-servers.net.
com.   172800 IN NS j.gtld-servers.net.
com.   172800 IN NS c.gtld-servers.net.
com.   172800 IN NS l.gtld-servers.net.
com.   86400 IN DS 30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766
com.   86400 IN RRSIG DS 8 1 86400 20230723210000 20230710200000 11019 . eYYWsA8EHPJOEGhTFPZT0Dz4pvpZM+c5EHRLitOhjW1rX2ZP/zUE5mSs +ve23eY4NkMqZkEyYQf4FwxWMfDHcHU6FFgeFi7kSymwHf3OytZxctx8 gL2x+imyDxD/PYrgm8lr3j+q+cUOWD/KMcMerQfPpTkRl8iP6t0NG6o8 qAw9+77u3jGzo1XPnttU6s6m7Uhjv0FlhTHX3GVn3e2SOMTZ25GT4NMW i2MM/tRyoYPezwXca9/1o3owaUmHG9EwWRBymRxTzYwUVNQ0GUj42IK4 IYvQQ9fGK8+n+6JStKQ/zY6DNF1T/Bc+ncn1237nPdUr97ko8VgOdvTt BAJTlQ==
;; Received 1178 bytes from 192.5.5.241#53(f.root-servers.net) in 6 ms

### 权威域名服务器
example.com.  172800 IN NS a.iana-servers.net.
example.com.  172800 IN NS b.iana-servers.net.
example.com.  86400 IN DS 370 13 2 BE74359954660069D5C63D200C39F5603827D7DD02B56F120EE9F3A8 6764247C
example.com.  86400 IN RRSIG DS 8 2 86400 20230716061950 20230709050950 46551 com. N9fB0SSrFADxZEwXV4wPlH1qY8JEUVY6abdBPoaTB8IsWgJ4/BWJf0Tr 8+2ffU7fB0yAWViDZoUyV7yYa1gJvjssr0XjPDyB3VYYcyTlLgCzpNTX RLHcNAd7XU+/zmOBhTuNh6LNRXyaWT9cUTjhuTFENSt71xfm0bdThgb2 KB7ohKhn8JaDh5yPtExT+xs0TsFZtddSqtoLUnrxRLrBqQ==
;; Received 335 bytes from 192.35.51.30#53(f.gtld-servers.net) in 275 ms

### www.example.com 的解析记录,权威域名服务器199.43.135.53#53(a.iana-servers.net) 返回的结果

www.example.com. 86400 IN A 93.184.216.34
www.example.com. 86400 IN RRSIG A 13 3 86400 20230730082849 20230709062038 28328 example.com. hxwo2qMUYS/FKBwB6hQwzsne3IygLz2J9fq2GEfLJIsvmVsFefN0O+dd wnxXS4apxV/ZnOJbF1jqOiZUWbJy6Q==
;; Received 167 bytes from 199.43.135.53#53(a.iana-servers.net) in 294 ms

Введение в CoreDNS

CoreDNS — это гибкий DNS-сервер с открытым исходным кодом, предназначенный для замены традиционных DNS-серверов, таких как BIND. Это легкий модульный DNS-сервер с подключаемой архитектурой, который позволяет пользователям настраивать и расширять функциональные возможности по мере необходимости. CoreDNS — это инкубационный проект CNCF (Cloud Native Computing Foundation), который широко используется в облачных средах. Возможности CoreDNS:

  • Модульная конструкция: Основная идея CoreDNS состоит в том, чтобы разделить функции на подключаемые модули. Каждый модуль можно настраивать и расширять независимо, что позволяет пользователям настраивать и создавать собственный сервер разрешения DNS в соответствии с фактическими потребностями.
  • Поддерживает несколько протоколов DNS: CoreDNS поддерживает несколько протоколов DNS, включая распространенные протоколы DNS (например, UDP, TCP) и более новые протоколы (например, DNS через TLS, DNS через gRPC и т. д.).
  • Гибкий механизм плагинов: CoreDNS предоставляет богатую коллекцию плагинов. Пользователи могут включать, отключать и комбинировать эти плагины по мере необходимости для достижения различных функций, таких как кэширование, балансировка нагрузки, ведение журнала, пересылка, DNSSEC и т. д.
  • Простота настройки: CoreDNS использует краткий синтаксис файла конфигурации, который позволяет пользователям легко настраивать правила разрешения DNS и управлять ими без необходимости вникать в основные сложности.
  • Адаптация к облачным средам: CoreDNS широко используется в облачных средах. Он тесно интегрирован с технологиями контейнеризации (такими как Docker и Kubernetes) и может динамически адаптироваться к изменениям в контейнерах и кластерах для достижения эластичности и масштабируемости.
  • Высокая производительность: CoreDNS оптимизирован для обеспечения высоких возможностей одновременной обработки и скорости ответа, а также может обрабатывать большое количество запросов DNS.

Можно сказать  , что это внесло большой вклад в повышение технической производительности, и нет необходимости поддерживать сложные конфигурации привязки.Давайте рассмотрим практический пример CoreDNS использования CoreDNS .本地域名服务器

Практические случаи

1. Развертывание сервера CoreDNS.

  • Развертывание очень простое: посетите официальный сайт CoreDNS и нажмите, чтобы загрузить последнюю версию.Демонстрация автора представляет собой систему MAC, а загрузка — coredns_1.10.1_darwin_amd64.tgz.
  • разархивировать coredns_1.10.1_darwin_amd64.tgz
  • Настройте CoreDNS. Для настройки обратитесь к руководству CoreDNS.

кот

coredns.io:5300 {
    file db.coredns.io
}

example.io:53 {
    log
    errors
    file db.example.io
}

example.net:53 {
    file db.example.net
}

.:53 {
    kubernetes
    forward . 8.8.8.8
    log
    errors
    cache
}

Рабочий процесс настройки CoreDNS, описанный выше, выглядит следующим образом:

Запустить CoreDNS

./coredns -conf Corefile

2. Несколько записей A

Конфигурация cat Corefile

.:53 {
    health :8080
    #如果配置有变化10s reload一次
    reload 10s
    cache 60
    hosts  {
        1.1.1.1 test.com
        2.2.2.2 test.com
        fallthrough
    }
    #兜底方案,不在配置的域名走forward
    forward . 114.114.114.114
    prometheus :9153
    log . "{\"coredns_collect_log\":\"coredns_collect_log\",\"remote\":\"{remote}\",\"port\":{port},\"type\":\"{type}\",\"class\":\"{class}\",\"name\":\"{name}\",\"rcode\":\"{rcode}\",\"duration\":{duration}}"
}
  • запускать coredns -conf Corefile
  • тест nslookup test.com 127.0.0.1
  • Доменное имя, которого нет в тестовой конфигурации. nslookup www.baidu.com 127.0.0.1

3. Разрешение CNAME

В k8s может измениться IP-адрес модуля или службы. Нецелесообразно настраивать запись A. В этом случае целесообразнее изменить имя домена на сетевой идентификатор модуля или имя домена службы. Конфигурация cat Corefile:

.:53 {
    health :8080
    #如果配置有变化10s reload一次
    reload 10s
    cache 60
    hosts  {
        #test.com cname 到www.baidu.com
        rewrite name test.com www.baidu.com
        fallthrough
    }
    #兜底方案,不在配置的域名走forward
    forward . 114.114.114.114
    prometheus :9153
    log . "{\"coredns_collect_log\":\"coredns_collect_log\",\"remote\":\"{remote}\",\"port\":{port},\"type\":\"{type}\",\"class\":\"{class}\",\"name\":\"{name}\",\"rcode\":\"{rcode}\",\"duration\":{duration}}"
}
  • запускать coredns -conf Corefile
  • тест nslookup test.com 127.0.0.1

4. Регулярный анализ соответствия

При создании целевой страницы мероприятия мы хотим предотвратить блокировку доменного имени. Мы надеемся, что несколько доменных имен могут получить доступ к странице мероприятия. В этом случае обычные правила могут очень хорошо решить эту проблему. Конфигурация cat Corefile:

.:53 {
    health :8080
    #如果配置有变化10s reload一次
    reload 10s
    cache 60
    hosts  {
        #*.test.com cname 到www.baidu.com
        rewrite name (.*).test.com www.baidu.com
        fallthrough
    }
    #兜底方案,不在配置的域名走forward
    forward . 114.114.114.114
    prometheus :9153
    log . "{\"coredns_collect_log\":\"coredns_collect_log\",\"remote\":\"{remote}\",\"port\":{port},\"type\":\"{type}\",\"class\":\"{class}\",\"name\":\"{name}\",\"rcode\":\"{rcode}\",\"duration\":{duration}}"
}
  • запускать coredns -conf Corefile
  • тест nslookup w.test.com 127.0.0.1
  • nslookup test2.test.com 127.0.0.1
  • nslookup w666.test.com 127.0.0.1

5. Выполните разрешение и переадресацию DNS на основе разрешенного доменного имени.

Если DNS конфигурации хоста не разрешает определенное доменное имя, мы можем настроить другие DNS, чтобы помочь нам разрешить это доменное имя. Таким образом, нам не нужно изменять локальную конфигурацию DNS, нам нужно только точно настроить конфигурацию DNS. Конфигурация cat Corefile:

.:53 {
    health :8080
    #如果配置有变化10s reload一次
    reload 10s
    cache 60
    hosts  {
        #*.test.com cname 到www.baidu.com
        rewrite name (.*).test.com www.baidu.com
        fallthrough
    }
    #兜底方案,不在配置的域名走forward
    forward . 114.114.114.114
    prometheus :9153
    log . "{\"coredns_collect_log\":\"coredns_collect_log\",\"remote\":\"{remote}\",\"port\":{port},\"type\":\"{type}\",\"class\":\"{class}\",\"name\":\"{name}\",\"rcode\":\"{rcode}\",\"duration\":{duration}}"
}

#example.com 相关域名的走114.114.114.114做解析
example.com:53 {
    errors
    cache 30
    forward . 114.114.114.114
    reload
}

#baidu.com 相关域名的走8.8.8.8做解析
bai.com:53 {
    errors
    cache 30
    forward . 8.8.8.8
    reload
}
  • запускать coredns -conf Corefile
  • тест nslookup www.example.com 127.0.0.1
  • тест nslookup www.baidu.com 127.0.0.1

6. Запрещенный анализ IPv6.

Если в бизнесе не используется IPv6, вы можете отключить анализ IPv6, чтобы повысить производительность анализа DNS. Конфигурация cat Corefile:

.:53 {
    health :8080
    #如果配置有变化10s reload一次
    reload 10s
    cache 60
    hosts  {
        #*.test.com cname 到www.baidu.com
        rewrite name (.*).test.com www.baidu.com
        fallthrough
    }

    #禁用ipv6解析
    template IN AAAA .

    #兜底方案,不在配置的域名走forward
    forward . 114.114.114.114
    prometheus :9153
    log . "{\"coredns_collect_log\":\"coredns_collect_log\",\"remote\":\"{remote}\",\"port\":{port},\"type\":\"{type}\",\"class\":\"{class}\",\"name\":\"{name}\",\"rcode\":\"{rcode}\",\"duration\":{duration}}"
}

7. Унифицированное разрешение службы DNS для нескольких кластеров k8s.

  • Мы знаем имя домена и не уверены, в каком кластере находится ресурс. Мы хотим объединить DNS и разрешить недоступные ресурсы k8s в IP-адреса разных кластеров k8s через единый DNS.
Способ 1. Разные кластеры k8s используют разные доменные имена.
  • Например, если используется кластер A  acluster.local и кластер B  bcluster.local, имя домена по умолчанию можно изменить при установке кластера k8s. cluster.local
  • Таким образом, мы можем использовать возможности пересылки DNS.

Конфигурация cat Corefile

.:53 {
    health :8080
    #如果配置有变化10s reload一次
    reload 10s
    cache 60
    hosts  {
        #*.test.com cname 到www.baidu.com
        rewrite name (.*).test.com www.baidu.com
        fallthrough
    }
    #兜底方案,不在配置的域名走forward
    forward . 114.114.114.114
    prometheus :9153
    log . "{\"coredns_collect_log\":\"coredns_collect_log\",\"remote\":\"{remote}\",\"port\":{port},\"type\":\"{type}\",\"class\":\"{class}\",\"name\":\"{name}\",\"rcode\":\"{rcode}\",\"duration\":{duration}}"
}

#acluster.local 相关域名的走A集群的coredns做解析
acluster.local:53 {
    errors
    cache 30
    forward . A集群corednsip
    reload
}

#bcluster.local 相关域名的走B集群的coredns做解析
bcluster.local:53 {
    errors
    cache 30
    forward . B集群corednsip
    reload
}
  • запускать coredns -conf Corefile
  • тест nslookup servicename.namespace.svc.acluster.local 127.0.0.1
  • тест nslookup servicename.namespace.svc.bcluster.local 127.0.0.1
Способ 2. Используйте плагины. alternate
  • Два кластера k8s A и B уже развернули доменные имена  cluster.local. Им необходимо разрешить ресурсы в кластере за пределами кластера.  alternate Для  forward этого  мы используем косвенность fallthrough. То есть, если  servicename.namespace.svc.cluster.local не удается найти DNS кластера A, проверьте DNS кластера B.

Конфигурация cat Corefile

.:53 {
    health :8080
    #如果配置有变化10s reload一次
    reload 10s
    cache 60
    hosts  {
        #*.test.com cname 到www.baidu.com
        rewrite name (.*).test.com www.baidu.com
        fallthrough
    }
    #兜底方案,不在配置的域名走forward
    forward . 114.114.114.114
    prometheus :9153
    log . "{\"coredns_collect_log\":\"coredns_collect_log\",\"remote\":\"{remote}\",\"port\":{port},\"type\":\"{type}\",\"class\":\"{class}\",\"name\":\"{name}\",\"rcode\":\"{rcode}\",\"duration\":{duration}}"
}

#cluster.local 相关域名的先走A集群的coredns做解析,A集群dns没有解析走B集群dns查询
cluster.local:53 {
    errors
    cache 30
    forward . A集群corednsip
    alternate NXDOMAIN . B集群corednsip
    reload
}
  • запускать coredns -conf Corefile
  • тест nslookup servicename.namespace.svc.cluster.local 127.0.0.1

8. Smart DNS разрешает одно и то же доменное имя разным IP-адресам в разных сегментах сети.

  • Если нам нужен доступ к компьютерному залу поблизости, мы можем установить разные сегменты сети для разных компьютерных залов, а затем вернуть результаты анализа IP соответствующего компьютерного зала для запросов из разных компьютерных залов с одним и тем же доменным именем.

Конфигурация cat Corefile

:53 {
  view aaa {
    expr incidr(client_ip(), '127.0.0.0/24')
  }
  hosts {
    1.1.1.1 test.com
  }
}

.:53 {
  view bbb {
    expr incidr(client_ip(), '192.168.0.0/16')
  }
  hosts {
    2.2.2.2 test.com
  }
}

.:53 {
  hosts {
    3.3.3.3 test.com
  }
}
  • запускать coredns -conf Corefile
  • 127.0.0.1 #IP- тест  локального шлейфового интерфейса  nslookup test.com 127.0.0.1, возврат результатов1.1.1.1
  • 192.168.1.10 #Локальный IP- тест  сетевой карты eth0  nslookup test.com 192.168.1.10 , возврат результатов2.2.2.2

Guess you like

Origin blog.csdn.net/u012562943/article/details/133254491