Како pod Kubernetes Π΄ΠΎΠ±ΠΈΠ²Π° IP адрСса?

Π—Π°Π±Π΅Π»Π΅ΡˆΠΊΠ°. ΠΏΡ€Π΅Π²ΠΎΠ΄.: Оваа ΡΡ‚Π°Ρ‚ΠΈΡ˜Π°, напишана ΠΎΠ΄ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ Π½Π° SRE ΠΎΠ΄ LinkedIn, Π΄Π΅Ρ‚Π°Π»Π½ΠΎ Π³ΠΈ ΠΎΠΏΡ„Π°ΡœΠ° Π²Π½Π°Ρ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° магија Π²ΠΎ Kubernetes - ΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎ, ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° CRI, CNI ΠΈ kube-apiserver - ΡˆΡ‚ΠΎ сС случува ΠΊΠΎΠ³Π° Π½Π° слСдниот pod Ρ‚Ρ€Π΅Π±Π° Π΄Π° ΠΌΡƒ сС Π΄ΠΎΠ΄Π΅Π»ΠΈ IP адрСса.

Π•Π΄Π΅Π½ ΠΎΠ΄ основнитС Π±Π°Ρ€Π°ΡšΠ° МодСл Π½Π° ΠΌΡ€Π΅ΠΆΠ° ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ Π΅ Π΄Π΅ΠΊΠ° сСкој pod ΠΌΠΎΡ€Π° Π΄Π° ΠΈΠΌΠ° своја IP адрСса ΠΈ кој Π±ΠΈΠ»ΠΎ Π΄Ρ€ΡƒΠ³ pod Π²ΠΎ кластСрот ΠΌΠΎΡ€Π° Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΎ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΈΡ€Π° Π½Π° Ρ‚Π°Π° адрСса. Има ΠΌΠ½ΠΎΠ³Ρƒ ΠΌΡ€Π΅ΠΆΠ½ΠΈ β€žΠΏΡ€ΠΎΠ²Π°Ρ˜Π΄Π΅Ρ€ΠΈβ€œ (Flannel, Calico, Canal ΠΈΡ‚Π½.) ΠΊΠΎΠΈ ΠΏΠΎΠΌΠ°Π³Π°Π°Ρ‚ Π²ΠΎ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° овој ΠΌΡ€Π΅ΠΆΠ΅Π½ ΠΌΠΎΠ΄Π΅Π».

Кога ΠΏΡ€Π²ΠΏΠ°Ρ‚ ΠΏΠΎΡ‡Π½Π°Π² Π΄Π° Ρ€Π°Π±ΠΎΡ‚Π°ΠΌ со Kubernetes, Π½Π΅ ΠΌΠΈ бСшС сосСма јасно ΠΊΠ°ΠΊΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ pods Π³ΠΈ Π΄ΠΎΠ±ΠΈΠ²Π°Π°Ρ‚ Π½ΠΈΠ²Π½ΠΈΡ‚Π΅ IP адрСси. Π”ΡƒΡ€ΠΈ ΠΈ со Ρ€Π°Π·Π±ΠΈΡ€Π°ΡšΠ΅ Π·Π° Ρ‚ΠΎΠ° ΠΊΠ°ΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°Π°Ρ‚ ΠΏΠΎΠ΅Π΄ΠΈΠ½Π΅Ρ‡Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ, бСшС Ρ‚Π΅ΡˆΠΊΠΎ Π΄Π° сС замисли Π΄Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ Π·Π°Π΅Π΄Π½ΠΎ. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π½Π°Π΅Π² Π·Π° ΡˆΡ‚ΠΎ слуТат CNI ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΡ†ΠΈΡ‚Π΅, Π½ΠΎ Π½Π΅ΠΌΠ°Π² ΠΏΠΎΠΈΠΌ ΠΊΠ°ΠΊΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ сС Π½Π°Ρ€Π΅ΠΊΡƒΠ²Π°Π°Ρ‚. Π—Π°Ρ‚ΠΎΠ°, Ρ€Π΅ΡˆΠΈΠ² Π΄Π° ја напишам ΠΎΠ²Π°Π° ΡΡ‚Π°Ρ‚ΠΈΡ˜Π° Π·Π° Π΄Π° сподСлам знаСњС Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ ΠΌΡ€Π΅ΠΆΠ½ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ ΠΈ ΠΊΠ°ΠΊΠΎ Ρ‚ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ Π·Π°Π΅Π΄Π½ΠΎ Π²ΠΎ кластСрот Kubernetes, ΡˆΡ‚ΠΎ ΠΌΡƒ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π½Π° сСкој pod Π΄Π° Π΄ΠΎΠ±ΠΈΠ΅ своја СдинствСна IP адрСса.

