Како Кубернетес под добија ИП адресу?

Белешка. трансл.: Овај чланак, који је написао СРЕ инжењер са ЛинкедИн-а, детаљно говори о унутрашњој магији у Кубернетес-у – тачније, интеракцији ЦРИ, ЦНИ и кубе-аписервер-а – која се дешава када следећем под-у треба да се додели ИП адреса.

Један од основних захтева Кубернетес мрежни модел је да сваки модул мора имати своју ИП адресу и било који други модул у кластеру мора бити у могућности да га контактира на тој адреси. Постоји много мрежних „провајдера“ (Фланнел, Цалицо, Цанал, итд.) који помажу у имплементацији овог мрежног модела.

Када сам први пут почео да радим са Кубернетес-ом, није ми било сасвим јасно како тачно подови добијају своје ИП адресе. Чак и са разумевањем како поједине компоненте функционишу, било је тешко замислити да раде заједно. На пример, знао сам чему служе ЦНИ додаци, али нисам имао појма како се тачно зову. Због тога сам одлучио да напишем овај чланак како бих поделио знање о различитим мрежним компонентама и како оне функционишу заједно у Кубернетес кластеру, што омогућава свакој подлози да добије сопствену јединствену ИП адресу.

Постоје различити начини за организовање умрежавања у Кубернетес-у, баш као што постоје различите опције времена извршавања за контејнере. Ова публикација ће користити Фланел да организује мрежу у кластер, и као извршно окружење - Цонтаинерд. Такође претпостављам да знате како функционише умрежавање између контејнера, па ћу се накратко дотакнути, само ради контекста.

Неки основни концепти

Контејнери и мрежа: кратак преглед

На Интернету постоји много одличних публикација које објашњавају како контејнери комуницирају једни са другима преко мреже. Стога ћу дати само општи преглед основних концепата и ограничити се на један приступ, који укључује креирање Линук моста и инкапсулирање пакета. Детаљи су изостављени, пошто сама тема умрежавања контејнера заслужује посебан чланак. Линкови ка неким посебно проницљивим и едукативним публикацијама биће наведени у наставку.

Контејнери на једном домаћину

Један од начина да се организује комуникација преко ИП адреса између контејнера који раде на истом хосту укључује креирање Линук моста. У ту сврху, виртуелни уређаји се креирају у Кубернетес-у (и Доцкер-у) ветх (виртуелни етернет). Један крај ветх уређаја се повезује са мрежним простором имена контејнера, а други са Линук мост на мрежи домаћина.

Сви контејнери на истом хосту имају један крај ветх-а повезан са мостом преко којег могу да комуницирају једни са другима путем ИП адреса. Линук мост такође има ИП адресу и делује као пролаз за излазни саобраћај из модула намењених другим чворовима.

Како Кубернетес под добија ИП адресу?

Контејнери на различитим домаћинима

Енкапсулација пакета је један метод који омогућава контејнерима на различитим чворовима да међусобно комуницирају користећи ИП адресе. У компанији Фланнел, технологија је одговорна за ову прилику. вклан, који „пакује“ оригинални пакет у УДП пакет и затим га шаље на одредиште.

У Кубернетес кластеру, Фланнел креира вклан уређај и у складу са тим ажурира табелу рута на сваком чвору. Сваки пакет намењен контејнеру на другом хосту пролази кроз вклан уређај и инкапсулиран је у УДП пакет. На одредишту, угнежђени пакет се издваја и прослеђује жељеној подлози.

Како Кубернетес под добија ИП адресу?
Напомена: Ово је само један од начина да организујете мрежну комуникацију између контејнера.

Шта је ЦРИ?

ЦРИ (Цонтаинер Рунтиме Интерфаце) је додатак који омогућава кубелету да користи различита окружења за извршавање контејнера. ЦРИ АПИ је уграђен у различита времена извршавања, тако да корисници могу да изаберу време извођења по свом избору.

Шта је ЦНИ?

ЦНИ Пројецт је а спецификација да организује универзално мрежно решење за Линук контејнере. Поред тога, укључује додаци, одговоран за различите функције приликом постављања под мреже. ЦНИ додатак је извршна датотека која је у складу са спецификацијом (о неким додацима ћемо говорити у наставку).

Додела подмрежа чворовима за додељивање ИП адреса подовима

