Calico bilan tarmoq siyosati imkoniyatlarini tushunish

Calico bilan tarmoq siyosati imkoniyatlarini tushunish

Calico tarmoq plagini apparat xostlari, virtual mashinalar va podlarni himoya qilish uchun birlashtirilgan sintaksisi bilan keng tarmoq siyosatini taqdim etadi. Ushbu siyosatlar nomlar maydonida qo'llanilishi yoki global tarmoq siyosati bo'lishi mumkin xost so'nggi nuqtasi (to'g'ridan-to'g'ri xostda ishlaydigan ilovalarni himoya qilish uchun - xost server yoki virtual mashina bo'lishi mumkin) yoki ish yukining oxirgi nuqtasi (konteynerlarda yoki joylashtirilgan virtual mashinalarda ishlaydigan ilovalarni himoya qilish uchun). Calico siyosatlari preDNAT, unraracked va applyOnForward kabi variantlardan foydalangan holda paket yo'lining turli nuqtalarida xavfsizlik choralarini qo'llash imkonini beradi. Ushbu variantlar qanday ishlashini tushunish umumiy tizimingiz xavfsizligini va ish faoliyatini yaxshilashga yordam beradi. Ushbu maqola paketlarni qayta ishlash yo'llarida (iptabels zanjiri) nima sodir bo'lishiga urg'u berib, host so'nggi nuqtalariga qo'llaniladigan ushbu Calico siyosati parametrlarining (preDNAT, unracked va applyOnForward) mohiyatini ochib beradi.

Ushbu maqolada siz Kubernetes va Calico tarmoq siyosatlari qanday ishlashi haqida asosiy tushunchaga ega ekanligingizni nazarda tutadi. Agar yo'q bo'lsa, sinab ko'rishni tavsiya qilamiz asosiy tarmoq siyosati o'quv qo'llanma и xostni himoya qilish bo'yicha qo'llanma ushbu maqolani o'qishdan oldin Calico-dan foydalaning. Shuningdek, biz sizdan ish haqida asosiy tushunchaga ega bo'lishingizni kutamiz iptables linuxda.

Calico global tarmoq siyosati teglar boʻyicha kirish qoidalari toʻplamini qoʻllash imkonini beradi (xostlar guruhlari va ish yuklari/podlariga). Agar siz heterojen tizimlardan birgalikda foydalansangiz, bu juda foydali bo'ladi - virtual mashinalar, to'g'ridan-to'g'ri apparatdagi tizim yoki kubernetlar infratuzilmasi. Bundan tashqari, siz deklarativ siyosatlar to'plamidan foydalangan holda klasteringizni (tugunlarni) himoya qilishingiz va kiruvchi trafik uchun tarmoq siyosatini qo'llashingiz mumkin (masalan, NodePorts yoki Tashqi IP xizmati orqali).

Asosiy darajada, Calico podni tarmoqqa ulaganda (quyidagi diagrammaga qarang), virtual Ethernet interfeysi (veth) yordamida uni xostga ulaydi. Pod tomonidan yuborilgan trafik ushbu virtual interfeysdan xostga keladi va xuddi jismoniy tarmoq interfeysidan kelgani kabi qayta ishlanadi. Odatiy bo'lib, Calico ushbu interfeyslarni caliXXX deb nomlaydi. Trafik virtual interfeys orqali kelganligi sababli, u iptables orqali xuddi pod bir hop uzoqlikda bo'lgandek o'tadi. Shuning uchun, trafik podkaga/dan kelganda, u xost nuqtai nazaridan uzatiladi.

Calico bilan ishlaydigan Kubernetes tugunida siz virtual interfeysni (veth) ish yukiga quyidagicha joylashtirishingiz mumkin. Quyidagi misolda siz veth#10 (calic1cbf1ca0f8) calico-monitoring nom maydonida cnx-manager-* ga ulanganligini ko'rishingiz mumkin.

[centos@ip-172-31-31-46 K8S]$ sudo ip a
...
10: calic1cbf1ca0f8@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1440 qdisc noqueue state UP group default
    link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netnsid 5
    inet6 fe80::ecee:eeff:feee:eeee/64 scope link
       valid_lft forever preferred_lft forever
...

[centos@ip-172-31-31-46 K8S]$ calicoctl get wep --all-namespaces
...
calico-monitoring cnx-manager-8f778bd66-lz45m                            ip-172-31-31-46.ec2.internal 192.168.103.134/32
calic1cbf1ca0f8
...

Calico bilan tarmoq siyosati imkoniyatlarini tushunish