ΠŸΠΎΡΡ‚ΠΎΡ˜Π°Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π½Π°Ρ‡ΠΈΠ½ΠΈ Π·Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°ΡšΠ΅ Π½Π° Π²ΠΌΡ€Π΅ΠΆΡƒΠ²Π°ΡšΠ΅ Π²ΠΎ Kubernetes, исто ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ ΠΏΠΎΡΡ‚ΠΎΡ˜Π°Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΎΠΏΡ†ΠΈΠΈ Π·Π° Ρ‚Ρ€Π°Π΅ΡšΠ΅ Π·Π° ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈ. Оваа ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ќС користи Π€Π»Π°Π½Π΅Π» Π΄Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π° ΠΌΡ€Π΅ΠΆΠ° Π²ΠΎ кластСр ΠΈ ΠΊΠ°ΠΊΠΎ ΠΈΠ·Π²Ρ€ΡˆΠ½Π° срСдина - ΠšΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€. Π˜ΡΡ‚ΠΎ Ρ‚Π°ΠΊΠ°, прСтпоставувам Π΄Π΅ΠΊΠ° Π·Π½Π°Π΅Ρ‚Π΅ ΠΊΠ°ΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π° Π²ΠΌΡ€Π΅ΠΆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ ΠΏΠΎΠΌΠ΅Ρ“Ρƒ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈΡ‚Π΅, ΠΏΠ° ќС Π³ΠΎ Π΄ΠΎΠΏΡ€Π°ΠΌ само Π½Π°ΠΊΡ€Π°Ρ‚ΠΊΠΎ, само Π·Π° контСкст.

НСкои основни ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΠΈ

ΠšΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈΡ‚Π΅ ΠΈ ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°: ΠšΡ€Π°Ρ‚ΠΎΠΊ ΠΏΡ€Π΅Π³Π»Π΅Π΄

Има ΠΌΠ½ΠΎΠ³Ρƒ ΠΎΠ΄Π»ΠΈΡ‡Π½ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π½Π° Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ ΠΊΠΎΠΈ ΠΎΠ±Ρ˜Π°ΡΠ½ΡƒΠ²Π°Π°Ρ‚ ΠΊΠ°ΠΊΠΎ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈΡ‚Π΅ ΠΊΠΎΠΌΡƒΠ½ΠΈΡ†ΠΈΡ€Π°Π°Ρ‚ Π΅Π΄Π½ΠΈ со Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΡ€Π΅ΠΊΡƒ ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°. Π—Π°Ρ‚ΠΎΠ°, ќС Π΄Π°Π΄Π°ΠΌ само ΠΎΠΏΡˆΡ‚ ΠΏΡ€Π΅Π³Π»Π΅Π΄ Π½Π° основнитС ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΠΈ ΠΈ ќС сС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π°ΠΌ Π½Π° Π΅Π΄Π΅Π½ пристап, кој Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π° создавањС Π½Π° мост Π·Π° Linux ΠΈ ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ. Π”Π΅Ρ‚Π°Π»ΠΈΡ‚Π΅ сС ΠΈΡΠΏΡƒΡˆΡ‚Π΅Π½ΠΈ, бидСјќи самата Ρ‚Π΅ΠΌΠ° Π·Π° Π²ΠΌΡ€Π΅ΠΆΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈ заслуТува посСбна ΡΡ‚Π°Ρ‚ΠΈΡ˜Π°. ΠŸΠΎΠ΄ΠΎΠ»Ρƒ ќС Π±ΠΈΠ΄Π°Ρ‚ Π΄Π°Π΄Π΅Π½ΠΈ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΈ Π΄ΠΎ Π½Π΅ΠΊΠΎΠΈ особСно ΠΏΡ€ΠΎΠ½ΠΈΠΊΠ»ΠΈΠ²ΠΈ ΠΈ Π΅Π΄ΡƒΠΊΠ°Ρ‚ΠΈΠ²Π½ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ.

ΠšΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈ Π½Π° Π΅Π΄Π΅Π½ домаќин

Π•Π΄Π΅Π½ Π½Π°Ρ‡ΠΈΠ½ Π΄Π° сС ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π° ΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΏΡ€Π΅ΠΊΡƒ IP адрСси ΠΏΠΎΠΌΠ΅Ρ“Ρƒ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈΡ‚Π΅ ΡˆΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ Π½Π° истиот хост Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π° создавањС Π½Π° Линукс мост. Π—Π° Ρ‚Π°Π° Ρ†Π΅Π», Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½ΠΈΡ‚Π΅ ΡƒΡ€Π΅Π΄ΠΈ сС ΠΊΡ€Π΅ΠΈΡ€Π°Π½ΠΈ Π²ΠΎ Kubernetes (ΠΈ Docker) veth (Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π΅Π½ Π΅Ρ‚Π΅Ρ€Π½Π΅Ρ‚). Π•Π΄Π½ΠΈΠΎΡ‚ ΠΊΡ€Π°Ρ˜ Π½Π° ΡƒΡ€Π΅Π΄ΠΎΡ‚ veth сС ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π° со ΠΌΡ€Π΅ΠΆΠ½ΠΈΠΎΡ‚ имСнски простор Π½Π° ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΎΡ‚, Π΄Ρ€ΡƒΠ³ΠΈΠΎΡ‚ со Линукс мост Π½Π° ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° домаќин.

Π‘ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈ Π½Π° ист хост ΠΈΠΌΠ°Π°Ρ‚ Π΅Π΄Π½ΠΈΠΎΡ‚ ΠΊΡ€Π°Ρ˜ Π½Π° Π²Π΅Ρ‚ΠΎΡ‚ ΠΏΠΎΠ²Ρ€Π·Π°Π½ со мост ΠΏΡ€Π΅ΠΊΡƒ кој ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° ΠΊΠΎΠΌΡƒΠ½ΠΈΡ†ΠΈΡ€Π°Π°Ρ‚ ΠΌΠ΅Ρ“Ρƒ сСбС ΠΏΡ€Π΅ΠΊΡƒ IP адрСси. Линукс мостот ΠΈΠΌΠ° ΠΈ IP адрСса ΠΈ Π΄Π΅Π»ΡƒΠ²Π° ΠΊΠ°ΠΊΠΎ ΠΏΠΎΡ€Ρ‚Π° Π·Π° ΠΈΠ·Π»Π΅Π·Π½ΠΈΠΎΡ‚ ΡΠΎΠΎΠ±Ρ€Π°ΡœΠ°Ρ˜ ΠΎΠ΄ ΠΏΠΎΠ΄ΠΎΠ²ΠΈΡ‚Π΅ Π½Π°ΠΌΠ΅Π½Π΅Ρ‚ΠΈ Π·Π° Π΄Ρ€ΡƒΠ³ΠΈ јазли.

