เบเบฑเบ Kubernetes เป„เบ”เป‰เบฎเบฑเบšเบ—เบตเปˆเบขเบนเปˆ IP เปเบ™เบงเปƒเบ”?

เบซเบกเบฒเบโ€‹เป€เบซเบ”โ€‹. เปเบ›.: เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰, เบ‚เบฝเบ™เป‚เบ”เบเบงเบดเบชเบฐเบงเบฐเบเบญเบ™ SRE เบˆเบฒเบ LinkedIn, เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบเปˆเบฝเบงเบเบฑเบš magic เบžเบฒเบเปƒเบ™ Kubernetes - เบซเบผเบฒเบเบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™, เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบ‚เบญเบ‡ CRI, CNI เปเบฅเบฐ kube-apiserver - เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบทเป‰เบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆ pod เบ•เปเปˆเป„เบ›เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบกเบญเบšเบซเบกเบฒเบเบ—เบตเปˆเบขเบนเปˆ IP.

เบซเบ™เบถเปˆเบ‡เปƒเบ™เบ‚เปเป‰เบเปเบฒเบ™เบปเบ”เบžเบทเป‰เบ™เบ–เบฒเบ™ เบฎเบนเบšเปเบšเบšเป€เบ„เบทเบญเบ‚เปˆเบฒเบ Kubernetes เปเบกเปˆเบ™เบงเปˆเบฒเปเบ•เปˆเบฅเบฐเบเบฑเบเบ•เป‰เบญเบ‡เบกเบตเบ—เบตเปˆเบขเบนเปˆ IP เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡ เปเบฅเบฐเบเบฑเบเบญเบทเปˆเบ™เป†เปƒเบ™เบเบธเปˆเบกเบ•เป‰เบญเบ‡เบชเบฒเบกเบฒเบ”เบ•เบดเบ”เบ•เปเปˆเบเบฑเบšเบ—เบตเปˆเบขเบนเปˆเบ™เบฑเป‰เบ™เป„เบ”เป‰. เบกเบตเบซเบผเบฒเบเป€เบ„เบทเบญเบ‚เปˆเบฒเบ "เบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™" (Flannel, Calico, Canal, เปเบฅเบฐเบญเบทเปˆเบ™เป†) เบ—เบตเปˆเบŠเปˆเบงเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบฎเบนเบšเปเบšเบšเป€เบ„เบทเบญเบ‚เปˆเบฒเบเบ™เบตเป‰.

เป€เบกเบทเปˆเบญเบ‚เป‰เบญเบเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš Kubernetes เบ—เปเบฒเบญเบดเบ”, เบกเบฑเบ™เบšเปเปˆเบŠเบฑเบ”เป€เบˆเบ™เบเบฑเบšเบ‚เป‰เบญเบเบงเปˆเบฒ pods เป„เบ”เป‰เบฎเบฑเบšเบ—เบตเปˆเบขเบนเปˆ IP เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเป„เบ”เป‰เปเบ™เบงเปƒเบ”. เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบกเบตเบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเปƒเบˆเบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบญเบปเบ‡เบ›เบฐเบเบญเบšเปเบ•เปˆเบฅเบฐเบ„เบปเบ™, เบกเบฑเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เบเบฒเบเบ—เบตเปˆเบˆเบฐเบˆเบดเบ™เบ•เบฐเบ™เบฒเบเบฒเบ™เบžเบงเบเบกเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบฎเปˆเบงเบกเบเบฑเบ™. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ‚เป‰เบญเบเบฎเบนเป‰เบงเปˆเบฒ plugins CNI เปเบกเปˆเบ™เบซเบเบฑเบ‡, เปเบ•เปˆเบ‚เป‰เบญเบเบšเปเปˆเบฎเบนเป‰เบงเปˆเบฒเบžเบงเบเบกเบฑเบ™เบ–เบทเบเป€เบญเบตเป‰เบ™เปเบ™เบงเปƒเบ”. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ‚เบฝเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เป€เบžเบทเปˆเบญเปเบšเปˆเบ‡เบ›เบฑเบ™เบ„เบงเบฒเบกเบฎเบนเป‰เบเปˆเบฝเบงเบเบฑเบšเบญเบปเบ‡เบ›เบฐเบเบญเบšเป€เบ„เบทเบญเบ‚เปˆเบฒเบเบ•เปˆเบฒเบ‡เป†เปเบฅเบฐเบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบฎเปˆเบงเบกเบเบฑเบ™เปƒเบ™เบเบธเปˆเบก Kubernetes, เป€เบŠเบดเปˆเบ‡เบŠเปˆเบงเบเปƒเบซเป‰เปเบ•เปˆเบฅเบฐเบเบฑเบเป„เบ”เป‰เบฎเบฑเบšเบ—เบตเปˆเบขเบนเปˆ IP เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡.