Calico har bir ish yuki uchun veth interfeysini yaratishini hisobga olsak, u siyosatlarni qanday amalga oshiradi? Buning uchun Calico iptables yordamida paketlarni qayta ishlash yo'lining turli zanjirlarida ilgaklar yaratadi.

Quyidagi diagrammada iptables (yoki netfilter quyi tizimi) da paketlarni qayta ishlash bilan bog'liq zanjirlar ko'rsatilgan. Paket tarmoq interfeysi orqali kelganda, u avval PREROUTING zanjiri orqali o'tadi. Keyin marshrutlash qarori qabul qilinadi va bunga asoslanib, paket INPUT (host jarayonlariga yo'naltirilgan) yoki FORWARD (tarmoqning pod yoki boshqa tuguniga yo'naltirilgan) orqali o'tadi. Mahalliy jarayondan paket kabel orqali yuborilgunga qadar OUTPUT va keyin POSTROUTING zanjiri orqali o'tadi.

E'tibor bering, pod iptablesni qayta ishlash nuqtai nazaridan tashqi ob'ekt (vethga ulangan). Keling, xulosa qilaylik:

  • Yo'naltirilgan trafik (nat, marshrutlangan yoki podkastga/podjadan) PREROUTING - FORWARD - POSTROUTING zanjirlari orqali o'tadi.
  • Mahalliy xost jarayoniga trafik PREROUTING - INPUT zanjiri orqali o'tadi.
  • Mahalliy xost jarayonidan keladigan trafik OUTPUT - POSTROUTING zanjiri orqali o'tadi.

Calico bilan tarmoq siyosati imkoniyatlarini tushunish

Calico barcha zanjirlar bo'ylab siyosatlarni qo'llash imkonini beruvchi siyosat variantlarini taqdim etadi. Buni yodda tutgan holda, keling, Calico-da mavjud bo'lgan turli xil siyosat konfiguratsiya variantlarini ko'rib chiqaylik. Quyidagi variantlar ro'yxatidagi raqamlar yuqoridagi diagrammadagi raqamlarga mos keladi.

  1. Ish yukining oxirgi nuqtasi (pod) siyosati
  2. Xost oxirgi nuqta siyosati
  3. ApplyOnForward opsiyasi
  4. PreDNAT siyosati
  5. Kuzatilmagan siyosat

Ish yukining so'nggi nuqtalariga (Kubernetes pods yoki OpenStack VM'lari) siyosatlar qanday qo'llanilishini ko'rib chiqishdan boshlaylik va keyin xost so'nggi nuqtalari uchun siyosat variantlarini ko'rib chiqaylik.

Ish yukining oxirgi nuqtalari

Ish yukining oxirgi nuqtasi siyosati (1)

Bu kubernet podkastlaringizni himoya qilish variantidir. Calico Kubernetes NetworkPolicy bilan ishlashni qo'llab-quvvatlaydi, lekin u qo'shimcha siyosatlarni ham ta'minlaydi - Calico NetworkPolicy va GlobalNetworkPolicy. Calico har bir pod (ish yuki) uchun zanjir yaratadi va FORWARD zanjirining filtr jadvaliga ish yuki uchun INPUT va OUTPUT zanjirlarida ilgaklar yaratadi.

Xost oxirgi nuqtalari

Xostning oxirgi nuqtasi siyosati (2)