Како pod Kubernetes Π΄ΠΎΠ±ΠΈΠ²Π° IP адрСса?

ΠšΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ домаќини

Π•Π½ΠΊΠ°ΠΏΡΡƒΠ»Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π΅ Π΅Π΄Π΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ кој ΠΈΠΌ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π½Π° ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈΡ‚Π΅ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ јазли Π΄Π° ΠΊΠΎΠΌΡƒΠ½ΠΈΡ†ΠΈΡ€Π°Π°Ρ‚ Π΅Π΄Π½ΠΈ со Π΄Ρ€ΡƒΠ³ΠΈ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ IP адрСси. Π’ΠΎ Flannel, Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡ˜Π°Ρ‚Π° Π΅ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€Π½Π° Π·Π° ΠΎΠ²Π°Π° моТност. vxlan, кој Π³ΠΎ β€žΡΠΏΠ°ΠΊΡƒΠ²Π°β€œ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΈΠΎΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ Π²ΠΎ UDP ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΈ ΠΏΠΎΡ‚ΠΎΠ° Π³ΠΎ ΠΈΡΠΏΡ€Π°ΡœΠ° Π΄ΠΎ Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° Π΄Π΅ΡΡ‚ΠΈΠ½Π°Ρ†ΠΈΡ˜Π°.

Π’ΠΎ кластСрот Kubernetes, Flannel создава ΡƒΡ€Π΅Π΄ vxlan ΠΈ соодвСтно ја Π°ΠΆΡƒΡ€ΠΈΡ€Π° Ρ‚Π°Π±Π΅Π»Π°Ρ‚Π° Π·Π° Ρ€ΡƒΡ‚ΠΈ Π½Π° сСкој јазол. БСкој ΠΏΠ°ΠΊΠ΅Ρ‚ Π½Π°ΠΌΠ΅Π½Π΅Ρ‚ Π·Π° ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ домаќин ΠΏΠΎΠΌΠΈΠ½ΡƒΠ²Π° Π½ΠΈΠ· ΡƒΡ€Π΅Π΄ΠΎΡ‚ vxlan ΠΈ Π΅ инкапсулиран Π²ΠΎ UDP ΠΏΠ°ΠΊΠ΅Ρ‚. На Π΄Π΅ΡΡ‚ΠΈΠ½Π°Ρ†ΠΈΡ˜Π°Ρ‚Π°, Π²Π³Π½Π΅Π·Π΄Π΅Π½ΠΈΠΎΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ сС ΠΈΠ·Π²Π»Π΅ΠΊΡƒΠ²Π° ΠΈ сС ΠΏΡ€Π΅ΠΏΡ€Π°ΡœΠ° Π΄ΠΎ саканиот ΠΏΠΎΠ΄.

Како pod Kubernetes Π΄ΠΎΠ±ΠΈΠ²Π° IP адрСса?
Π—Π°Π±Π΅Π»Π΅ΡˆΠΊΠ°: ΠΎΠ²Π° Π΅ само Π΅Π΄Π΅Π½ Π½Π°Ρ‡ΠΈΠ½ Π΄Π° сС ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π° ΠΌΡ€Π΅ΠΆΠ½Π°Ρ‚Π° ΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΏΠΎΠΌΠ΅Ρ“Ρƒ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈΡ‚Π΅.

Π¨Ρ‚ΠΎ Π΅ CRI?

CRI (ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜Ρ Π·Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ‚Ρ€Π°Π΅ΡšΠ΅ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€) Π΅ Π΄ΠΎΠ΄Π°Ρ‚ΠΎΠΊ кој ΠΌΡƒ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π½Π° kubelet Π΄Π° користи Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ срСдини Π·Π° ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈ. CRI API Π΅ Π²Π³Ρ€Π°Π΄Π΅Π½ Π²ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ Π²Ρ€Π΅ΠΌΠΈΡšΠ°, Ρ‚Π°ΠΊΠ° ΡˆΡ‚ΠΎ корисницитС ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° Π³ΠΎ ΠΈΠ·Π±Π΅Ρ€Π°Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΠΎ свој ΠΈΠ·Π±ΠΎΡ€.

Π¨Ρ‚ΠΎ Π΅ CNI?

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ CNI Π΅ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π΄Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π° ΡƒΠ½ΠΈΠ²Π΅Ρ€Π·Π°Π»Π½ΠΎ ΠΌΡ€Π΅ΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π° ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈ Π·Π° Linux. ΠŸΠΎΠΊΡ€Π°Ρ˜ Ρ‚ΠΎΠ°, Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π° ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΡ†ΠΈ, ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€Π΅Π½ Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈ ΠΏΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΏΠΎΠ΄-ΠΌΡ€Π΅ΠΆΠ°. ΠŸΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊΠΎΡ‚ CNI Π΅ ΠΈΠ·Π²Ρ€ΡˆΠ½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° ΡˆΡ‚ΠΎ Π΅ Π²ΠΎ согласност со ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° (ќС Ρ€Π°Π·Π³ΠΎΠ²Π°Ρ€Π°ΠΌΠ΅ Π·Π° Π½Π΅ΠΊΠΎΠΈ ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΡ†ΠΈ ΠΏΠΎΠ΄ΠΎΠ»Ρƒ).