เบกเบตเบงเบดเบ—เบตเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เปƒเบ™เบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เป€เบ„เบทเบญเบ‚เปˆเบฒเบเปƒเบ™ Kubernetes, เบ„เบทเบเบฑเบ™เบเบฑเบšเบกเบตเบ•เบปเบงเป€เบฅเบทเบญเบ runtime เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบšเบฑเบ™เบˆเบธ. เบชเบดเปˆเบ‡เบžเบดเบกเบ™เบตเป‰เบˆเบฐเปƒเบŠเป‰ Flannel เบเบฒเบ™โ€‹เบˆเบฑเบ”โ€‹เบ•เบฑเป‰เบ‡โ€‹เป€เบ„เบทเบญโ€‹เบ‚เปˆเบฒเบโ€‹เปƒเบ™โ€‹เบเบธเปˆเบกโ€‹, เปเบฅเบฐโ€‹เป€เบ›เบฑเบ™โ€‹เบชเบฐโ€‹เบžเบฒเบšโ€‹เปเบงเบ”โ€‹เบฅเป‰เบญเบกโ€‹เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ” - เบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบต. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบเบฑเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เบชเบปเบกเบกเบธเบ”เบ•เบดเบ–เบฒเบ™เบงเปˆเบฒเบ—เปˆเบฒเบ™เบฎเบนเป‰เบˆเบฑเบเบงเบดเบ—เบตเบเบฒเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบฅเบฐเบซเบงเปˆเบฒเบ‡ containers เป€เบฎเบฑเบ”เบงเบฝเบ, เบชเบฐเบ™เบฑเป‰เบ™เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบžเบฝเบ‡เปเบ•เปˆเบˆเบฐเบชเปเบฒเบœเบฑเบ”เบเบฑเบšเบกเบฑเบ™เป‚เบ”เบเบซเบเปเป‰, เบžเบฝเบ‡เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเบชเบฐเบžเบฒเบšเบเบฒเบ™.

เบšเบฒเบ‡เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบžเบทเป‰เบ™เบ–เบฒเบ™

เบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบต เปเบฅเบฐเป€เบ„เบทเบญเบ‚เปˆเบฒเบ: เบžเบฒเบšเบฅเบงเบกเป‚เบ”เบเบซเบเปเป‰

เบกเบตเบซเบผเบฒเบเบชเบดเปˆเบ‡เบžเบดเบกเบ—เบตเปˆเบ”เบตเป€เบฅเบตเบ”เปƒเบ™เบญเบดเบ™เป€เบ•เบตเป€เบ™เบฑเบ”เบ—เบตเปˆเบญเบฐเบ—เบดเบšเบฒเบเบงเบดเบ—เบตเบเบฒเบ™เบšเบฑเบ™เบˆเบธเบ•เบดเบ”เบ•เปเปˆเบชเบทเปˆเบชเบฒเบ™เบเบฑเบšเบเบฑเบ™เปเบฅเบฐเบเบฑเบ™เบœเปˆเบฒเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบ. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบžเบฝเบ‡เปเบ•เปˆเบˆเบฐเปƒเบซเป‰เบžเบฒเบšเบฅเบงเบกเบ—เบปเปˆเบงเป„เบ›เบ‚เบญเบ‡เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบžเบทเป‰เบ™เบ–เบฒเบ™เปเบฅเบฐเบˆเปเบฒเบเบฑเบ”เบ•เบปเบงเป€เบญเบ‡เบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™เบซเบ™เบถเปˆเบ‡, เป€เบŠเบดเปˆเบ‡เบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เบ‚เบปเบง Linux เปเบฅเบฐเบซเบธเป‰เบกเบซเปเปˆเบซเบธเป‰เบกเบซเปเปˆ. เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบ–เบทเบเบฅเบฐเป€เบงเบฑเป‰เบ™, เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบซเบปเบงเบ‚เปเป‰เบ‚เบญเบ‡เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบตเบกเบฑเบ™เบชเบปเบกเบ„เบงเบ™เป„เบ”เป‰เบฎเบฑเบšเบšเบปเบ”เบ„เบงเบฒเบกเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ. เบฅเบดเป‰เบ‡เบ„เปŒเป„เบ›เบซเบฒเบšเบฒเบ‡เบชเบดเปˆเบ‡เบžเบดเบกเบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเปƒเบˆเป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ เปเบฅเบฐเบเบฒเบ™เบชเบถเบเบชเบฒเบˆเบฐเบ–เบทเบเบชเบฐเปœเบญเบ‡เปƒเบซเป‰เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰.

เบšเบฑเบ™เบˆเบธเบขเบนเปˆเปƒเบ™เบซเบ™เบถเปˆเบ‡เป€เบˆเบปเป‰เบฒเบžเบฒเบš