Пошто сваки под у кластеру мора имати ИП адресу, важно је осигурати да је ова адреса јединствена. Ово се постиже додељивањем сваком чвору јединствене подмреже, из које се подовима на том чвору затим додељују ИП адресе.

Хост ИПАМ контролер

Када nodeipam прослеђен као параметар заставе --controllers кубе-контролер-менаџер, додељује засебну подмрежу (подЦИДР) сваком чвору из ЦИДР кластера (тј. опсег ИП адреса за мрежу кластера). Пошто се ови подЦИДР-ови не преклапају, постаје могуће да се сваком под-у додели јединствена ИП адреса.

Кубернетес чвору се додељује подЦИДР када је првобитно регистрован у кластеру. Да бисте променили подЦИДР чворова, морате да их одјавите и затим поново региструјете, правећи одговарајуће измене у конфигурацији Кубернетес контролног слоја између. Можете приказати подЦИДР чвора помоћу следеће команде:

$ kubectl get no <nodeName> -o json | jq '.spec.podCIDR'
10.244.0.0/24

Кубелет, рунтиме контејнера и ЦНИ додаци: како све то функционише

Заказивање под по чвору укључује много припремних корака. У овом одељку, фокусираћу се само на оне који су директно повезани са постављањем под мреже.

Заказивање под за одређени чвор покреће следећи ланац догађаја:

Како Кубернетес под добија ИП адресу?

Помоћ: Архитектура додатака Цонтаинерд ЦРИ.

Интеракција између времена извршавања контејнера и ЦНИ додатака

Сваки мрежни провајдер има свој ЦНИ додатак. Време извођења контејнера га покреће да конфигурише мрежу за под када се покрене. У случају контејнера, ЦНИ додатак покреће додатак Цонтаинерд ЦРИ.

Штавише, сваки провајдер има свог агента. Инсталиран је на свим Кубернетес чворовима и одговоран је за мрежну конфигурацију подова. Овај агент је или укључен у ЦНИ конфигурацију или га самостално креира на чвору. Конфигурација помаже ЦРИ додатку да одреди који ће ЦНИ додатак позвати.

Локација ЦНИ конфигурације се може прилагодити; подразумевано је у /etc/cni/net.d/<config-file>. Администратори кластера су такође одговорни за инсталирање ЦНИ додатака на сваки чвор кластера. Њихова локација је такође прилагодљива; подразумевани директоријум - /opt/cni/bin.

Када користите цонтаинерд, путање за конфигурацију додатка и бинарне датотеке се могу подесити у одељку [plugins.«io.containerd.grpc.v1.cri».cni] в конфигурациона датотека контејнера.

Пошто користимо Фланнел као нашег мрежног провајдера, хајде да причамо мало о његовом подешавању:

  • Фланнелд (Фланнел-ов демон) се обично инсталира у кластер као ДаемонСет са install-cni као инит контејнер.
  • Install-cni ствара ЦНИ конфигурациони фајл (/etc/cni/net.d/10-flannel.conflist) на сваком чвору.
  • Фланнелд креира вклан уређај, преузима мрежне метаподатке са АПИ сервера и прати ажурирања под. Како се креирају, он дистрибуира руте до свих подова у кластеру.
  • Ове руте омогућавају подовима да комуницирају једни са другима путем ИП адреса.

За детаљније информације о раду Фланнел-а, препоручујем коришћење линкова на крају чланка.

Ево дијаграма интеракције између додатка Цонтаинерд ЦРИ и додатака ЦНИ:

Како Кубернетес под добија ИП адресу?

Као што видите изнад, кубелет позива Цонтаинерд ЦРИ додатак да би направио под, који затим позива ЦНИ додатак да би конфигурисао мрежу модула. Чинећи то, ЦНИ додатак мрежног провајдера позива друге основне ЦНИ додатке да би конфигурисао различите аспекте мреже.

Интеракција између ЦНИ додатака

Постоје различити ЦНИ додаци чији је задатак да помогну у постављању мрежне комуникације између контејнера на хосту. Овај чланак ће говорити о три од њих.

ЦНИ додатак Фланнел

Када користите Фланнел као мрежног провајдера, позива компонента Цонтаинерд ЦРИ ЦНИ додатак Фланнелкористећи ЦНИ конфигурациону датотеку /etc/cni/net.d/10-flannel.conflist.