РаспрСдСлба Π½Π° ΠΏΠΎΠ΄ΠΌΡ€Π΅ΠΆΠΈ Π½Π° јазли Π·Π° Π΄ΠΎΠ΄Π΅Π»ΡƒΠ²Π°ΡšΠ΅ IP адрСси Π½Π° pods

Π‘ΠΈΠ΄Π΅Ρ˜ΡœΠΈ сСкој Π΄Π΅Π» Π²ΠΎ кластСрот ΠΌΠΎΡ€Π° Π΄Π° ΠΈΠΌΠ° IP адрСса, Π²Π°ΠΆΠ½ΠΎ Π΅ Π΄Π° сС осигуратС Π΄Π΅ΠΊΠ° ΠΎΠ²Π°Π° адрСса Π΅ СдинствСна. Ова сС постигнува со Π΄ΠΎΠ΄Π΅Π»ΡƒΠ²Π°ΡšΠ΅ Π½Π° сСкој јазол ΡƒΠ½ΠΈΠΊΠ°Ρ‚Π½Π° ΠΏΠΎΠ΄ΠΌΡ€Π΅ΠΆΠ°, ΠΎΠ΄ која Π½Π° ΠΏΠΎΠ΄ΠΎΠ²ΠΈΡ‚Π΅ Π½Π° Ρ‚ΠΎΡ˜ јазол ΠΏΠΎΡ‚ΠΎΠ° ΠΈΠΌ сС Π΄ΠΎΠ΄Π΅Π»ΡƒΠ²Π°Π°Ρ‚ IP адрСси.

Јазол IPAM ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€

Кога nodeipam ΠΏΠΎΠΌΠΈΠ½Π° ΠΊΠ°ΠΊΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ Π·Π° Π·Π½Π°ΠΌΠ΅Π½Ρ†Π΅ --controllers ΠΊΡƒΠ±Π΅-ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€-ΠΌΠ΅Π½Π°ΡŸΠ΅Ρ€, Π΄ΠΎΠ΄Π΅Π»ΡƒΠ²Π° посСбна ΠΏΠΎΠ΄ΠΌΡ€Π΅ΠΆΠ° (podCIDR) Π½Π° сСкој јазол ΠΎΠ΄ кластСрот CIDR (Ρ‚.Π΅. опсСгот Π½Π° IP адрСси Π·Π° ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° Π½Π° кластСрот). Π‘ΠΈΠ΄Π΅Ρ˜ΡœΠΈ ΠΎΠ²ΠΈΠ΅ podCIDR Π½Π΅ сС ΠΏΡ€Π΅ΠΊΠ»ΠΎΠΏΡƒΠ²Π°Π°Ρ‚, станува Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π° сСкој pod Π΄Π° ΠΌΡƒ Π±ΠΈΠ΄Π΅ Π΄ΠΎΠ΄Π΅Π»Π΅Π½Π° СдинствСна IP адрСса.

На Ρ˜Π°Π·ΠΎΠ»ΠΎΡ‚ Kubernetes ΠΌΡƒ сС Π΄ΠΎΠ΄Π΅Π»ΡƒΠ²Π° podCIDR ΠΊΠΎΠ³Π° ΠΏΡ€Π²ΠΈΡ‡Π½ΠΎ Π΅ рСгистриран Π²ΠΎ кластСрот. Π—Π° Π΄Π° Π³ΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ podCIDR Π½Π° Ρ˜Π°Π·Π»ΠΈΡ‚Π΅, Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΈ одрСгистриратС ΠΈ ΠΏΠΎΡ‚ΠΎΠ° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π΄Π° Π³ΠΈ рСгистриратС, ΠΏΡ€Π°Π²Π΅Ρ˜ΡœΠΈ соодвСтни ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π²ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½ΠΈΠΎΡ‚ слој Π½Π° Kubernetes ΠΏΠΎΠΌΠ΅Ρ“Ρƒ. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ ΠΏΡ€ΠΈΠΊΠ°ΠΆΠ΅Ρ‚Π΅ podCIDR Π½Π° јазол ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ ја слСднава ΠΊΠΎΠΌΠ°Π½Π΄Π°:

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

Kubelet, ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΡ†ΠΈ Π·Π° Ρ‚Ρ€Π°Π΅ΡšΠ΅ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈ ΠΈ CNI: ΠΊΠ°ΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π° сСто Ρ‚ΠΎΠ°

Π—Π°ΠΊΠ°ΠΆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° ΠΏΠΎΠ΄ ΠΏΠΎ јазол Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π° ΠΌΠ½ΠΎΠ³Ρƒ ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²ΠΈΡ‚Π΅Π»Π½ΠΈ Ρ‡Π΅ΠΊΠΎΡ€ΠΈ. Π’ΠΎ овој Π΄Π΅Π», ќС сС фокусирам само Π½Π° ΠΎΠ½ΠΈΠ΅ ΠΊΠΎΠΈ сС Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ ΠΏΠΎΠ²Ρ€Π·Π°Π½ΠΈ со ΠΏΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° pod-ΠΌΡ€Π΅ΠΆΠ°.

Π—Π°ΠΊΠ°ΠΆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° pod Π΄ΠΎ ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ јазол Π³ΠΎ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π° слСдниов ΡΠΈΠ½ΡŸΠΈΡ€ Π½Π° настани:

