Calico көмегімен желілік саясатты орындау опцияларын түсіну

Calico көмегімен желілік саясатты орындау опцияларын түсіну

Calico желілік плагині аппараттық хосттарды, виртуалды машиналарды және қосқыштарды қорғау үшін бірыңғай синтаксисі бар желі саясаттарының кең ауқымын қамтамасыз етеді. Бұл саясаттар аттар кеңістігінде қолданылуы мүмкін немесе қолданылатын ғаламдық желі саясаттары болуы мүмкін хосттың соңғы нүктесі (хостта тікелей жұмыс істейтін қолданбаларды қорғау үшін – хост сервер немесе виртуалды машина болуы мүмкін) немесе жұмыс жүктемесінің соңғы нүктесі (контейнерлерде немесе орналастырылған виртуалды машиналарда жұмыс істейтін қолданбаларды қорғау үшін). Calico саясаттары preDNAT, unraracked және applyOnForward сияқты опцияларды пайдаланып пакет жолының әртүрлі нүктелерінде қауіпсіздік шараларын қолдануға мүмкіндік береді. Бұл опциялардың қалай жұмыс істейтінін түсіну жалпы жүйенің қауіпсіздігі мен өнімділігін жақсартуға көмектеседі. Бұл мақала пакеттерді өңдеу жолдарында (iptabels тізбектері) не болатынына баса назар аудара отырып, хосттың соңғы нүктелеріне қолданылатын осы Calico саясат опцияларының (preDNAT, unracked және applyOnForward) мәнін түсіндіреді.

Бұл мақалада Kubernetes және Calico желі саясаттары қалай жұмыс істейтіні туралы негізгі түсінік бар деп болжанады. Егер жоқ болса, біз оны сынап көруді ұсынамыз негізгі желі саясаты оқулығы и хостты қорғау оқулығы осы мақаланы оқымас бұрын Calico пайдаланыңыз. Сондай-ақ, сізден жұмыс туралы негізгі түсінік болуын күтеміз iptables Linux жүйесінде.

Calico жаһандық желі саясаты белгілер бойынша кіру ережелерінің жинағын қолдануға мүмкіндік береді (хосттар топтары мен жұмыс жүктемелері/подтар). Бұл гетерогенді жүйелерді - виртуалды машиналарды, тікелей аппараттық құралдағы жүйені немесе кубернет инфрақұрылымын бірге пайдалансаңыз өте пайдалы. Бұған қоса, сіз декларациялық саясаттар жинағын пайдаланып кластерді (түйіндерді) қорғай аласыз және кіріс трафикке желі саясаттарын қолдана аласыз (мысалы, NodePorts немесе Сыртқы IP қызметтері арқылы).

Негізгі деңгейде Calico подкастты желіге қосқанда (төмендегі диаграмманы қараңыз), оны виртуалды Ethernet интерфейсі (veth) арқылы хостқа қосады. Pod арқылы жіберілген трафик хостқа осы виртуалды интерфейстен келеді және физикалық желі интерфейсінен келген сияқты өңделеді. Әдепкі бойынша Calico бұл интерфейстерді caliXXX деп атайды. Трафик виртуалды интерфейс арқылы келетіндіктен, ол iptables арқылы подкаст бір секіртілгендей өтеді. Сондықтан, трафик подкастқа/қайта келгенде, ол хост көзқарасынан жіберіледі.

Calico іске қосылған Kubernetes түйінінде виртуалды интерфейсті (veth) жұмыс жүктемесіне төмендегідей салыстыруға болады. Төмендегі мысалда veth#10 (calic1cbf1ca0f8) calico-monitoring аттар кеңістігіндегі cnx-manager-* қосылғанын көре аласыз.

