ProHoster > Blog > Идораи > Чӣ тавр як pod Kubernetes суроғаи IP-ро мегирад?
Чӣ тавр як pod Kubernetes суроғаи IP-ро мегирад?
Шарҳ. тарҷума.: Ин мақола, ки аз ҷониби як муҳандиси SRE аз LinkedIn навишта шудааст, дар бораи ҷодугарии ботинӣ дар Кубернетес муфассал нақл мекунад - дақиқтараш, ҳамкории CRI, CNI ва kube-apiserver - ин вақте рух медиҳад, ки ба подкоҳи навбатӣ суроғаи IP таъин карда шавад.
Яке аз талаботи асосӣ Модели шабакаи Kubernetes он аст, ки ҳар як подкаст бояд суроғаи IP-и худро дошта бошад ва ҳар як подкоҳи дигари кластер бояд бо он суроға тамос гирад. Бисёр «провайдерҳои» шабакавӣ (Flannel, Calico, Canal ва ғайра) мавҷуданд, ки дар татбиқи ин модели шабакавӣ кӯмак мекунанд.
Вақте ки ман бори аввал бо Kubernetes кор карданро сар кардам, ба ман комилан равшан набуд, ки чӣ тавр поддонҳо суроғаҳои IP-и худро мегиранд. Ҳатто бо фаҳмидани он, ки ҷузъҳои инфиродӣ чӣ гуна кор мекунанд, тасаввур кардан душвор буд, ки онҳо якҷоя кор мекунанд. Масалан, ман медонистам, ки плагинҳои CNI барои чӣ ҳастанд, аммо ман намедонистам, ки онҳо чӣ гуна номида мешаванд. Аз ин рӯ, ман қарор додам, ки ин мақоларо барои мубодилаи дониш дар бораи ҷузъҳои гуногуни шабака ва чӣ гуна онҳо дар кластери Kubernetes якҷоя кор мекунанд, нависам, ки ба ҳар як pod суроғаи IP-и беназири худро медиҳад.
Дар Интернет бисёр нашрияҳои олӣ мавҷуданд, ки чӣ гуна контейнерҳо тавассути шабака бо ҳам муошират мекунанд. Аз ин рӯ, ман танҳо шарҳи умумии мафҳумҳои асосиро медиҳам ва худро бо як равиш маҳдуд мекунам, ки эҷоди пули Linux ва бастаҳоро фаро мегирад. Тафсилот партофта шудаанд, зеро худи мавзӯи шабакаи контейнерӣ сазовори мақолаи алоҳида аст. Истинодҳо ба баъзе нашрияҳои махсусан фаҳмо ва таълимӣ дар зер оварда мешаванд.
Контейнерҳо дар як мизбон
Як роҳи ташкили иртибот тавассути суроғаҳои IP байни контейнерҳое, ки дар як ҳост кор мекунанд, эҷоди пули Linux мебошад. Бо ин мақсад, дастгоҳҳои виртуалӣ дар Kubernetes (ва Docker) сохта шудаанд. veth (ethernet виртуалӣ). Як канори дастгоҳи veth ба фазои номи шабакаи контейнер пайваст мешавад, дигараш ба пули Linux дар шабакаи мизбон.
Ҳама контейнерҳо дар як мизбон як нӯги veth доранд, ки ба пул пайваст карда шудаанд, ки тавассути он онҳо метавонанд тавассути суроғаҳои IP бо ҳамдигар муошират кунанд. Пули Linux инчунин суроғаи IP дорад ва ҳамчун шлюз барои трафики хуруҷ аз блокҳои барои гиреҳҳои дигар таъиншуда амал мекунад.
Контейнерҳо дар ҳостҳои гуногун
Инкапсуляцияи пакет як усулест, ки ба контейнерҳо дар гиреҳҳои гуногун имкон медиҳад, ки бо истифода аз суроғаҳои IP бо ҳамдигар муошират кунанд. Дар Flannel технология барои ин имконият масъул аст. vxlan, ки бастаи аслиро ба бастаи UDP "баста" мекунад ва сипас онро ба макони таъинот мефиристад.
Дар кластери Kubernetes, Flannel як дастгоҳи vxlan эҷод мекунад ва ҷадвали масирро дар ҳар як гиреҳ мувофиқан нав мекунад. Ҳар як бастаи барои контейнер дар ҳости дигар таъиншуда аз дастгоҳи vxlan мегузарад ва дар бастаи UDP фаро гирифта шудааст. Дар макони таъинот, бастаи лонашуда истихроҷ карда мешавад ва ба қуттии дилхоҳ фиристода мешавад.
Эзоҳ: Ин танҳо як роҳи ташкили алоқаи шабакавӣ байни контейнерҳост.
Лоиҳаи CNI як аст мушаххасот ташкили ҳалли универсалии шабакавӣ барои контейнерҳои Linux. Илова бар ин, он дар бар мегирад плагинҳо, масъул барои вазифаҳои гуногун ҳангоми таъсиси шабакаи pod. Васлкунаки CNI файли иҷрошаванда аст, ки ба мушаххасот мувофиқат мекунад (мо дар зер баъзе плагинҳоро муҳокима хоҳем кард).
Тақсимоти зершабакаҳо ба гиреҳҳо барои таъини суроғаҳои IP ба pods
Азбаски ҳар як подкаст дар кластер бояд суроғаи IP дошта бошад, муҳим аст, ки ин суроға беназир аст. Ин тавассути таъин кардани ҳар як гиреҳ як зершабакаи беназир ба даст оварда мешавад, ки аз он ба подкастҳои он гиреҳ суроғаҳои IP таъин карда мешаванд.
Нозири гиреҳи IPAM
Ҳангоми nodeipam ҳамчун параметри парчам гузашт --controllersкубе-контроллер-мудир, он зершабакаи алоҳида (podCIDR) аз кластери CIDR (яъне диапазони суроғаҳои IP барои шабакаи кластер) ба ҳар як гиреҳ ҷудо мекунад. Азбаски ин podCIDRҳо ба ҳам мувофиқ нестанд, имкон пайдо мешавад, ки барои ҳар як подкаст суроғаи IP-и беназир ҷудо карда шавад.
Ба гиреҳи Kubernetes podCIDR таъин карда мешавад, вақте ки он дар аввал дар кластер ба қайд гирифта мешавад. Барои тағир додани podCIDR гиреҳҳо, шумо бояд онҳоро аз сабти ном хориҷ кунед ва сипас онҳоро аз нав сабт кунед ва дар байни конфигуратсияи қабати назоратии Kubernetes тағироти мувофиқ ворид кунед. Шумо метавонед podCIDR-и гиреҳро бо истифода аз фармони зерин намоиш диҳед:
$ kubectl get no <nodeName> -o json | jq '.spec.podCIDR'
10.244.0.0/24
Kube-controller-менеҷер ба ҳар як гиреҳ як podCIDR таъин мекунад. Ҳар як гиреҳ суроғаҳои IP-ро аз фазои суроғаҳо дар диапазони ҷудошудаи podCIDR мегиранд. Азбаски podCIDR-ҳои гиреҳҳо ба ҳам мувофиқ нестанд, ҳама подкҳо суроғаҳои IP-и беназир мегиранд.
Администратори кластери Kubernetes кубелет, вақти кори контейнер, агенти провайдери шабакаро танзим ва насб мекунад ва плагинҳои CNI-ро ба ҳар як гиреҳ нусхабардорӣ мекунад. Ҳангоми оғозёбӣ, агенти провайдери шабака конфигуратсияи CNI тавлид мекунад. Ҳангоме ки поддон ба гиреҳ ба нақша гирифта шудааст, kubelet плагини CRI-ро барои сохтани он даъват мекунад. Минбаъд, агар контейнер истифода шавад, плагини Containerd CRI плагини CNI-ро, ки дар конфигуратсияи CNI нишон дода шудааст, даъват мекунад, то шабакаи podро танзим кунад. Дар натиҷа, pod суроғаи IP мегирад.