CNI (konteyner tarmog'i interfeysi) ga qo'shimcha ravishda, Calico siyosatlari xostning o'zini himoya qilish imkoniyatini beradi. Calico'da siz xost interfeysi kombinatsiyasini va kerak bo'lganda port raqamlarini belgilash orqali xost so'nggi nuqtasini yaratishingiz mumkin. Ushbu ob'ekt uchun siyosatni qo'llash INPUT va OUTPUT zanjirlaridagi filtr jadvali yordamida amalga oshiriladi. Diagrammadan ko'rinib turibdiki, (2) ular tugun/xostdagi mahalliy jarayonlarga taalluqlidir. Ya'ni, agar siz xostning so'nggi nuqtasiga tegishli siyosat yaratsangiz, u podkastlaringizga boradigan/tashuvchi trafikka ta'sir qilmaydi. Lekin u Calico siyosatlaridan foydalangan holda xost va podslaringiz uchun trafikni blokirovka qilish uchun yagona interfeys/sintaksisni taqdim etadi. Bu heterojen tarmoq uchun siyosatlarni boshqarish jarayonini sezilarli darajada osonlashtiradi. Klaster xavfsizligini oshirish uchun xost so'nggi nuqta siyosatlarini sozlash yana bir muhim foydalanish holatidir.

ApplyOnForward siyosati (3)

ApplyOnForward opsiyasi Calico global tarmoq siyosatida mavjud bo'lib, siyosatlarni xost so'nggi nuqtasi orqali o'tadigan barcha trafikka, shu jumladan xost tomonidan uzatiladigan trafikga qo'llash imkonini beradi. Bunga mahalliy podka yoki tarmoqdagi boshqa joyga yo'naltirilgan trafik kiradi. Calico bu sozlamani PreDNAT-dan foydalanadigan va kuzatilmagan siyosatlar uchun yoqishni talab qiladi, quyidagi bo'limlarga qarang. Bundan tashqari, ApplyOnForward virtual router yoki dasturiy ta'minot NAT ishlatilgan hollarda xost trafigini kuzatish uchun ishlatilishi mumkin.

Shuni esda tutingki, agar siz bir xil tarmoq siyosatini ham xost jarayonlariga, ham podkalarga qo'llashingiz kerak bo'lsa, ApplyOnForward opsiyasidan foydalanishingiz shart emas. Sizga kerak bo'lgan yagona narsa - kerakli xost nuqtasi va ish yukining so'nggi nuqtasi (pod) uchun yorliq yaratish. Calico oxirgi nuqta turidan (hostendpoint yoki ish yukidan) qat'i nazar, yorliqlarga asoslangan siyosatni amalga oshirish uchun etarlicha aqlli.

PreDNAT siyosati (4)

Kubernetes-da xizmat ko'rsatish ob'ekti portlari NodePorts opsiyasi yordamida yoki ixtiyoriy ravishda (Calico-dan foydalanilganda) ularni Cluster IP-lari yoki Tashqi IP-lar opsiyalari yordamida reklama qilish orqali ta'sirlanishi mumkin. Kube-proksi DNAT-dan foydalangan holda xizmatga bog'langan kiruvchi trafikni mos keladigan xizmatning podslariga balanslaydi. Shuni hisobga olib, NodePorts orqali keladigan trafik siyosatini qanday qo'llaysiz? Ushbu siyosatlar DNAT tomonidan trafikni qayta ishlashdan oldin qo'llanilishini ta'minlash uchun (bu xost: port va tegishli xizmat o'rtasidagi xaritalash), Calico globalNetworkPolicy uchun "preDNAT: true" deb nomlangan parametrni taqdim etadi.

Pre-DNAT yoqilganda, bu siyosatlar diagrammada (4) - PREROUTING zanjirining mangle jadvalida - darhol DNATdan oldin amalga oshiriladi. Siyosatlarning odatiy tartibi bu erda kuzatilmaydi, chunki bu siyosatlarni qo'llash trafikni qayta ishlash yo'lida ancha oldin sodir bo'ladi. Biroq, preDNAT siyosatlari o'zaro qo'llash tartibini hurmat qiladi.

Pre-DNAT bilan siyosatlarni yaratishda siz ishlov bermoqchi bo'lgan trafikdan ehtiyot bo'lishingiz va ko'pchilikni rad etishga ruxsat berishingiz kerak. Pre-DNAT siyosatida “ruxsat berish” deb belgilangan trafik endi hostendpoint siyosati tomonidan tekshirilmaydi, DNATdan oldingi siyosatda bajarilmagan trafik qolgan zanjirlar orqali davom etadi.
Calico preDNAT-dan foydalanganda applyOnForward opsiyasini yoqishni majburiy qilib qo'ydi, chunki ta'rif bo'yicha trafikning manzili hali tanlanmagan. Trafik xost jarayoniga yo'naltirilishi yoki podka yoki boshqa tugunga yo'naltirilishi mumkin.

Kuzatilmagan siyosat (5)

Tarmoqlar va ilovalar xatti-harakatlarida katta farqlarga ega bo'lishi mumkin. Ba'zi ekstremal holatlarda ilovalar ko'plab qisqa muddatli ulanishlarni yaratishi mumkin. Bu conntrack (Linux tarmoq stekining asosiy komponenti) xotirasi tugashiga olib kelishi mumkin. An'anaga ko'ra, ushbu turdagi ilovalarni Linuxda ishga tushirish uchun siz qo'lda ulanishni sozlashingiz yoki o'chirib qo'yishingiz yoki konntrackni chetlab o'tish uchun iptables qoidalarini yozishingiz kerak bo'ladi. Agar ulanishlarni iloji boricha tezroq qayta ishlashni istasangiz, Calico-da kuzatilmagan siyosat oddiyroq va samaraliroq variantdir. Misol uchun, agar siz massivdan foydalansangiz memcache yoki qo'shimcha himoya chorasi sifatida DDOS.