[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 көмегімен желілік саясатты орындау опцияларын түсіну

Calico әр жұмыс жүктемесі үшін вет интерфейсін жасайтынын ескере отырып, ол саясаттарды қалай орындайды? Бұл үшін Calico iptables көмегімен пакеттерді өңдеу жолының әртүрлі тізбектерінде ілмектерді жасайды.

Төмендегі диаграмма iptables (немесе netfilter ішкі жүйесінде) пакеттерді өңдеуге қатысатын тізбектерді көрсетеді. Пакет желілік интерфейс арқылы келгенде, ол алдымен PREROUTING тізбегі арқылы өтеді. Содан кейін маршруттау туралы шешім қабылданады және осының негізінде пакет INPUT (хост процестеріне бағытталған) немесе FORWARD (подка немесе желідегі басқа түйінге бағытталған) арқылы өтеді. Жергілікті процестен пакет кабельді жібермес бұрын OUTPUT, содан кейін POSTROUTING тізбегі арқылы өтеді.

Подпод iptables өңдеу тұрғысынан сыртқы нысан (veth-ке қосылған) екенін ескеріңіз. Жинақтау:

  • Жіберілген трафик (нат, бағытталған немесе подводқа/под) PREROUTING - FORWARD - POSTROUTING тізбектері арқылы өтеді.
  • Жергілікті хост процесіне трафик PREROUTING - INPUT тізбегі арқылы өтеді.
  • Жергілікті хост процесінен келетін трафик OUTPUT - POSTROUTING тізбегі арқылы өтеді.

Calico көмегімен желілік саясатты орындау опцияларын түсіну

Calico саясат опцияларын барлық тізбектерде қолдануға мүмкіндік береді. Осыны ескере отырып, Calico жүйесінде қол жетімді саясат конфигурациясының әртүрлі опцияларын қарастырайық. Төмендегі опциялар тізіміндегі сандар жоғарыдағы диаграммадағы сандарға сәйкес келеді.

  1. Жұмыс жүктемесінің соңғы нүктесі (под) саясаты
  2. Хосттың соңғы нүктесі саясаты
  3. ApplyOnForward опциясы
  4. PreDNAT саясаты
  5. Бақыланбайтын саясат

Саясаттардың жұмыс жүктемесінің соңғы нүктелеріне (Kubernetes қосқыштары немесе OpenStack VM құрылғылары) қалай қолданылатынын қараудан бастайық, содан кейін хосттың соңғы нүктелеріне арналған саясат опцияларын қарастырайық.

Жұмыс жүктемесінің соңғы нүктелері

Жұмыс жүктемесінің соңғы нүктесі саясаты (1)

Бұл сіздің kubernetes қосқыштарын қорғау опциясы. Calico Kubernetes NetworkPolicy бағдарламасымен жұмыс істеуді қолдайды, бірақ ол сонымен қатар қосымша саясаттарды қамтамасыз етеді - Calico NetworkPolicy және GlobalNetworkPolicy. Calico әрбір подвод (жұмыс жүктемесі) үшін тізбек жасайды және INPUT және OUTPUT тізбектеріндегі жұмыс жүктемесі үшін FORWARD тізбегінің сүзгі кестесіне ілгек жасайды.

Хосттың соңғы нүктелері

Хосттың соңғы нүктесі саясаты (2)

CNI (контейнерлік желі интерфейсі) қосымша Calico саясаттары хосттың өзін қорғау мүмкіндігін береді. Calico жүйесінде хост интерфейсінің тіркесімін және қажет болса, порт нөмірлерін көрсету арқылы хосттың соңғы нүктесін жасауға болады. Бұл нысан үшін саясаттың орындалуына INPUT және OUTPUT тізбектеріндегі сүзгі кестесі арқылы қол жеткізіледі. Диаграммадан көріп отырғаныңыздай, (2) олар түйіндегі/хосттағы жергілікті процестерге қолданылады. Яғни, егер сіз хосттың соңғы нүктесіне қолданылатын саясат жасасаңыз, ол подкасттарға келетін/берілетін трафикке әсер етпейді. Бірақ ол Calico саясаттарын пайдалана отырып, хост пен подкасттар үшін трафикті блоктау үшін бір интерфейсті/синтаксисті қамтамасыз етеді. Бұл гетерогенді желі үшін саясаттарды басқару процесін айтарлықтай жеңілдетеді. Кластер қауіпсіздігін жақсарту үшін хосттың соңғы нүктесі саясаттарын конфигурациялау басқа маңызды пайдалану жағдайы болып табылады.

ApplyOnForward саясаты (3)

ApplyOnForward опциясы Calico ғаламдық желі саясатында саясаттарды хост арқылы қайта жіберілетін трафикті қоса, хосттың соңғы нүктесі арқылы өтетін барлық трафикке қолдануға мүмкіндік береді. Бұған жергілікті қосқышқа немесе желідегі кез келген басқа жерге жіберілген трафик кіреді. Calico бұл параметрді PreDNAT пайдаланатын және бақылаусыз саясаттар үшін қосуды талап етеді, келесі бөлімдерді қараңыз. Сонымен қатар, ApplyOnForward виртуалды маршрутизатор немесе NAT бағдарламалық құралы пайдаланылған жағдайларда хост трафигін бақылау үшін пайдаланылуы мүмкін.

Егер сізге бірдей желі саясатын хост процестеріне де, қосқыштарға да қолдану қажет болса, ApplyOnForward опциясын пайдаланудың қажеті жоқ екенін ескеріңіз. Сізге тек қажетті хост нүктесі және жұмыс жүктемесінің соңғы нүктесі (под) үшін белгіні жасау керек. Calico соңғы нүкте түріне (хостинг нүктесі немесе жұмыс жүктемесі) қарамастан жапсырмаларға негізделген саясатты қолдану үшін жеткілікті ақылды.

PreDNAT саясаты (4)

Kubernetes жүйесінде қызмет нысанының порттарын NodePorts опциясы арқылы немесе қосымша (Calico пайдаланған кезде) Cluster IPs немесе Сыртқы IP опциялары арқылы жарнамалау арқылы сыртқа шығаруға болады. Kube-прокси DNAT арқылы сәйкес қызметтің бөлімшелеріне қызметке байланысты кіріс трафикті теңестіреді. Осыны ескере отырып, NodePorts арқылы келетін трафикке қатысты саясаттарды қалай қолданасыз? Бұл саясаттардың трафикті DNAT (хост: порт пен сәйкес қызмет арасындағы салыстыру) өңдемес бұрын қолданылуын қамтамасыз ету үшін Calico «preDNAT: шын» деп аталатын жаһандықNetworkPolicy параметрін қамтамасыз етеді.

Pre-DNAT қосылған кезде, бұл саясаттар диаграммада (4) - PREROUTING тізбегінің мангле кестесінде - DNAT алдында тікелей орындалады. Мұнда саясаттардың әдеттегі тәртібі сақталмайды, себебі бұл саясаттарды қолдану трафикті өңдеу жолында әлдеқайда ертерек орын алады. Дегенмен, preDNAT саясаттары өзара қолдану тәртібін құрметтейді.

Pre-DNAT көмегімен саясаттарды жасаған кезде өңдегіңіз келетін трафикке абай болу және көпшілігінің қабылданбауына рұқсат беру маңызды. DNAT алдындағы саясатта "рұқсат ету" деп белгіленген трафик енді хост нүкте саясатымен тексерілмейді, ал DNAT алдындағы саясатта орындалмаған трафик қалған тізбектер арқылы жалғасады.
Calico preDNAT пайдалану кезінде applyOnForward опциясын қосуды міндетті етті, себебі анықтамасы бойынша трафиктің тағайындалу орны әлі таңдалмаған. Трафик хост процесіне бағытталуы мүмкін немесе оны подкастқа немесе басқа түйінге жіберуге болады.

Бақыланбайтын саясат (5)

Желілер мен қолданбалардың мінез-құлқында үлкен айырмашылықтар болуы мүмкін. Кейбір төтенше жағдайларда қолданбалар көптеген қысқа мерзімді қосылымдарды жасай алады. Бұл conntrack (Linux желілік стекінің негізгі құрамдас бөлігі) жадының таусылуына әкелуі мүмкін. Дәстүрлі түрде, Linux жүйесінде қолданбалардың осы түрлерін іске қосу үшін conntrack-ті қолмен конфигурациялау немесе өшіру немесе conntrack-ті айналып өту үшін iptables ережелерін жазу қажет болады. Calico жүйесіндегі бақыланбайтын саясат - қосылымдарды мүмкіндігінше тез өңдегіңіз келсе, қарапайым және тиімдірек опция. Мысалы, массивті қолдансаңыз memcache немесе қорғаудың қосымша шарасы ретінде DDOS.

Мынаны оқы блог пост (немесе біздің аудармамыз) бақыланбайтын саясатты пайдаланатын өнімділік сынақтарын қоса, қосымша ақпарат алу үшін.

Calico globalNetworkPolicy ішінде "doNotTrack: true" опциясын орнатқанда, ол **бақыланбаған** саясатқа айналады және Linux пакеттерін өңдеу құбырында өте ерте қолданылады. Жоғарыдағы диаграммаға қарасақ, қосылымды бақылау (conntrack) басталғанға дейін өңделмеген кестедегі PREROUTING және OUTPUT тізбектерінде бақыланбайтын саясаттар қолданылады. Бақыланбаған саясат пакетке рұқсат бергенде, ол пакет үшін қосылымды бақылауды өшіру үшін белгіленеді. Бұл білдіреді:

  • Бақыланбайтын саясат әр пакет негізінде қолданылады. Байланыс (немесе ағын) деген ұғым жоқ. Байланыстың болмауы бірнеше маңызды салдарға әкеледі:
  • Сұрау мен жауап трафигіне рұқсат бергіңіз келсе, кіріс және шығыс екеуіне де ереже қажет (өйткені Calico әдетте жауап трафигін рұқсат етілген деп белгілеу үшін conntrack пайдаланады).
  • Бақыланбайтын саясат Kubernetes жұмыс жүктемелері (подтар) үшін жұмыс істемейді, себебі бұл жағдайда қосқыштан шығыс қосылымды қадағалаудың ешқандай жолы жоқ.
  • NAT бақыланбаған пакеттермен дұрыс жұмыс істемейді (өйткені ядро ​​NAT картасын conntrack-те сақтайды).
  • Бақыланбайтын саясатта «бәріне рұқсат ету» ережесінен өту кезінде барлық пакеттер бақыланбаған деп белгіленеді. Бұл әрдайым дерлік сіз қалаған нәрсе емес, сондықтан бақыланбайтын саясаттар рұқсат ететін пакеттерге қатысты өте таңдаулы болу маңызды (және трафиктің көпшілігіне қалыпты бақыланатын саясаттар арқылы өтуге мүмкіндік беріңіз).
  • Бақыланбайтын саясаттар пакеттерді өңдеу құбырының ең басында қолданылады. Бұл Calico саясаттарын жасау кезінде түсіну өте маңызды. Сізде тапсырыс: 1 және тапсырыс: 1000 бар бақыланбайтын саясат болуы мүмкін. Бұл маңызды емес. Бақыланбайтын саясат подкастқа арналған саясаттан бұрын қолданылады. Бақыланбайтын саясаттар орындау тәртібін тек бір-біріне құрметтейді.

doNotTrack саясатының мақсаттарының бірі саясатты Linux пакеттерін өңдеу құбырында өте ерте қолдану болғандықтан, Calico doNotTrack пайдалану кезінде applyOnForward опциясын көрсетуді міндетті етеді. Пакетті өңдеу диаграммасына сілтеме жасай отырып, бақыланбаған(5) саясаты кез келген маршруттау шешімдерінен бұрын қолданылатынын ескеріңіз. Трафик хост процесіне бағытталуы мүмкін немесе оны подкастқа немесе басқа түйінге жіберуге болады.

Нәтижелері

Біз Calico ішіндегі әртүрлі саясат опцияларын (Хосттың соңғы нүктесі, ApplyOnForward, preDNAT және Untracked) және олардың пакетті өңдеу жолында қалай қолданылатынын қарастырдық. Олардың қалай жұмыс істейтінін түсіну тиімді және қауіпсіз саясаттарды әзірлеуге көмектеседі. Calico көмегімен жапсырмаға (түйіндер мен түйіндер тобы) қолданылатын жаһандық желі саясатын пайдалануға және әртүрлі параметрлері бар саясаттарды қолдануға болады. Бұл қауіпсіздік және желілік дизайн мамандарына Calico саясаттарымен бір саясат тілі арқылы бірден «барлығын» (соңғы нүкте түрлері) ыңғайлы қорғауға мүмкіндік береді.

Алғыс: Мен алғыс айтқым келеді Шон Крамптон и Alexa Pollitta шолулары мен құнды ақпараттары үшін.

Ақпарат көзі: www.habr.com

пікір қалдыру