Како pod Kubernetes Π΄ΠΎΠ±ΠΈΠ²Π° IP адрСса?

Помош: Architecture of Containerd CRI plugins.

Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ†ΠΈΡ˜Π° ΠΏΠΎΠΌΠ΅Ρ“Ρƒ Ρ‚Ρ€Π°Π΅ΡšΠ΅ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ ΠΈ CNI ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΡ†ΠΈ

БСкој ΠΌΡ€Π΅ΠΆΠ΅Π½ ΠΏΡ€ΠΎΠ²Π°Ρ˜Π΄Π΅Ρ€ ΠΈΠΌΠ° свој CNI ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊ. Π’Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΎΡ‚ Π³ΠΎ ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π° Π·Π° Π΄Π° ја ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π° ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° Π·Π° ΠΏΠΎΠ΄Π»ΠΎΠ³Π°Ρ‚Π° Π΄ΠΎΠ΄Π΅ΠΊΠ° сС стартува. Π’ΠΎ ΡΠ»ΡƒΡ‡Π°Ρ˜ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€, ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊΠΎΡ‚ CNI сС Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π° ΠΎΠ΄ ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊΠΎΡ‚ ΠšΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ CRI.

ΠŸΠΎΠΊΡ€Π°Ρ˜ Ρ‚ΠΎΠ°, сСкој ΠΏΡ€ΠΎΠ²Π°Ρ˜Π΄Π΅Ρ€ ΠΈΠΌΠ° свој Π°Π³Π΅Π½Ρ‚. Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Π½ Π΅ Π½Π° ситС Kubernetes јазли ΠΈ Π΅ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€Π΅Π½ Π·Π° ΠΌΡ€Π΅ΠΆΠ½Π°Ρ‚Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° Π½Π° pods. Овој Π°Π³Π΅Π½Ρ‚ Π΅ ΠΈΠ»ΠΈ Π²ΠΊΠ»ΡƒΡ‡Π΅Π½ Π²ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° CNI ΠΈΠ»ΠΈ нСзависно Π³ΠΎ создава Π½Π° Ρ˜Π°Π·ΠΎΠ»ΠΎΡ‚. ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° ΠΌΡƒ ΠΏΠΎΠΌΠ°Π³Π° Π½Π° CRI ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊΠΎΡ‚ Π΄Π° постави кој CNI ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊ Π΄Π° Π³ΠΎ ΠΏΠΎΠ²ΠΈΠΊΠ°.

Π›ΠΎΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° CNI ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€ΠΈΠ»Π°Π³ΠΎΠ΄ΠΈ; стандардно Π΅ Π²Π½Π°Ρ‚Ρ€Π΅ /etc/cni/net.d/<config-file>. АдминистраторитС Π½Π° кластСрот исто Ρ‚Π°ΠΊΠ° сС ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€Π½ΠΈ Π·Π° ΠΈΠ½ΡΡ‚Π°Π»ΠΈΡ€Π°ΡšΠ΅ Π½Π° CNI ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΡ†ΠΈ Π½Π° сСкој јазол Π½Π° кластСрот. Нивната Π»ΠΎΠΊΠ°Ρ†ΠΈΡ˜Π° Π΅ исто Ρ‚Π°ΠΊΠ° приспособлива; стандардСн Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌ - /opt/cni/bin.

Кога користитС ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€, ΠΏΠ°Ρ‚Π΅ΠΊΠΈΡ‚Π΅ Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊΠΎΡ‚ ΠΈ Π±ΠΈΠ½Π°Ρ€Π½ΠΈΡ‚Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС постават Π²ΠΎ Π΄Π΅Π»ΠΎΡ‚ [plugins.Β«io.containerd.grpc.v1.criΒ».cni] Π² конфигурациска Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° Π½Π° ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€.