Buni o'qing blog post (yoki bizning tarjimamiz) qoʻshimcha maʼlumot, jumladan, kuzatilmagan siyosat yordamida ishlash testlari uchun.

Calico globalNetworkPolicy-da "doNotTrack: true" parametrini o'rnatganingizda, u **kuzatilmagan** siyosatiga aylanadi va Linux paketlarini qayta ishlash jarayonida juda erta qo'llaniladi. Yuqoridagi diagrammaga qaraganda, ulanishni kuzatish (conntrack) boshlanishidan oldin xom jadvaldagi PREROUTING va OUTPUT zanjirlarida kuzatilmagan siyosatlar qo'llaniladi. Agar paketga kuzatilmagan siyosat tomonidan ruxsat berilsa, u ushbu paket uchun ulanishni kuzatishni o'chirib qo'yish uchun belgilanadi. Bu ... bildiradi:

  • Kuzatilmagan siyosat har bir paket asosida qo'llaniladi. Ulanish (yoki oqim) tushunchasi yo'q. Aloqalarning etishmasligi bir qator muhim oqibatlarga olib keladi:
  • Agar siz soʻrov va javob trafigiga ruxsat bermoqchi boʻlsangiz, kiruvchi va chiquvchi uchun qoida kerak (chunki Calico odatda javob trafigini ruxsat etilgan deb belgilash uchun conntrack’dan foydalanadi).
  • Kubernetes ish yuklari (podlari) uchun kuzatilmagan siyosat ishlamaydi, chunki bu holda podkastdan chiquvchi ulanishni kuzatishning imkoni yo'q.
  • NAT kuzatilmagan paketlar bilan to'g'ri ishlamaydi (chunki yadro NAT xaritasini conntrack-da saqlaydi).
  • Kuzatilmagan siyosatda "hammasiga ruxsat berish" qoidasidan o'tishda barcha paketlar kuzatilmagan deb belgilanadi. Bu deyarli har doim ham siz xohlagan narsa emas, shuning uchun kuzatilmaydigan siyosatlar tomonidan ruxsat etilgan paketlar haqida juda tanlangan bo'lish muhim (va ko'pchilik trafikning oddiy kuzatilgan siyosatlar orqali o'tishiga imkon beradi).
  • Kuzatilmagan siyosatlar paketlarni qayta ishlash quvurining eng boshida qo'llaniladi. Calico siyosatlarini yaratishda buni tushunish juda muhim. Sizda order:1 bilan pod siyosati va order:1000 bilan kuzatilmaydigan siyosat bo'lishi mumkin. Bu muhim emas. Kuzatilmagan siyosat pod uchun siyosatdan oldin qoʻllaniladi. Kuzatilmagan siyosatlar ijro tartibini faqat o'zaro hurmat qiladi.

doNotTrack siyosatining maqsadlaridan biri bu siyosatni Linux paketlarini qayta ishlash quvur liniyasida juda erta amalga oshirish boʻlganligi sababli, Calico doNotTrack-dan foydalanganda applyOnForward opsiyasini belgilashni majburiy qiladi. Paketlarni qayta ishlash diagrammasiga murojaat qilib, marshrutlash bo'yicha har qanday qarordan oldin kuzatilmagan (5) siyosati qo'llanilishini unutmang. Trafik xost jarayoniga yo'naltirilishi yoki podka yoki boshqa tugunga yo'naltirilishi mumkin.

natijalar

Biz Calico-da turli xil siyosat variantlarini (Host endpoint, ApplyOnForward, preDNAT va Untracked) va ular paketlarni qayta ishlash yo'lida qanday qo'llanilishini ko'rib chiqdik. Ularning qanday ishlashini tushunish samarali va xavfsiz siyosatni ishlab chiqishga yordam beradi. Calico bilan siz yorliq (tugunlar va podkastlar guruhi) uchun amal qiladigan global tarmoq siyosatidan foydalanishingiz va turli parametrlarga ega siyosatlarni qo'llashingiz mumkin. Bu xavfsizlik va tarmoq dizayni bo'yicha mutaxassislarga Calico siyosatlari bilan yagona siyosat tilidan foydalangan holda bir vaqtning o'zida "hamma narsani" (oxirgi nuqta turlarini) qulay tarzda himoya qilish imkonini beradi.

Tasdiqlash: Men minnatdorchilik bildirmoqchiman Shon Krampton и Alexa Pollitta ko'rib chiqish va qimmatli ma'lumotlar uchun.

Manba: www.habr.com

a Izoh qo'shish