/etc/resolv.conf барои pods Kubernetes, опсияи ndots:5, чӣ гуна ин метавонад ба иҷрои барнома таъсири манфӣ расонад

/etc/resolv.conf барои pods Kubernetes, опсияи ndots:5, чӣ гуна ин метавонад ба иҷрои барнома таъсири манфӣ расонад

Мо ба наздикӣ Kubernetes 1.9-ро дар AWS бо истифода аз Kops оғоз кардем. Дирӯз, ҳангоми ба таври осон интиқол додани трафики нав ба бузургтарин кластерҳои Kubernetes, ман мушоҳида кардам, ки хатогиҳои ғайриоддии ҳалли номи DNS, ки аз ҷониби замимаи мо сабт шудаанд, мушоҳида кардам.

Дар бораи ин дар GitHub хеле зиёд аст сухан ронд, бинобар ин ман қарор додам, ки онро низ муайян кунам. Дар охир, ман фаҳмидам, ки дар ҳолати мо ин аз сабаби зиёд шудани сарборӣ аст kube-dns и dnsmasq. Барои ман чизи ҷолибтарин ва нав ин сабаби афзоиши назарраси трафики дархости DNS буд. Паёми ман дар бораи ин ва чӣ кор кардан дар ин бора аст.

Ҳалли DNS дар дохили контейнер - ба монанди ҳама гуна системаи Linux - аз ҷониби файли конфигуратсия муайян карда мешавад /etc/resolv.conf. Кубернетҳои пешфарз 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 барои pods Kubernetes, опсияи ndots:5, чӣ гуна ин метавонад ба иҷрои барнома таъсири манфӣ расонад

Диаграммаи зерин таъхири барномаро пеш аз ва баъд аз иваз кардани якчанд номи ҳостҳои дар замимаи мо танзимшуда ба номҳои пурра нишон медиҳад (хати кабуди амудӣ ҷойгиркунӣ аст):

/etc/resolv.conf барои pods Kubernetes, опсияи ndots:5, чӣ гуна ин метавонад ба иҷрои барнома таъсири манфӣ расонад

Ҳалли №1 - Номҳои пурраи мувофиқро истифода баред

Агар шумо якчанд номҳои статикии беруна дошта бошед (яъне дар конфигуратсияи барнома муайян карда шудааст), ки шумо ба онҳо шумораи зиёди пайвастҳо эҷод мекунед, шояд соддатарин роҳи ҳалли онҳо бо илова кардани онҳо ба номҳои пурраи тахассусӣ гузаштан аст. дар охир.

Ин ҳалли ниҳоӣ нест, аммо он барои зудтар беҳтар кардани вазъият, ҳарчанд тоза набошад ҳам, кӯмак мекунад. Мо ин часпро барои ҳалли мушкилоти худ истифода бурдем, ки натиҷаҳои он дар скриншотҳои боло нишон дода шудаанд.

Ҳалли №2 - мутобиқсозӣ ndots в dnsConfig

Дар Kubernetes 1.9, функсия дар ҳолати алфа пайдо шуд (версияи бета v1.10), ки ба шумо имкон медиҳад, ки параметрҳои DNS-ро тавассути амволи pod дар беҳтар идора кунед. dnsConfig. Дар байни чизҳои дигар, он ба шумо имкон медиҳад, ки арзишро танзим кунед ndots барои як поди мушаххас, яъне.

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

Манбаъҳои иттилоот

Инчунин мақолаҳои дигарро дар блоги мо хонед:

Манбаъ: will.com

Илова Эзоҳ