Calico ilə Şəbəkə Siyasətinin Tətbiq Seçimlərini Anlamaq

Calico ilə Şəbəkə Siyasətinin Tətbiq Seçimlərini Anlamaq

Calico şəbəkə plagini aparat hostlarını, virtual maşınları və podları qorumaq üçün vahid sintaksisi olan geniş şəbəkə siyasətini təmin edir. Bu siyasətlər ad məkanında tətbiq oluna bilər və ya tətbiq olunan qlobal şəbəkə siyasətləri ola bilər hostun son nöqtəsi (birbaşa hostda işləyən proqramları qorumaq üçün - host server və ya virtual maşın ola bilər) və ya iş yükünün son nöqtəsi (konteynerlərdə və ya yerləşdirilən virtual maşınlarda işləyən proqramları qorumaq üçün). Calico siyasətləri preDNAT, unraracked və applyOnForward kimi seçimlərdən istifadə edərək paket yolunun müxtəlif nöqtələrində təhlükəsizlik tədbirləri tətbiq etməyə imkan verir. Bu seçimlərin necə işlədiyini başa düşmək ümumi sisteminizin təhlükəsizliyini və performansını yaxşılaşdırmağa kömək edə bilər. Bu məqalə paket emal yollarında (iptabels zəncirləri) baş verənlərə diqqət yetirməklə, host son nöqtələrinə tətbiq edilən bu Calico siyasət seçimlərinin (preDNAT, unracked və applyOnForward) mahiyyətini izah edir.

Bu məqalə Kubernetes və Calico şəbəkə siyasətlərinin necə işlədiyinə dair əsas anlayışınız olduğunu güman edir. Əgər yoxsa, sınamağı məsləhət görürük əsas şəbəkə siyasəti dərsliyi и host qoruma dərsliyi bu məqaləni oxumadan əvvəl Calico istifadə edin. Sizdən iş haqqında əsas anlayışa sahib olmanızı da gözləyirik iptables linuxda.

kolenkor qlobal şəbəkə siyasəti etiketlər üzrə (host qruplarına və iş yüklərinə/podlara) bir sıra giriş qaydaları tətbiq etməyə imkan verir. Birlikdə heterojen sistemlərdən - virtual maşınlardan, birbaşa aparat üzərində sistemdən və ya kubernet infrastrukturundan istifadə etsəniz, bu çox faydalıdır. Bundan əlavə, siz bir sıra deklarativ siyasətlərdən istifadə edərək klasterinizi (qovşaqlarını) qoruya və daxil olan trafikə şəbəkə siyasətlərini tətbiq edə bilərsiniz (məsələn, NodePorts və ya Xarici IP xidməti vasitəsilə).

Əsas səviyyədə, Calico bir podu şəbəkəyə qoşduqda (aşağıdakı diaqrama baxın), onu virtual Ethernet interfeysindən (veth) istifadə edərək hosta qoşur. Pod tərəfindən göndərilən trafik bu virtual interfeysdən hosta gəlir və fiziki şəbəkə interfeysindən gəldiyi kimi emal olunur. Defolt olaraq, Calico bu interfeysləri caliXXX adlandırır. Trafik virtual interfeysdən keçdiyi üçün iptables vasitəsilə sanki pod bir hop uzaqdadır. Buna görə də, trafik bir poddan/dan gələndə, ev sahibinin nöqteyi-nəzərindən ötürülür.

Calico ilə işləyən Kubernetes qovşağında siz virtual interfeysi (veth) iş yükü ilə aşağıdakı kimi əlaqələndirə bilərsiniz. Aşağıdakı misalda veth#10 (calic1cbf1ca0f8) calico monitorinq ad məkanında cnx-manager-* ilə bağlı olduğunu görə bilərsiniz.

