/etc/resolv.conf Kubernetes поддондору үчүн, ndots:5 опциясы, бул колдонмонун иштешине кандайча терс таасирин тийгизиши мүмкүн

/etc/resolv.conf Kubernetes поддондору үчүн, ndots:5 опциясы, бул колдонмонун иштешине кандайча терс таасирин тийгизиши мүмкүн

Жакында Kops аркылуу AWSде Kubernetes 1.9 ишке киргиздик. Кечээ, биздин Kubernetes кластерлерибиздин эң чоңдоруна жаңы трафикти акырындык менен жайылтууда, мен биздин тиркеме тарабынан катталган адаттан тыш DNS аталышын чечүү каталарын байкай баштадым.

GitHubда бул тууралуу көп нерсе бар мындай деди:, ошондуктан мен да аны чечүүнү чечтим. Акыр-аягы, мен түшүндүм, биздин учурда бул жүктүн көбөйүшүнө байланыштуу kube-dns и dnsmasq. Мен үчүн эң кызыктуу жана жаңы нерсе, DNS суроо-талап трафигинин олуттуу өсүшүнө себеп болду. Менин постум бул жөнүндө жана бул тууралуу эмне кылуу керек.

Контейнердин ичиндеги DNS резолюциясы - бардык Linux системасындагыдай - конфигурация файлы менен аныкталат /etc/resolv.conf. Демейки Kubernetes dnsPolicy ал ClusterFirst, бул ар кандай DNS суроо-талаптары жөнөтүлөт дегенди билдирет dnsmasq, капчыкта чуркоо kube-dns кластердин ичинде, ал өз кезегинде өтүнмөнү колдонмого жөнөтөт kube-dns, аты кластердик суффикс менен аяктаса, же болбосо, жогорку деңгээлдеги DNS серверине.

билэ /etc/resolv.conf ар бир контейнердин ичинде демейки төмөнкүдөй болот:

nameserver 100.64.0.10
search namespace.svc.cluster.local svc.cluster.local cluster.local 
eu-west-1.compute.internal
options ndots:5

Көрүнүп тургандай, үч директива бар:

  1. Ат сервери бул кызматтын IP дареги kube-dns
  2. 4 жергиликтүү издөө домендери көрсөтүлгөн search
  3. Вариант бар ndots:5

Бул конфигурациянын кызыктуу бөлүгү - бул жергиликтүү издөө домендери жана орнотуулары ndots:5 бирге болгула. Муну түшүнүү үчүн, квалификациясыз ысымдар үчүн DNS резолюциясы кантип иштээрин түшүнүшүңүз керек.

Толук аты эмне?

Толук квалификациялуу ат – бул ат үчүн эч кандай жергиликтүү издөө жүргүзүлбөйт жана аталышты чечүү учурунда абсолюттук деп эсептелет. Конвенция боюнча, DNS программасы эгер ал чекит (.) менен аяктаса, аны толук квалификациялуу деп эсептейт, башка учурда толук квалификациялуу эмес. Башкача айтканда google.com. толугу менен аныкталган жана google.com - жок.

Квалификациясы жок ат кантип каралат?

Тиркеме атында көрсөтүлгөн алыскы хостко туташканда, DNS аталышын чечүү адатта тутумдук чалуу аркылуу ишке ашырылат, мис. getaddrinfo(). Бирок, эгер ат квалификациялуу эмес болсо (. менен бүтпөйт), мен кызык, системалык чалуу биринчи абсолюттук ат катары атын чечүүгө аракет кылабы же адегенде жергиликтүү издөө домендерин карап чыгабы? Бул вариантка жараша болот ndots.

Колдонмодон resolv.conf:

ndots:n

устанавливает порог для количества точек, которые должны появиться в имени, прежде чем будет сделан начальный абсолютный запрос. Значение по умолчанию для n равно 1, что означает, что если в имени есть какие-либо точки, имя будет сначала опробовано как абсолютное имя, прежде чем к нему будут добавлены какие-либо элементы списка поиска.

Бул эгер үчүн дегенди билдирет ndots 5 мааниси берилгенде жана аталыш 5 чекиттен азыраак болсо, системалык чалуу аны ырааттуу чечүүгө аракет кылат, адегенде бардык жергиликтүү издөө домендерин басып өтүп, эгер ийгиликсиз болсо, акыры аны абсолюттук ат катары чечет.

Эмнеге ndots:5 бул колдонмонун иштешине терс таасирин тийгизиши мүмкүнбү?

Сиз элестете тургандай, эгер сиздин тиркемеңиз тышкы трафикти көп колдонсо, ар бир орнотулган TCP байланышы үчүн (же тагыраак айтканда, ар бир чечилген ат үчүн), ал аты туура чечилгенге чейин 5 DNS суроосун берет, анткени ал биринчи жолу аркылуу өтөт. 4 жергиликтүү издөө доменин жана аягында абсолюттук аталышты чечүү өтүнүчүн берет.

Төмөнкү диаграмма биздин тиркемеде конфигурацияланган бир нече хост атын толук квалификациялуу болгондорго алмаштырганга чейинки жана андан кийинки 3 kube-dns модулдарыбыздагы жалпы трафикти көрсөтөт.

/etc/resolv.conf Kubernetes поддондору үчүн, ndots:5 опциясы, бул колдонмонун иштешине кандайча терс таасирин тийгизиши мүмкүн

Төмөнкү диаграмма биздин тиркемеде конфигурацияланган бир нече хост атын толук аттарга алмаштырганга чейинки жана андан кийинки колдонмонун күтүү убактысын көрсөтөт (тик көк сызык - жайылтуу):

/etc/resolv.conf Kubernetes поддондору үчүн, ndots:5 опциясы, бул колдонмонун иштешине кандайча терс таасирин тийгизиши мүмкүн

Чечим №1 - Толук квалификациялуу ысымдарды колдонуңуз

Эгер сизде көп сандагы байланыштарды түзгөн бир нече статикалык тышкы аталыштар (б.а. тиркеме конфигурациясында аныкталган) болсо, балким, эң жөнөкөй чечим аларды жөн гана кошуу менен толук квалификациялуу аттарга которуу болуп саналат. аягында.

Бул акыркы чечим эмес, бирок ал таза болбосо да, кырдаалды тез арада жакшыртууга жардам берет. Биз бул патчты көйгөйүбүздү чечүү үчүн колдондук, анын натыйжалары жогорудагы скриншоттордо көрсөтүлгөн.

Чечим №2 - настройка ndots в dnsConfig

Kubernetes 1.9-да функционалдуулук альфа режиминде (бета версия v1.10) пайда болду, бул сизге DNS параметрлерин подкаст касиети аркылуу жакшыраак башкарууга мүмкүндүк берет dnsConfig. Башка нерселер менен катар, бул маанини конфигурациялоого мүмкүндүк берет ndots белгилүү бир подъезд үчүн, б.а.

apiVersion: v1
kind: Pod
metadata:
  namespace: default
  name: dns-example
spec:
  containers:
    - name: test
      image: nginx
  dnsConfig:
    options:
      - name: ndots
        value: "1"

булактар

Биздин блогдогу башка макалаларды да окуңуз:

Source: www.habr.com

Комментарий кошуу