เบงเบดเบ—เบตเปœเบถเปˆเบ‡เปƒเบ™เบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบชเบทเปˆเบชเบฒเบ™เบœเปˆเบฒเบ™เบ—เบตเปˆเบขเบนเปˆ IP เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเปˆเบญเบ‡เบšเบฑเบ™เบˆเบธเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เป‚เบฎเบ”เบ”เบฝเบงเบเบฑเบ™เบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เบ‚เบปเบง Linux. เบชเปเบฒเบฅเบฑเบšเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เบ™เบตเป‰, เบญเบธเบ›เบฐเบเบญเบ™ virtual เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปƒเบ™ Kubernetes (เปเบฅเบฐ Docker) veth (เบญเบตเป€เบ—เบตเป€เบ™เบฑเบ” virtual). เบ›เบฒเบเบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบญเบธเบ›เบฐเบเบญเบ™ veth เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบš namespace เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบ‚เบญเบ‡เบšเบฑเบ™เบˆเบธ, เบญเบทเปˆเบ™เป€เบžเบทเปˆเบญ เบ‚เบปเบง Linux เปƒเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบเป€เบˆเบปเป‰เบฒเบžเบฒเบš.

เบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบตเบ—เบฑเบ‡เปเบปเบ”เบขเบนเปˆเปƒเบ™เป‚เบฎเบ”เบ”เบฝเบงเบเบฑเบ™เบกเบตเบชเบปเป‰เบ™เปœเบถเปˆเบ‡เบ‚เบญเบ‡ veth เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเบ‚เบปเบงเบ—เบตเปˆเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เบชเบทเปˆเบชเบฒเบ™เบเบฑเบšเบเบฑเบ™เป„เบ”เป‰เบœเปˆเบฒเบ™เบ—เบตเปˆเบขเบนเปˆ IP. เบ‚เบปเบง Linux เบเบฑเบ‡เบกเบตเบ—เบตเปˆเบขเบนเปˆ IP เปเบฅเบฐเป€เบฎเบฑเบ”เบซเบ™เป‰เบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเบ•เบนเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบˆเบฒเบฅเบฐเบˆเบญเบ™ egress เบˆเบฒเบ pods เบ›เบฒเบเบ—เบฒเบ‡เบชเปเบฒเบฅเบฑเบš nodes เบญเบทเปˆเบ™เป†.

เบเบฑเบ Kubernetes เป„เบ”เป‰เบฎเบฑเบšเบ—เบตเปˆเบขเบนเปˆ IP เปเบ™เบงเปƒเบ”?

เบšเบฑเบ™เบˆเบธเบขเบนเปˆเปƒเบ™เป€เบˆเบปเป‰เบฒเบžเบฒเบšเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™

Packet encapsulation เปเบกเปˆเบ™เบงเบดเบ—เบตเบเบฒเบ™เบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰ containers เปƒเบ™ nodes เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบ•เบดเบ”เบ•เปเปˆเบชเบทเปˆเบชเบฒเบ™เบเบฑเบšเบเบฑเบ™เปเบฅเบฐเบเบฑเบ™เป‚เบ”เบเปƒเบŠเป‰เบ—เบตเปˆเบขเบนเปˆ IP. เบขเบนเปˆ Flannel, เป€เบ•เบฑเบเป‚เบ™เป‚เบฅเบขเบตเปเบกเปˆเบ™เบฎเบฑเบšเบœเบดเบ”เบŠเบญเบšเบชเปเบฒเบฅเบฑเบšเป‚เบญเบเบฒเบ”เบ™เบตเป‰. vxlan, เป€เบŠเบดเปˆเบ‡ "เบŠเบธเบ”" เบŠเบธเบ”เบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบšเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบŠเบธเบ” UDP เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบชเบปเปˆเบ‡เบกเบฑเบ™เป„เบ›เบซเบฒเบ›เบฒเบเบ—เบฒเบ‡เบ‚เบญเบ‡เบกเบฑเบ™.

เปƒเบ™เบเบธเปˆเบก Kubernetes, Flannel เบชเป‰เบฒเบ‡เบญเบธเบ›เบฐเบเบญเบ™ vxlan เปเบฅเบฐเบ›เบฑเบšเบ›เบธเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เปƒเบ™เปเบ•เปˆเบฅเบฐ node เบ•เบฒเบกเบ„เบงเบฒเบกเป€เบซเบกเบฒเบฐเบชเบปเบก. เปเบ•เปˆเบฅเบฐเปเบžเบฑเบเป€เบเบฑเบ”เบ—เบตเปˆเบ•เบฑเป‰เบ‡เป„เบงเป‰เบชเปเบฒเบฅเบฑเบšเบšเบฑเบ™เบˆเบธเบขเบนเปˆเปƒเบ™เป‚เบฎเบ”เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบˆเบฐเบœเปˆเบฒเบ™เบญเบธเบ›เบฐเบเบญเบ™ vxlan เปเบฅเบฐเบ–เบทเบเบซเบธเป‰เบกเบขเบนเปˆเปƒเบ™เบŠเบธเบ” UDP. เบขเบนเปˆเบ—เบตเปˆเบˆเบธเบ”เบซเบกเบฒเบเบ›เบฒเบเบ—เบฒเบ‡, เปเบžเบฑเบเป€เบเบฑเบ”เบ—เบตเปˆเบ•เบดเบ”เบขเบนเปˆเป„เบ”เป‰เบ–เบทเบเบชเบฐเบเบฑเบ”เปเบฅเบฐเบชเบปเปˆเบ‡เบ•เปเปˆเป„เบ›เบซเบฒเบเบฑเบเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™.