[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 ilə Şəbəkə Siyasətinin Tətbiq Seçimlərini Anlamaq

Calico-nun hər bir iş yükü üçün veth interfeysi yaratdığını nəzərə alsaq, o, siyasətləri necə tətbiq edir? Bunun üçün Calico iptables istifadə edərək paket emal yolunun müxtəlif zəncirlərində qarmaqlar yaradır.

Aşağıdakı diaqram iptables-də (və ya netfilter alt sistemində) paket emalında iştirak edən zəncirləri göstərir. Şəbəkə interfeysi vasitəsilə paket gələndə əvvəlcə PREROUTING zəncirindən keçir. Daha sonra marşrutlaşdırma qərarı verilir və bunun əsasında paket ya INPUT (host proseslərinə yönəldilir) və ya FORWARD (pod və ya şəbəkədəki digər node yönəldilir) vasitəsilə keçir. Yerli prosesdən paket kabelə göndərilməzdən əvvəl OUTPUT və sonra POSTROUTING zəncirindən keçir.

Nəzərə alın ki, pod həm də iptables işlənməsi baxımından xarici bir varlıqdır (veth ilə bağlıdır). Ümumiləşdirək:

  • Yönləndirilmiş trafik (nat, marşrutlaşdırılmış və ya poddan/dən) PREROUTING - FORWARD - POSTROUTING zəncirlərindən keçir.
  • Yerli host prosesinə trafik PREROUTING - INPUT zəncirindən keçir.
  • Yerli host prosesindən gələn trafik OUTPUT - POSTROUTING zəncirindən keçir.

Calico ilə Şəbəkə Siyasətinin Tətbiq Seçimlərini Anlamaq

Calico bütün zəncirlərdə siyasətlər tətbiq etməyə imkan verən siyasət variantları təqdim edir. Bunu nəzərə alaraq, Calico-da mövcud olan müxtəlif siyasət konfiqurasiya seçimlərinə baxaq. Aşağıdakı seçimlər siyahısındakı nömrələr yuxarıdakı diaqramdakı rəqəmlərə uyğundur.

  1. İş yükünün son nöqtəsi (pod) siyasəti
  2. Host son nöqtə siyasəti
  3. ApplyOnForward seçimi
  4. PreDNAT Siyasəti
  5. İzlənilməmiş Siyasət

Siyasətlərin iş yükünün son nöqtələrinə (Kubernetes podları və ya OpenStack VM-ləri) necə tətbiq olunduğuna baxmaqla başlayaq və sonra host son nöqtələri üçün siyasət seçimlərinə baxaq.

İş yükünün son nöqtələri

İş yükünün son nöqtəsi siyasəti (1)

Bu, kubernet podlarınızı qorumaq üçün bir seçimdir. Calico Kubernetes NetworkPolicy ilə işləməyi dəstəkləyir, lakin əlavə siyasətlər də təmin edir - Calico NetworkPolicy və GlobalNetworkPolicy. Calico hər bir pod (iş yükü) üçün bir zəncir yaradır və FORWARD zəncirinin filtr cədvəlinə iş yükü üçün INPUT və OUTPUT zəncirlərində qarmaqlar yaradır.

Host son nöqtələri

Host Endpoint Siyasəti (2)

CNI (konteyner şəbəkə interfeysi) ilə yanaşı, Calico siyasətləri hostun özünü qorumaq imkanı verir. Calico-da siz host interfeysinin kombinasiyasını və lazım gələrsə port nömrələrini təyin etməklə hostun son nöqtəsi yarada bilərsiniz. Bu qurum üçün siyasətin tətbiqi INPUT və OUTPUT zəncirlərində filtr cədvəlindən istifadə etməklə həyata keçirilir. Diaqramdan göründüyü kimi, (2) onlar node/host-da yerli proseslərə aiddir. Yəni, hostun son nöqtəsinə tətbiq olunan bir siyasət yaratsanız, bu, podlarınıza gedən/dən gedən trafikə təsir etməyəcək. Lakin o, Calico siyasətlərindən istifadə edərək host və podlarınız üçün trafikin qarşısını almaq üçün vahid interfeys/sintaksis təmin edir. Bu, heterojen şəbəkə üçün siyasətlərin idarə edilməsi prosesini xeyli asanlaşdırır. Klaster təhlükəsizliyini artırmaq üçün hostun son nöqtəsi siyasətlərini konfiqurasiya etmək başqa bir vacib istifadə halıdır.

ApplyOnForward Siyasəti (3)

ApplyOnForward seçimi Calico qlobal şəbəkə siyasətində mövcuddur ki, siyasətlər host tərəfindən yönləndiriləcək trafik də daxil olmaqla, hostun son nöqtəsindən keçən bütün trafikə tətbiq olunsun. Bura yerli poda və ya şəbəkənin hər hansı digər yerinə yönləndirilən trafik daxildir. Calico bu parametrin PreDNAT istifadə edən və izlənilməmiş siyasətlər üçün aktiv olmasını tələb edir, aşağıdakı bölmələrə baxın. Bundan əlavə, ApplyOnForward virtual marşrutlaşdırıcı və ya proqram NAT istifadə edildiyi hallarda host trafikinə nəzarət etmək üçün istifadə edilə bilər.

Qeyd edək ki, eyni şəbəkə siyasətini həm host proseslərinə, həm də podlara tətbiq etməlisinizsə, ApplyOnForward seçimindən istifadə etməyinizə ehtiyac yoxdur. Sizə lazım olan tək şey tələb olunan hostendpoint və iş yükünün son nöqtəsi (pod) üçün etiket yaratmaqdır. Calico son nöqtə növündən (hostendpoint və ya iş yükü) asılı olmayaraq etiketlərə əsaslanan siyasəti tətbiq etmək üçün kifayət qədər ağıllıdır.

PreDNAT Siyasəti (4)

Kubernetes-də xidmət obyekti portları NodePorts seçimindən istifadə etməklə və ya isteğe bağlı olaraq (Calico istifadə edərkən) Cluster IPs və ya Xarici IP seçimlərindən istifadə etməklə onları reklam etməklə xaricdə ifşa oluna bilər. Kube-proxy, DNAT istifadə edərək, müvafiq xidmətin podlarına xidmətə bağlı gələn trafiki balanslaşdırır. Bunu nəzərə alaraq, NodePorts vasitəsilə gələn trafik üçün siyasətləri necə tətbiq edirsiniz? Trafik DNAT tərəfindən emal edilməzdən əvvəl bu siyasətlərin tətbiq edilməsini təmin etmək üçün (bu host:port və müvafiq xidmət arasında xəritəçəkmədir) Calico qlobalNetworkPolicy üçün "preDNAT: doğru" adlı parametr təqdim edir.

Pre-DNAT aktivləşdirildikdə, bu siyasətlər diaqramda (4) - PREROUTING zəncirinin idarəetmə cədvəlində - dərhal DNAT-dan əvvəl həyata keçirilir. Siyasətlərin adi sırasına burada əməl edilmir, çünki bu siyasətlərin tətbiqi trafikin emal yolunda daha əvvəl baş verir. Bununla belə, preDNAT siyasətləri öz aralarında tətbiq qaydasına hörmət edir.

Pre-DNAT ilə siyasətlər yaratarkən, emal etmək istədiyiniz trafikə diqqətli olmaq və əksəriyyətin rədd edilməsinə icazə vermək vacibdir. DNAT-dan əvvəl siyasətdə "icazə verin" kimi işarələnmiş trafik artıq hostendpoint siyasəti tərəfindən yoxlanılmayacaq, DNAT-dan əvvəlki siyasətdə uğursuz olan trafik isə qalan zəncirlər vasitəsilə davam edəcək.
Calico preDNAT-dan istifadə edərkən applyOnForward seçimini aktiv etməyi məcbur etdi, çünki tərifinə görə trafikin təyinatı hələ seçilməyib. Trafik host prosesinə yönəldilə bilər və ya pod və ya başqa bir node yönləndirilə bilər.

İzlənilməmiş Siyasət (5)

Şəbəkələr və tətbiqlər davranış baxımından böyük fərqlərə malik ola bilər. Bəzi ekstremal hallarda tətbiqlər çoxlu qısamüddətli əlaqələr yarada bilər. Bu, conntrack-in (Linux şəbəkə yığınının əsas komponenti) yaddaşın tükənməsinə səbəb ola bilər. Ənənəvi olaraq, Linux-da bu cür proqramları işə salmaq üçün siz əl ilə konfiqurasiya etməli və ya əlaqəni söndürməli və ya əlaqəni keçmək üçün iptables qaydalarını yazmalısınız. Bağlantıları mümkün qədər tez emal etmək istəyirsinizsə, Calico-da izlənilməyən siyasət daha sadə və daha səmərəli seçimdir. Məsələn, kütləvi istifadə edirsinizsə yaddaş yaddaşı və ya qarşı əlavə müdafiə tədbiri kimi DDOS.

Bunu oxu blog (Və ya bizim tərcüməmiz) izlənilməmiş siyasətdən istifadə edərək performans testləri daxil olmaqla əlavə məlumat üçün.

Calico globalNetworkPolicy-də "doNotTrack: true" seçimini təyin etdikdə o, **izlənilməmiş** siyasətə çevrilir və Linux paket emal boru kəmərində çox erkən tətbiq edilir. Yuxarıdakı diaqrama baxsaq, əlaqə izləmə (conntrack) başlamazdan əvvəl xam cədvəldəki PREROUTING və OUTPUT zəncirlərində izlənilməmiş siyasətlər tətbiq olunur. Paketə izlənilməmiş siyasət tərəfindən icazə verildikdə, o, həmin paket üçün əlaqə izlənilməsini söndürmək üçün qeyd olunur. Bu o deməkdir:

  • İzlənilməmiş siyasət hər paket əsasında tətbiq edilir. Əlaqə (və ya axın) anlayışı yoxdur. Əlaqələrin olmaması bir sıra mühüm nəticələrə malikdir:
  • Əgər siz həm sorğu, həm də cavab trafikinə icazə vermək istəyirsinizsə, sizə həm gələn, həm də gedən üçün qayda lazımdır (çünki Calico adətən cavab trafikini icazə verilən kimi qeyd etmək üçün conntrack-dən istifadə edir).
  • İzlənilməmiş siyasət Kubernetes iş yükləri (podlar) üçün işləmir, çünki bu halda poddan çıxan əlaqəni izləmək mümkün deyil.
  • NAT izlənilməmiş paketlərlə düzgün işləmir (çünki nüvə NAT xəritələməsini conntrack-də saxlayır).
  • İzlənilməmiş siyasətdə "hamısına icazə ver" qaydasından keçərkən bütün paketlər izlənilməmiş kimi qeyd olunacaq. Bu, demək olar ki, həmişə istədiyiniz kimi deyil, ona görə də izlənilməmiş siyasətlərin icazə verdiyi paketlər haqqında çox seçici olmaq vacibdir (və əksər trafikin normal izlənilən siyasətlərdən keçməsinə icazə verin).
  • İzlənilməmiş siyasətlər paket emal boru kəmərinin ən başlanğıcında tətbiq edilir. Calico siyasətlərini yaratarkən bunu başa düşmək çox vacibdir. Sifariş:1 ilə pod siyasəti və sifariş:1000 ilə izlənilməmiş siyasətiniz ola bilər. Fərqi olmayacaq. İzlənilməmiş siyasət pod üçün siyasətdən əvvəl tətbiq olunacaq. Nəzarət olunmayan siyasətlər icra qaydasına yalnız öz aralarında hörmət edir.

doNotTrack siyasətinin məqsədlərindən biri siyasəti çox erkən Linux paket emal boru kəmərində tətbiq etmək olduğundan, Calico doNotTrack istifadə edərkən applyOnForward seçimini təyin etməyi məcbur edir. Paket emal diaqramına istinad edərək qeyd edin ki, izlənilməyən(5) siyasəti hər hansı marşrutlaşdırma qərarından əvvəl tətbiq edilir. Trafik host prosesinə yönəldilə bilər və ya pod və ya başqa bir node yönləndirilə bilər.

Nəticələri

Biz Calico-da müxtəlif siyasət seçimlərinə (Host son nöqtəsi, ApplyOnForward, preDNAT və Untracked) və onların paket emal yolu boyunca necə tətbiq edildiyinə baxdıq. Onların necə işlədiyini başa düşmək effektiv və təhlükəsiz siyasətlərin hazırlanmasına kömək edir. Calico ilə siz etiketə (qovşaqlar və podlar qrupu) aid olan qlobal şəbəkə siyasətindən istifadə edə və müxtəlif parametrlərlə siyasətlər tətbiq edə bilərsiniz. Bu, təhlükəsizlik və şəbəkə dizaynı üzrə mütəxəssislərə Calico siyasətləri ilə vahid siyasət dilindən istifadə edərək, eyni vaxtda “hər şeyi” (son nöqtə növlərini) rahat şəkildə qorumağa imkan verir.

Təşəkkür: Təşəkkür etmək istərdim Sean Crampton и Alexa Pollitta nəzərdən keçirmələri və dəyərli məlumatlar üçün.

Mənbə: www.habr.com

Добавить комментарий