Π‘ΠΈΠ΄Π΅Ρ˜ΡœΠΈ користимС Flannel ΠΊΠ°ΠΊΠΎ наш ΠΌΡ€Π΅ΠΆΠ΅Π½ ΠΏΡ€ΠΎΠ²Π°Ρ˜Π΄Π΅Ρ€, ајдС Π΄Π° Ρ€Π°Π·Π³ΠΎΠ²Π°Ρ€Π°ΠΌΠ΅ ΠΌΠ°Π»ΠΊΡƒ Π·Π° Π½Π΅Π³ΠΎΠ²ΠΎΡ‚ΠΎ ΠΏΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅:

  • Flanneld (Flannel's daemon) ΠΎΠ±ΠΈΡ‡Π½ΠΎ сС инсталира Π²ΠΎ кластСр ΠΊΠ°ΠΊΠΎ DaemonSet со install-cni ΠΊΠ°ΠΊΠΎ ΠΈΠ½ΠΈΡ‚ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€.
  • Install-cni создава CNI конфигурациска Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° (/etc/cni/net.d/10-flannel.conflist) Π½Π° сСкој јазол.
  • Flanneld создава ΡƒΡ€Π΅Π΄ vxlan, Π³ΠΈ Π²Π°Π΄ΠΈ ΠΌΡ€Π΅ΠΆΠ½ΠΈΡ‚Π΅ ΠΌΠ΅Ρ‚Π°ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΎΠ΄ сСрвСрот API ΠΈ Π³ΠΈ слСди Π°ΠΆΡƒΡ€ΠΈΡ€Π°ΡšΠ°Ρ‚Π° Π½Π° pod. Како ΡˆΡ‚ΠΎ сС создаваат, Ρ‚ΠΎΡ˜ дистрибуира ΠΏΡ€Π°Π²Ρ†ΠΈ Π΄ΠΎ ситС ΠΌΠ΅ΡˆΡƒΠ½ΠΊΠΈ Π½ΠΈΠ· кластСрот.
  • ОвиС Ρ€ΡƒΡ‚ΠΈ ΠΈΠΌ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π°Π°Ρ‚ Π½Π° ΠΏΠΎΠ΄ΠΎΠ²ΠΈΡ‚Π΅ Π΄Π° ΠΊΠΎΠΌΡƒΠ½ΠΈΡ†ΠΈΡ€Π°Π°Ρ‚ Π΅Π΄Π½ΠΈ со Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΡ€Π΅ΠΊΡƒ IP адрСси.

Π—Π° ΠΏΠΎΠ΄Π΅Ρ‚Π°Π»Π½ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° Π€Π»Π°Π½Π΅Π», ΠΏΡ€Π΅ΠΏΠΎΡ€Π°Ρ‡ΡƒΠ²Π°ΠΌ Π΄Π° Π³ΠΈ користитС врскитС Π½Π° ΠΊΡ€Π°Ρ˜ΠΎΡ‚ ΠΎΠ΄ ΡΡ‚Π°Ρ‚ΠΈΡ˜Π°Ρ‚Π°.

Π•Π²Π΅ Π΄ΠΈΡ˜Π°Π³Ρ€Π°ΠΌ Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° ΠΏΠΎΠΌΠ΅Ρ“Ρƒ ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊΠΎΡ‚ Containerd CRI ΠΈ CNI ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΡ†ΠΈΡ‚Π΅:

Како pod Kubernetes Π΄ΠΎΠ±ΠΈΠ²Π° IP адрСса?

Како ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΠΎΠ³ΠΎΡ€Π΅, kubelet Π³ΠΎ ΠΏΠΎΠ²ΠΈΠΊΡƒΠ²Π° Π΄ΠΎΠ΄Π°Ρ‚ΠΎΠΊΠΎΡ‚ Containerd CRI Π·Π° Π΄Π° Π³ΠΎ создадС ΠΏΠΎΠ΄ΠΎΡ‚, кој ΠΏΠΎΡ‚ΠΎΠ° Π³ΠΎ ΠΏΠΎΠ²ΠΈΠΊΡƒΠ²Π° Π΄ΠΎΠ΄Π°Ρ‚ΠΎΠΊΠΎΡ‚ CNI Π·Π° Π΄Π° ја ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π° ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π»ΠΎΠ³Π°Ρ‚Π°. ΠŸΡ€ΠΈΡ‚ΠΎΠ°, CNI ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊΠΎΡ‚ Π½Π° Π΄Π°Π²Π°Ρ‚Π΅Π»ΠΎΡ‚ Π½Π° ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° ΠΏΠΎΠ²ΠΈΠΊΡƒΠ²Π° Π΄Ρ€ΡƒΠ³ΠΈ основни CNI ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΡ†ΠΈ Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°ΡšΠ΅ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ аспСкти Π½Π° ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°.

Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ†ΠΈΡ˜Π° ΠΏΠΎΠΌΠ΅Ρ“Ρƒ CNI ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΡ†ΠΈΡ‚Π΅

ΠŸΠΎΡΡ‚ΠΎΡ˜Π°Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ CNI ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΡ†ΠΈ Ρ‡ΠΈΡ˜Π° Π·Π°Π΄Π°Ρ‡Π° Π΅ Π΄Π° ΠΏΠΎΠΌΠΎΠ³Π½Π°Ρ‚ Π²ΠΎ ΠΏΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ ΠΌΡ€Π΅ΠΆΠ½Π° ΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΏΠΎΠΌΠ΅Ρ“Ρƒ ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈΡ‚Π΅ Π½Π° Π΄ΠΎΠΌΠ°ΡœΠΈΠ½ΠΎΡ‚. Оваа ΡΡ‚Π°Ρ‚ΠΈΡ˜Π° ќС Ρ€Π°Π·Π³ΠΎΠ²Π°Ρ€Π° Π·Π° Ρ‚Ρ€ΠΈ ΠΎΠ΄ Π½ΠΈΠ².

CNI ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊ Flannel

Кога користитС Flannel ΠΊΠ°ΠΊΠΎ ΠΌΡ€Π΅ΠΆΠ΅Π½ ΠΏΡ€ΠΎΠ²Π°Ρ˜Π΄Π΅Ρ€, сС ΠΏΠΎΠ²ΠΈΠΊΡƒΠ²Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ‚Π° Containerd CRI CNI ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊ FlannelΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ ја конфигурациската Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° CNI /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
      }
    }
  ]
}

ΠŸΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊΠΎΡ‚ Flannel CNI Ρ€Π°Π±ΠΎΡ‚ΠΈ Π·Π°Π΅Π΄Π½ΠΎ со Flanneld. Π—Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΡΡ‚Π°Ρ€Ρ‚ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ, Flanneld ΠΏΡ€Π΅Π·Π΅ΠΌΠ° podCIDR ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ Π΄Π΅Ρ‚Π°Π»ΠΈ ΠΏΠΎΠ²Ρ€Π·Π°Π½ΠΈ со ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° ΠΎΠ΄ сСрвСрот API ΠΈ Π³ΠΈ Π·Π°Ρ‡ΡƒΠ²ΡƒΠ²Π° Π²ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° /run/flannel/subnet.env.

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

ΠŸΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊΠΎΡ‚ Flannel CNI користи ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΎΠ΄ /run/flannel/subnet.env Π΄Π° Π³ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ ΠΈ ΠΏΠΎΠ²ΠΈΠΊΠ°Ρ‚Π΅ ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊΠΎΡ‚ CNI bridge.

CNI ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊ Bridge

Овој ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊ сС Π½Π°Ρ€Π΅ΠΊΡƒΠ²Π° со слСднава ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°:

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

Кога ќС сС ΠΏΠΎΠ²ΠΈΠΊΠ° Π·Π° ΠΏΡ€Π² ΠΏΠ°Ρ‚, Ρ‚ΠΎΡ˜ создава мост Π·Π° Линукс со Β«nameΒ»: Β«cni0Β», ΡˆΡ‚ΠΎ Π΅ ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΎ Π²ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π°. ΠŸΠΎΡ‚ΠΎΠ° сС создава ΠΏΠ°Ρ€ Π²Π΅Ρ‚ Π·Π° сСкоја ΠΌΠ΅ΡˆΡƒΠ½ΠΊΠ°. Π•Π΄Π½ΠΈΠΎΡ‚ ΠΊΡ€Π°Ρ˜ Π΅ ΠΏΠΎΠ²Ρ€Π·Π°Π½ со ΠΌΡ€Π΅ΠΆΠ½ΠΈΠΎΡ‚ имСнски простор Π½Π° ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΎΡ‚, Π΄Ρ€ΡƒΠ³ΠΈΠΎΡ‚ Π΅ Π²ΠΊΠ»ΡƒΡ‡Π΅Π½ Π²ΠΎ мостот Linux Π½Π° ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° домаќин. CNI ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊ Bridge Π³ΠΈ ΠΏΠΎΠ²Ρ€Π·ΡƒΠ²Π° ситС ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈ Π·Π° домаќини со мост Π·Π° Linux Π½Π° ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° домаќин.

По Π·Π°Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° ΠΏΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° ΠΏΠ°Ρ€ΠΎΡ‚ veth, ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊΠΎΡ‚ Bridge Π³ΠΎ ΠΏΠΎΠ²ΠΈΠΊΡƒΠ²Π° ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊΠΎΡ‚ домаќин-Π»ΠΎΠΊΠ°Π»Π΅Π½ IPAM CNI. Π’ΠΈΠΏΠΎΡ‚ Π½Π° ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊΠΎΡ‚ IPAM ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π° Π²ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° CNI ΡˆΡ‚ΠΎ ја користи ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊΠΎΡ‚ CRI Π·Π° Π΄Π° Π³ΠΎ ΠΏΠΎΠ²ΠΈΠΊΠ° ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊΠΎΡ‚ Flannel CNI.

Π”ΠΎΠΌΠ°ΡœΠΈΠ½-Π»ΠΎΠΊΠ°Π»Π½ΠΈ IPAM CNI ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΡ†ΠΈ

ΠœΠΎΡΡ‚ CNI ΠΏΠΎΠ²ΠΈΡ†ΠΈ домаќин-Π»ΠΎΠΊΠ°Π»Π΅Π½ IPAM ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊ CNI со слСднава ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°:

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

Π”ΠΎΠΌΠ°ΡœΠΈΠ½-Π»ΠΎΠΊΠ°Π»Π΅Π½ IPAM ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊ (IP Address MΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°ΡšΠ΅ - ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°ΡšΠ΅ со IP адрСса) ја Π²Ρ€Π°ΡœΠ° IP адрСсата Π·Π° ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΎΡ‚ ΠΎΠ΄ ΠΏΠΎΠ΄ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° ΠΈ ја складира Π΄ΠΎΠ΄Π΅Π»Π΅Π½Π°Ρ‚Π° IP адрСса Π½Π° Π΄ΠΎΠΌΠ°ΡœΠΈΠ½ΠΎΡ‚ Π²ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ Π½Π°Π²Π΅Π΄Π΅Π½ Π²ΠΎ Π΄Π΅Π»ΠΎΡ‚ dataDir - /var/lib/cni/networks/<network-name=cni0>/<ip>. Оваа Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° Π³ΠΎ содрТи ID Π½Π° ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΎΡ‚ Π½Π° кој Π΅ Π΄ΠΎΠ΄Π΅Π»Π΅Π½Π° ΠΎΠ²Π°Π° IP адрСса.

ΠŸΡ€ΠΈ ΠΏΠΎΠ²ΠΈΠΊΡƒΠ²Π°ΡšΠ΅ Π½Π° хост-Π»ΠΎΠΊΠ°Π»Π΅Π½ IPAM ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊ, Ρ‚ΠΎΡ˜ Π³ΠΈ Π²Ρ€Π°ΡœΠ° слСднитС ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ:

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

ΠšΡ€Π°Ρ‚ΠΎΠΊ ΠΏΡ€Π΅Π³Π»Π΅Π΄