เบเบฑเบ Kubernetes เป„เบ”เป‰เบฎเบฑเบšเบ—เบตเปˆเบขเบนเปˆ IP เปเบ™เบงเปƒเบ”?
เบซเบกเบฒเบโ€‹เป€เบซเบ”โ€‹: เบ™เบตเป‰โ€‹เป€เบ›เบฑเบ™โ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เบซเบ™เบถเปˆเบ‡โ€‹เปƒเบ™โ€‹เบเบฒเบ™โ€‹เบˆเบฑเบ”โ€‹เบ•เบฑเป‰เบ‡โ€‹เบเบฒเบ™โ€‹เบชเบทเปˆโ€‹เบชเบฒเบ™โ€‹เป€เบ„เบทเบญโ€‹เบ‚เปˆเบฒเบโ€‹เบฅเบฐโ€‹เบซเบงเปˆเบฒเบ‡โ€‹เบžเบฒโ€‹เบŠเบฐโ€‹เบ™เบฐโ€‹.

CRI เปเบกเปˆเบ™เบซเบเบฑเบ‡?

CRI (เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบเบฒเบ™เปเบฅเปˆเบ™เป€เบ„เบทเปˆเบญเบ‡เบšเบฑเบ™เบˆเบธ) เป€เบ›เบฑเบ™ plugin เบ—เบตเปˆเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰ kubelet เปƒเบŠเป‰เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก runtime เบšเบฑเบ™เบˆเบธเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. CRI API เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปƒเบ™ runtimes เบ•เปˆเบฒเบ‡เป†, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบœเบนเป‰เปƒเบŠเป‰เบชเบฒเบกเบฒเบ”เป€เบฅเบทเบญเบเป€เบงเบฅเบฒเปเบฅเปˆเบ™เบ•เบฒเบกเบเบฒเบ™เป€เบฅเบทเบญเบเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ.

CNI เปเบกเปˆเบ™เบซเบเบฑเบ‡?

เป‚เบ„เบ‡เบเบฒเบ™ CNI เปเบกเปˆเบ™เบซเบ™เบถเปˆเบ‡ เบชเบฐเป€เบžเบฒเบฐ เป€เบžเบทเปˆเบญเบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบเบฒเบ™เปเบเป‰เป„เบ‚เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบ—เบปเปˆเบงเป„เบ›เบชเปเบฒเบฅเบฑเบšเบเปˆเบญเบ‡เบšเบฑเบ™เบˆเบธ Linux. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบกเบฑเบ™เบ›เบฐเบเบญเบšเบกเบต เบ›เบฅเบฑเบเบญเบดเบ™, เบฎเบฑเบšเบœเบดเบ”เบŠเบญเบšเบซเบ™เป‰เบฒเบ—เบตเปˆเบ•เปˆเบฒเบ‡เป†เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ•เบฑเป‰เบ‡เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบเบฑเบ. เบ›เบฑเปŠเบเบญเบดเบ™ CNI เป€เบ›เบฑเบ™เป„เบŸเบฅเปŒเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰เบ—เบตเปˆเบชเบญเบ”เบ„เปˆเบญเบ‡เบเบฑเบšเบ‚เปเป‰เบเปเบฒเบ™เบปเบ” (เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ›เบถเบเบชเบฒเบซเบฒเบฅเบทเบšเบฒเบ‡ plugins เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰).

เบเบฒเบ™เบˆเบฑเบ”เบชเบฑเบ™ subnets เปƒเบซเป‰เบเบฑเบš nodes เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบ—เบตเปˆเบขเบนเปˆ IP เปƒเบซเป‰เบเบฑเบš pods

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเปเบ•เปˆเบฅเบฐเบเบฑเบเปƒเบ™เบเบธเปˆเบกเบ•เป‰เบญเบ‡เบกเบตเบ—เบตเปˆเบขเบนเปˆ IP, เบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบชเปเบฒเบ„เบฑเบ™เป€เบžเบทเปˆเบญเปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบ—เบตเปˆเบขเบนเปˆเบ™เบตเป‰เป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบ. เบ™เบตเป‰เปเบกเปˆเบ™เบšเบฑเบ™เบฅเบธเป„เบ”เป‰เป‚เบ”เบเบเบฒเบ™เบกเบญเบšเบซเบกเบฒเบเปเบ•เปˆเบฅเบฐ node เป€เบ›เบฑเบ™ subnet เป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบ, เบˆเบฒเบ pods เปƒเบ™ node เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเป„เบ”เป‰เบ–เบทเบเบกเบญเบšเบซเบกเบฒเบเบ—เบตเปˆเบขเบนเปˆ IP.

Node IPAM Controller

เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆ nodeipam เบœเปˆเบฒเบ™เป€เบ›เบฑเบ™เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ—เบธเบ‡ --controllers kube-controller-manager, เบกเบฑเบ™เบˆเบฑเบ”เบชเบฑเบ™ subnet เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ (podCIDR) เปƒเบซเป‰เบเบฑเบšเปเบ•เปˆเบฅเบฐ node เบˆเบฒเบ cluster CIDR (i.e., the range of IP addresses for the cluster network). เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบ podCIDR เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบšเปเปˆเบ—เบฑเบšเบŠเป‰เบญเบ™เบเบฑเบ™, เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบเบฑเบเบ—เบตเปˆเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบˆเบฑเบ”เบชเบฑเบ™เบ—เบตเปˆเบขเบนเปˆ IP เบ—เบตเปˆเป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบ.

เป‚เบ™เบ” Kubernetes เบ–เบทเบเบกเบญเบšเปเบฒเบเปƒเบซเป‰ podCIDR เป€เบกเบทเปˆเบญเบกเบฑเบ™เบ–เบทเบเบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เปƒเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เบเบฑเบšเบเบธเปˆเบก. เป€เบžเบทเปˆเบญเบ›เปˆเบฝเบ™ podCIDR เบ‚เบญเบ‡ nodes, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบเบปเบเป€เบฅเบตเบเบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เบžเบงเบเบกเบฑเบ™เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เบžเบงเบเบกเบฑเบ™เปƒเบซเบกเปˆ, เป€เบฎเบฑเบ”เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบŠเบฑเป‰เบ™เบ„เบงเบšเบ„เบธเบก Kubernetes เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเบฐเปเบ”เบ‡ podCIDR เบ‚เบญเบ‡ node เป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

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

Kubelet, container runtime เปเบฅเบฐ CNI plugins: เบกเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปเบ™เบงเปƒเบ”

เบเบฒเบ™เบˆเบฑเบ”เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ pod เบ•เปเปˆ node เบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบเบฐเบเบฝเบกเบซเบผเบฒเบ. เปƒเบ™เบžเบฒเบเบ™เบตเป‰, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเบชเบธเบกเปƒเบชเปˆเบžเบฝเบ‡เปเบ•เปˆเบเปˆเบฝเบงเบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เป‚เบ”เบเบเบปเบ‡เบเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบ„เบทเบญเบ‚เปˆเบฒเบเบเบฑเบ.

เบเบฒเบ™เบˆเบฑเบ”เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ pod เป„เบ›เบซเบฒ node เปƒเบ”เบ™เบถเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ”เบ•เปˆเบญเบ‡เป‚เบชเป‰เบ‚เบญเบ‡เป€เบซเบ”เบเบฒเบ™เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

เบเบฑเบ Kubernetes เป„เบ”เป‰เบฎเบฑเบšเบ—เบตเปˆเบขเบนเปˆ IP เปเบ™เบงเปƒเบ”?

เบŠเปˆเบงเบเป€เบซเบผเบทเบญ: เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบ‚เบญเบ‡ Containerd CRI plugins.

เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบฅเบฐเบซเบงเปˆเบฒเบ‡ container runtime เปเบฅเบฐ plugins CNI

เบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบเปเบ•เปˆเบฅเบฐเบ„เบปเบ™เบกเบต plugin CNI เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡. runtime เบ‚เบญเบ‡ container เปเบฅเปˆเบ™เบกเบฑเบ™เป€เบžเบทเปˆเบญ configure เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบชเปเบฒเบฅเบฑเบš pod เป„เบ”เป‰เบเป‰เบญเบ™เบงเปˆเบฒเบกเบฑเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบถเป‰เบ™. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบšเบฑเบ™เบˆเบธ, plugin CNI เบ–เบทเบเป€เบ›เบตเบ”เบ•เบปเบงเป‚เบ”เบ plugin เบชเบฐเบ–เบฒเบ™เบต CRI.

เบเบดเปˆเบ‡เป„เบ›เบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เปเบ•เปˆเบฅเบฐเบ„เบปเบ™เบกเบตเบ•เบปเบงเปเบ—เบ™เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡. เบกเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เบ—เบธเบ nodes Kubernetes เปเบฅเบฐเบฎเบฑเบšเบœเบดเบ”เบŠเบญเบšเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบ„เบทเบญเบ‚เปˆเบฒเบเบ‚เบญเบ‡ pods. เบ•เบปเบงเปเบ—เบ™เบ™เบตเป‰เบ–เบทเบเบฅเบงเบกเป€เบ‚เบปเป‰เบฒเบเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ CNI เบซเบผเบทเบชเป‰เบฒเบ‡เบกเบฑเบ™เบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฒเบ”เบขเบนเปˆเปƒเบ™ node. config เบŠเปˆเบงเบเปƒเบซเป‰ plugin CRI เบเปเบฒเบ™เบปเบ” plugin CNI เบ—เบตเปˆเบˆเบฐเป‚เบ—เบซเบฒ.

เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ‚เบญเบ‡ CNI config เบชเบฒเบกเบฒเบ”เบ›เบฑเบšเปเบ•เปˆเบ‡เป„เบ”เป‰; เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบกเบฑเบ™เบขเบนเปˆเปƒเบ™ /etc/cni/net.d/<config-file>. เบœเบนเป‰เบšเปเบฅเบดเบซเบฒเบ™เบเบธเปˆเบกเบเบฑเบ‡เบฎเบฑเบšเบœเบดเบ”เบŠเบญเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ plugins CNI เปƒเบ™เปเบ•เปˆเบฅเบฐ node เบ‚เบญเบ‡ cluster. เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเปเบกเปˆเบ™เบชเบฒเบกเบฒเบ”เบ›เบฑเบšเปเบ•เปˆเบ‡เป„เบ”เป‰; เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ - /opt/cni/bin.

เป€เบกเบทเปˆเบญเปƒเบŠเป‰ containerd, เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบชเปเบฒเบฅเบฑเบš plugin config เปเบฅเบฐ binaries เบชเบฒเบกเบฒเบ”เบ–เบทเบเบเปเบฒเบ™เบปเบ”เบขเบนเปˆเปƒเบ™เบžเบฒเบ [plugins.ยซio.containerd.grpc.v1.criยป.cni] ะฒ เป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบšเบฑเบ™เบˆเบธ.

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เปƒเบŠเป‰ Flannel เป€เบ›เบฑเบ™เบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เปƒเบซเป‰เป€เบงเบปเป‰เบฒเป€เบฅเบฑเบเบ™เป‰เบญเบเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบกเบฑเบ™:

  • Flanneld (Flannel's daemon) เบกเบฑเบเบˆเบฐเบ–เบทเบเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เบเบธเปˆเบกเป€เบ›เบฑเบ™ DaemonSet เบ—เบตเปˆเบกเบต install-cni เป€เบ›เบฑเบ™ เบšเบฑเบ™เบˆเบธ init.
  • Install-cni เบชเป‰เบฒเบ‡ เป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ CNI (/etc/cni/net.d/10-flannel.conflist) เปƒเบ™เปเบ•เปˆเบฅเบฐ node.
  • Flanneld เบชเป‰เบฒเบ‡เบญเบธเบ›เบฐเบเบญเบ™ vxlan, เบ”เบถเบ‡เบ‚เปเป‰เบกเบนเบ™ metadata เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบˆเบฒเบเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ API, เปเบฅเบฐเบ•เบดเบ”เบ•เบฒเบกเบเบงเบ”เบเบฒเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡ pod. เป€เบกเบทเปˆเบญเบžเบงเบเบกเบฑเบ™เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™, เบกเบฑเบ™เปเบˆเบเบขเบฒเบเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เป„เบ›เบซเบฒเบเบฑเบเบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เบ—เบปเปˆเบงเบเบธเปˆเบก.
  • เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰ pods เบชเบฒเบกเบฒเบ”เบชเบทเปˆเบชเบฒเบ™เบเบฑเบšเบเบฑเบ™เปเบฅเบฐเบเบฑเบ™เป‚เบ”เบเบœเปˆเบฒเบ™เบ—เบตเปˆเบขเบนเปˆ IP.

เบชเปเบฒเบฅเบฑเบšเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡ Flannel, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเปเบ™เบฐเบ™เปเบฒเปƒเบซเป‰เปƒเบŠเป‰เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเปƒเบ™เบ•เบญเบ™เบ—เป‰เบฒเบเบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบก.

เบ™เบตเป‰เปเบกเปˆเบ™เปเบœเบ™เบงเบฒเบ”เบ‚เบญเบ‡เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบฅเบฐเบซเบงเปˆเบฒเบ‡เบ›เบฅเบฑเบเบญเบดเบ™ Containerd CRI เปเบฅเบฐ plugins CNI:

เบเบฑเบ Kubernetes เป„เบ”เป‰เบฎเบฑเบšเบ—เบตเปˆเบขเบนเปˆ IP เปเบ™เบงเปƒเบ”?

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเป€เบซเบฑเบ™เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡, kubelet เป‚เบ—เบซเบฒ Containerd CRI plugin เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡ pod, เป€เบŠเบดเปˆเบ‡เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป‚เบ—เบซเบฒ plugin CNI เป€เบžเบทเปˆเบญ configure เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบ‚เบญเบ‡ pod. เปƒเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, plugin CNI เบ‚เบญเบ‡เบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบเป‚เบ—เบซเบฒ plugins CNI เบซเบผเบฑเบเบญเบทเปˆเบ™เป†เป€เบžเบทเปˆเบญเบเปเบฒเบ™เบปเบ”เบฅเบฑเบเบชเบฐเบ™เบฐเบ•เปˆเบฒเบ‡เป†เบ‚เบญเบ‡เป€เบ„เบทเบญเบ‚เปˆเบฒเบ.

เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบฅเบฐเบซเบงเปˆเบฒเบ‡ plugins CNI

เบกเบต plugins CNI เบ•เปˆเบฒเบ‡เป†เบ—เบตเปˆเบกเบตเบซเบ™เป‰เบฒเบ—เบตเปˆเบŠเปˆเบงเบเบ•เบฑเป‰เบ‡เบเบฒเบ™เบชเบทเปˆเบชเบฒเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบฅเบฐเบซเบงเปˆเบฒเบ‡ containers เบขเบนเปˆเปƒเบ™เป€เบˆเบปเป‰เบฒเบžเบฒเบš. เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เบˆเบฐเบชเบปเบ™เบ—เบฐเบ™เบฒเบชเบฒเบกเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ.

CNI plugin Flannel

เป€เบกเบทเปˆเบญเปƒเบŠเป‰ Flannel เป€เบ›เบฑเบ™เบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบ, เบญเบปเบ‡เบ›เบฐเบเบญเบš Containerd CRI เป‚เบ— CNI plugin 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 เป€เบฎเบฑเบ”เบงเบฝเบเบฎเปˆเบงเบกเบเบฑเบ™เบเบฑเบš Flannel. เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, 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 เป€เบžเบทเปˆเบญเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปเบฅเบฐเป‚เบ—เบซเบฒ plugin เบ‚เบปเบง CNI.

CNI plugin Bridge

เบ›เบฑเปŠเบเบญเบดเบ™เบ™เบตเป‰เบ–เบทเบเป€เบญเบตเป‰เบ™เบ”เป‰เบงเบเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ•เปเปˆเป„เบ›เบ™เบตเป‰:

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

เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒเบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”, เบกเบฑเบ™เบชเป‰เบฒเบ‡เบ‚เบปเบง Linux เบเบฑเบš ยซnameยป: ยซcni0ยป, เป€เบŠเบดเปˆเบ‡เบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™ config. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบ„เบนเปˆ veth เปเบกเปˆเบ™เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบเบฑเบ. เบ›เบฒเบเบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบกเบฑเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบš namespace เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบ‚เบญเบ‡ container, เบญเบตเบเบญเบฑเบ™เบซเบ™เบถเปˆเบ‡เปเบกเปˆเบ™เบฅเบงเบกเบขเบนเปˆเปƒเบ™เบ‚เบปเบง Linux เปƒเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบเป€เบˆเบปเป‰เบฒเบžเบฒเบš. CNI plugin Bridge เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ host containers เบ—เบฑเบ‡เปเบปเบ”เบเบฑเบšเบ‚เบปเบง Linux เปƒเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบเปเบกเปˆเบ‚เปˆเบฒเบ.

เบซเบผเบฑเบ‡เบˆเบฒเบเบชเปเบฒเป€เบฅเบฑเบ”เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ„เบนเปˆ veth, เบ›เบฑเปŠเบเบญเบดเบ™ Bridge เป‚เบ—เบซเบฒ plugin IPAM CNI เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเบžเบฒเบš. เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบ›เบฅเบฑเบเบญเบดเบ™ IPAM เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ CNI เบ—เบตเปˆ plugin CRI เปƒเบŠเป‰เป€เบžเบทเปˆเบญเป‚เบ—เบซเบฒ plugin Flannel CNI.

เบ›เบฅเบฑเบเบญเบดเบ™ IPAM CNI เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเบžเบฒเบš-เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™

เบ‚เบปเบง CNI เป‚เบ— host-local IPAM plugin CNI เบ”เป‰เบงเบโ€‹เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹เบ”เบฑเปˆเบ‡โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบ™เบตเป‰โ€‹:

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

เบ›เบฅเบฑเบเบญเบดเบ™ IPAM เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเบžเบฒเบš-เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™ (IP Address Mเบเบฒเบ™โ€‹เบ„เบธเป‰เบกโ€‹เบ„เบญเบ‡โ€‹เบ—เบตเปˆโ€‹เบขเบนเปˆ IPโ€‹) เบชเบปเปˆเบ‡เบ„เบทเบ™เบ—เบตเปˆเบขเบนเปˆ IP เบชเปเบฒเบฅเบฑเบš container เบˆเบฒเบ subnet เปเบฅเบฐเป€เบเบฑเบšเบฎเบฑเบเบชเบฒ IP เบ—เบตเปˆเบˆเบฑเบ”เบชเบฑเบ™เป„เบงเป‰เปƒเบ™เป‚เบฎเบ”เปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™เบžเบฒเบ dataDir - /var/lib/cni/networks/<network-name=cni0>/<ip>. เป„เบŸเบฅเปŒเบ™เบตเป‰เบกเบต ID เบ‚เบญเบ‡เบšเบฑเบ™เบˆเบธเบ—เบตเปˆเบ—เบตเปˆเบขเบนเปˆ IP เบ™เบตเป‰เบ–เบทเบเบกเบญเบšเบซเบกเบฒเบ.

เป€เบกเบทเปˆเบญเป‚เบ—เบซเบฒ plugin IPAM เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเบžเบฒเบš, เบกเบฑเบ™เบˆเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™เบ‚เปเป‰เบกเบนเบ™เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

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

Summary

Kube-controller-manager เบกเบญเบšเปเบฒเบ podCIDR เปƒเบซเป‰เบเบฑเบšเปเบ•เปˆเบฅเบฐ node. pods เบ‚เบญเบ‡เปเบ•เปˆเบฅเบฐ node เป„เบ”เป‰เบฎเบฑเบšเบ—เบตเปˆเบขเบนเปˆ IP เบˆเบฒเบเบžเบทเป‰เบ™เบ—เบตเปˆเบ—เบตเปˆเบขเบนเปˆเปƒเบ™เบŠเปˆเบงเบ‡ podCIDR เบ—เบตเปˆเบˆเบฑเบ”เบชเบฑเบ™. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบ podCIDRs เบ‚เบญเบ‡ nodes เบšเปเปˆเบ—เบฑเบšเบŠเป‰เบญเบ™เบเบฑเบ™, pods เบ—เบฑเบ‡เบซเบกเบปเบ”เป„เบ”เป‰เบฎเบฑเบšเบ—เบตเปˆเบขเบนเปˆ IP เบ—เบตเปˆเป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบ.

เบœเบนเป‰เป€เบšเบดเปˆเบ‡เปเบเบ‡เบเบธเปˆเบก Kubernetes เบเบณเบ™เบปเบ”เบ„เปˆเบฒ เปเบฅเบฐเบ•เบดเบ”เบ•เบฑเป‰เบ‡ kubelet, container runtime, network provider agents, เปเบฅเบฐ copy the CNI plugins to each node. เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบ•เบปเบงเปเบ—เบ™เบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบˆเบฐเบชเป‰เบฒเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ CNI. เป€เบกเบทเปˆเบญเบเบฑเบเบ–เบทเบเบเบณเบ™เบปเบ”เปƒเบซเป‰เบเบฑเบšเป‚เบซเบ™เบ”, kubelet เป‚เบ—เบซเบฒ plugin CRI เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบกเบฑเบ™. เบ•เปเปˆเป„เบ›, เบ–เป‰เบฒเปƒเบŠเป‰ containerd, Containerd CRI plugin เป€เบญเบตเป‰เบ™ plugin CNI เบ—เบตเปˆเบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™ CNI config เป€เบžเบทเปˆเบญ configure เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบ‚เบญเบ‡ pod. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบเบฑเบเป„เบ”เป‰เบฎเบฑเบšเบ—เบตเปˆเบขเบนเปˆ IP.

เบกเบฑเบ™เปƒเบŠเป‰เป€เบงเบฅเบฒเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเปƒเบŠเป‰เป€เบงเบฅเบฒเบšเบฒเบ‡เป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเปƒเบˆ subtleties เบ—เบฑเบ‡เบซเบกเบปเบ”เปเบฅเบฐ nuances เบ‚เบญเบ‡เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบ—เบฑเบ‡เบซเบกเบปเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰. เบ‚เป‰เบญเบเบซเบงเบฑเบ‡เบงเปˆเบฒเบ›เบฐเบชเบปเบšเบเบฒเบ™เบ™เบตเป‰เบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เป€เบ‚เบปเป‰เบฒเปƒเบˆเบ”เบตเบ‚เบถเป‰เบ™เบงเปˆเบฒ Kubernetes เป€เบฎเบฑเบ”เบงเบฝเบเปเบ™เบงเปƒเบ”. เบ–เป‰เบฒเบ‚เป‰เบญเบเบœเบดเบ”เบžเบฒเบ”เบซเบเบฑเบ‡, เบเบฐเบฅเบธเบ™เบฒเบ•เบดเบ”เบ•เปเปˆเบ‚เป‰เบญเบเบ—เบตเปˆ Twitter เบซเบผเบทเบขเบนเปˆเปƒเบ™เบ—เบตเปˆเบขเบนเปˆ [email protected]. เบเบฐเบฅเบธเบ™เบฒเบ•เบดเบ”เบ•เปเปˆเบซเบฒเบ—เปˆเบฒเบ™เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ›เบถเบเบชเบฒเบซเบฒเบฅเบทเบเปˆเบฝเบงเบเบฑเบšเบฅเบฑเบเบชเบฐเบ™เบฐเบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เบซเบผเบทเบชเบดเปˆเบ‡เบญเบทเปˆเบ™เปƒเบ”. เบ‚เป‰เบญเบเบขเบฒเบเบฅเบปเบกเบเบฑเบšเป€เบˆเบปเป‰เบฒ!

เป€เบญเบเบฐเบชเบฒเบ™

เบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบตเปเบฅเบฐเป€เบ„เบทเบญเบ‚เปˆเบฒเบ

Flannel เป€เบฎเบฑเบ”เบงเบฝเบเปเบ™เบงเปƒเบ”?

CRI เปเบฅเบฐ CNI

PS เบˆเบฒเบเบ™เบฑเบเปเบ›

เบญเปˆเบฒเบ™เบเบฑเบ‡เบขเบนเปˆเปƒเบ™ blog เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ:

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™