$ cat /etc/cni/net.d/10-flannel.conflist
{
  "name": "cni0",
  "plugins": [
    {
      "type": "flannel",
      "delegate": {
         "ipMasq": false,
        "hairpinMode": true,
        "isDefaultGateway": true
      }
    }
  ]
}

Фланнел ЦНИ додатак ради у спрези са Фланнелдом. Током покретања, Фланнелд преузима подЦИДР и друге детаље везане за мрежу са АПИ сервера и чува их у датотеци /run/flannel/subnet.env.

FLANNEL_NETWORK=10.244.0.0/16 
FLANNEL_SUBNET=10.244.0.1/24
FLANNEL_MTU=1450 
FLANNEL_IPMASQ=false

Додатак Фланнел ЦНИ користи податке из /run/flannel/subnet.env да конфигуришете и позовете додатак за ЦНИ мост.

ЦНИ плугин Бридге

Овај додатак се позива са следећом конфигурацијом:

{
  "name": "cni0",
  "type": "bridge",
  "mtu": 1450,
  "ipMasq": false,
  "isGateway": true,
  "ipam": {
    "type": "host-local",
    "subnet": "10.244.0.0/24"
  }
}

Када се позове први пут, креира Линук мост са «name»: «cni0», што је назначено у конфигурацији. Затим се прави ветх пар за сваку махуну. Један крај је повезан са мрежним простором имена контејнера, други је укључен у Линук мост на мрежи домаћина. ЦНИ плугин Бридге повезује све хост контејнере са Линук мостом на хост мрежи.

По завршетку подешавања ветх пара, Бридге додатак позива локални ИПАМ ЦНИ додатак. Тип ИПАМ додатка се може конфигурисати у ЦНИ конфигурацији коју ЦРИ додатак користи за позивање Фланнел ЦНИ додатка.

Хост-локални ИПАМ ЦНИ додаци

Бридге ЦНИ позива Хост-лоцал ИПАМ додатак ЦНИ са следећом конфигурацијом:

{
  "name": "cni0",
  "ipam": {
    "type": "host-local",
    "subnet": "10.244.0.0/24",
    "dataDir": "/var/lib/cni/networks"
  }
}

Локални ИПАМ додатак (IP Aдреса Mуправљање - управљање ИП адресом) враћа ИП адресу за контејнер из подмреже и чува додељену ИП адресу на хосту у директоријуму наведеном у одељку dataDir - /var/lib/cni/networks/<network-name=cni0>/<ip>. Ова датотека садржи ИД контејнера коме је ова ИП адреса додељена.

Приликом позивања ИПАМ додатка локалног домаћина, он враћа следеће податке:

{
  "ip4": {
    "ip": "10.244.4.2",
    "gateway": "10.244.4.3"
  },
  "dns": {}
}

Резиме

Кубе-цонтроллер-манагер додељује подЦИДР сваком чвору. Подови сваког чвора примају ИП адресе из адресног простора у додељеном подЦИДР опсегу. Пошто се подЦИДР-ови чворова не преклапају, сви подови добијају јединствене ИП адресе.

Администратор Кубернетес кластера конфигурише и инсталира кубелет, време извођења контејнера, агент мрежног провајдера и копира ЦНИ додатке на сваки чвор. Током покретања, агент мрежног провајдера генерише ЦНИ конфигурацију. Када је под заказан за чвор, кубелет позива ЦРИ додатак да га креира. Затим, ако се користи цонтаинерд, додатак Цонтаинерд ЦРИ позива ЦНИ додатак наведен у ЦНИ конфигурацији да би конфигурисао мрежу модула. Као резултат, капсула добија ИП адресу.

Требало ми је неко време да разумем све суптилности и нијансе свих ових интеракција. Надам се да ће вам ово искуство помоћи да боље разумете како Кубернетес функционише. Ако грешим у било чему, контактирајте ме на Twitter или на адреси [емаил заштићен]. Слободно се обратите ако желите да разговарате о аспектима овог чланка или било чему другом. Волео бих да ћаскам са вама!

референце

Контејнери и мрежа

Како функционише фланел?

ЦРИ и ЦНИ

ПС од преводиоца

Прочитајте и на нашем блогу:

Извор: ввв.хабр.цом

Додај коментар