Kube-ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€-ΠΌΠ΅Π½Π°ΡŸΠ΅Ρ€ Π΄ΠΎΠ΄Π΅Π»ΡƒΠ²Π° podCIDR Π½Π° сСкој јазол. ΠŸΠΎΠ΄Ρ€Π°Ρ‡Ρ˜Π°Ρ‚Π° Π½Π° сСкој јазол Π΄ΠΎΠ±ΠΈΠ²Π°Π°Ρ‚ IP адрСси ΠΎΠ΄ адрСсниот простор Π²ΠΎ Π΄ΠΎΠ΄Π΅Π»Π΅Π½ΠΈΠΎΡ‚ опсСг podCIDR. Π‘ΠΈΠ΄Π΅Ρ˜ΡœΠΈ podCIDR-ΠΎΠ²ΠΈΡ‚Π΅ Π½Π° Ρ˜Π°Π·Π»ΠΈΡ‚Π΅ Π½Π΅ сС ΠΏΡ€Π΅ΠΊΠ»ΠΎΠΏΡƒΠ²Π°Π°Ρ‚, ситС ΠΏΠΎΠ΄Π»ΠΎΠ³ΠΈ Π΄ΠΎΠ±ΠΈΠ²Π°Π°Ρ‚ СдинствСни IP адрСси.

Администраторот Π½Π° кластСрот Kubernetes Π³ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π° ΠΈ инсталира kubelet, Π²Ρ€Π΅ΠΌΠ΅Ρ‚Ρ€Π°Π΅ΡšΠ΅ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€, Π°Π³Π΅Π½Ρ‚ Π·Π° ΠΌΡ€Π΅ΠΆΠ΅Π½ Π΄ΠΎΠ±Π°Π²ΡƒΠ²Π°Ρ‡ ΠΈ Π³ΠΈ ΠΊΠΎΠΏΠΈΡ€Π° CNI ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΡ†ΠΈΡ‚Π΅ Π½Π° сСкој јазол. Π—Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΡΡ‚Π°Ρ€Ρ‚ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ, Π°Π³Π΅Π½Ρ‚ΠΎΡ‚ Π½Π° ΠΌΡ€Π΅ΠΆΠ½ΠΈΠΎΡ‚ ΠΏΡ€ΠΎΠ²Π°Ρ˜Π΄Π΅Ρ€ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° CNI ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°. Кога ΠΏΠΎΠ΄Π»ΠΎΠ³Π°Ρ‚Π° Π΅ Π·Π°ΠΊΠ°ΠΆΠ°Π½Π° Π·Π° јазол, kubelet Π³ΠΎ ΠΏΠΎΠ²ΠΈΠΊΡƒΠ²Π° Π΄ΠΎΠ΄Π°Ρ‚ΠΎΠΊΠΎΡ‚ CRI Π·Π° Π΄Π° Π³ΠΎ создадС. Π‘Π»Π΅Π΄Π½ΠΎ, Π°ΠΊΠΎ сС користи ΠΊΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€, ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊΠΎΡ‚ Containerd CRI Π³ΠΎ ΠΏΠΎΠ²ΠΈΠΊΡƒΠ²Π° ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊΠΎΡ‚ CNI Π½Π°Π²Π΅Π΄Π΅Π½ Π²ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° CNI Π·Π° Π΄Π° ја ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π° ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π»ΠΎΠ³Π°Ρ‚Π°. Како Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚ΠΎΠ°, pod Π΄ΠΎΠ±ΠΈΠ²Π° IP адрСса.

Ми Ρ‚Ρ€Π΅Π±Π°ΡˆΠ΅ ΠΌΠ°Π»ΠΊΡƒ Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° Π³ΠΈ Ρ€Π°Π·Π±Π΅Ρ€Π°ΠΌ ситС суптилности ΠΈ нијанси Π½Π° ситС ΠΎΠ²ΠΈΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ†ΠΈΠΈ. Π‘Π΅ Π½Π°Π΄Π΅Π²Π°ΠΌ Π΄Π΅ΠΊΠ° ΠΎΠ²Π° искуство ќС Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΎ Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΊΠ°ΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π° ΠšΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Ρ. Ако Π½Π΅ сум Π²ΠΎ ΠΏΡ€Π°Π²ΠΎ Π·Π° Π½Π΅ΡˆΡ‚ΠΎ, Π²Π΅ ΠΌΠΎΠ»ΠΈΠΌΠ΅ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΈΡ€Π°Ρ˜Ρ‚Π΅ ΠΌΠ΅ Π½Π° Twitter ΠΈΠ»ΠΈ Π½Π° адрСсата [Π·Π°ΡˆΡ‚ΠΈΡ‚Π΅Π½Π° ΠΏΠΎ Π΅-ΠΏΠΎΡˆΡ‚Π°]. Π‘Π»ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΈΡ€Π°Ρ˜Ρ‚Π΅ Π°ΠΊΠΎ сакатС Π΄Π° Ρ€Π°Π·Π³ΠΎΠ²Π°Ρ€Π°Ρ‚Π΅ Π·Π° аспСктитС Π½Π° овој напис ΠΈΠ»ΠΈ Π½Π΅ΡˆΡ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎ. Π‘ΠΈ сакал Π΄Π° Ρ€Π°Π·Π³ΠΎΠ²Π°Ρ€Π°ΠΌ со Ρ‚Π΅Π±Π΅!

Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈ

ΠšΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ΠΈ ΠΈ ΠΌΡ€Π΅ΠΆΠ°

Како Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π° Flannel?

CRI ΠΈ CNI

PS ΠΎΠ΄ ΠΏΡ€Π΅Π²Π΅Π΄ΡƒΠ²Π°Ρ‡

ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ˜Ρ‚Π΅ ΠΈ Π½Π° Π½Π°ΡˆΠΈΠΎΡ‚ Π±Π»ΠΎΠ³:

Π˜Π·Π²ΠΎΡ€: www.habr.com

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€