Фаҳмидани имконоти татбиқи сиёсати шабакавӣ бо Calico

Фаҳмидани имконоти татбиқи сиёсати шабакавӣ бо Calico

Васлкунаки шабакаи Calico доираи васеи сиёсатҳои шабакаро бо синтаксиси ягона барои ҳифзи ҳостҳои сахтафзор, мошинҳои виртуалӣ ва подкастҳо таъмин мекунад. Ин сиёсатҳо метавонанд дар дохили фазои ном татбиқ карда шаванд ё сиёсатҳои шабакаи глобалии ба онҳо татбиқшаванда бошанд нуқтаи ниҳоии мизбон (барои ҳифзи барномаҳое, ки мустақиман дар ҳост кор мекунанд - мизбон метавонад мустақиман сервер ё мошини виртуалӣ бошад) ё ба нуқтаи ниҳоии сарбории корӣ (барои ҳифзи барномаҳое, ки дар контейнерҳо ё мошинҳои виртуалии ҷойгиршуда кор мекунанд). Сиёсати Calico ба шумо имкон медиҳад, ки бо истифода аз имконоти ба монанди preDNAT, unracked ва applyOnForward ба нуқтаҳои гуногуни роҳи бастаҳо чораҳои амниятӣ татбиқ кунед. Фаҳмидани он, ки ин интихобҳо чӣ гуна кор мекунанд, метавонанд ба беҳтар шудани амният ва иҷрои умумии система мусоидат кунанд. Ин мақола табиати ин танзимоти сиёсати Calico (preDNAT, unracked ва applyOnForward) -ро шарҳ медиҳад, ки ба нуқтаҳои ниҳоии ҳост татбиқ карда мешаванд, бо таваҷҷӯҳ ба он чизе, ки дар роҳҳои коркарди пакетҳо (занҷирҳои iptabels) рух медиҳад.

Ин мақола тахмин мекунад, ки шумо фаҳмиши асосӣ дар бораи чӣ гуна кор кардани сиёсатҳои шабакаи Kubernetes ва Calico доред. Агар не, мо тавсия медиҳем, ки кӯшиш кунед дастури асосии сиёсати шабака и дастури ҳифзи мизбон Пеш аз хондани ин мақола Calico-ро истифода баред. Мо инчунин интизорем, ки шумо фаҳмиши асосӣ дар бораи чӣ гуна дошта бошед iptables дар Linux.

Калико сиёсати шабакаи глобалӣ ба шумо имкон медиҳад, ки маҷмӯи қоидаҳои дастрасиро аз рӯи нишонаҳо (ба гурӯҳҳои ҳостҳо ва сарбории корӣ/подҳо) татбиқ кунед. Ин хеле муфид аст, агар шумо системаҳои гетерогениро якҷоя истифода баред - мошинҳои виртуалӣ, системаи мустақим дар сахтафзор ё инфрасохтори kubernetes. Илова бар ин, шумо метавонед кластери худро (гиреҳҳо) бо маҷмӯи сиёсатҳои декларативӣ муҳофизат кунед ва сиёсатҳои шабакаро ба трафики воридотӣ татбиқ кунед (масалан, тавассути хидмати NodePorts ё IPs External).

Дар сатҳи бунёдӣ, вақте ки Calico як pod-ро ба шабака пайваст мекунад (ба диаграммаи зер нигаред), онро бо истифода аз интерфейси виртуалии Ethernet (veth) ба ҳост пайваст мекунад. Трафики аз ҷониби pod фиристодашуда аз ин интерфейси виртуалӣ ба мизбон меояд ва ҳамон тавре коркард карда мешавад, ки гӯё он аз интерфейси шабакаи физикӣ омадааст. Бо нобаёнӣ, Calico ин интерфейсҳоро caliXXX номгузорӣ мекунад. Азбаски трафик тавассути интерфейси маҷозӣ меояд, он тавассути iptables мегузарад, гӯё ки поддон як хоп дуртар бошад. Ҳамин тавр, вақте ки трафик аз як подкаст меояд, он аз нуқтаи назари мизбон интиқол дода мешавад.

Дар гиреҳи Kubernetes, ки Calico кор мекунад, шумо метавонед интерфейси маҷозӣ (veth) -ро ба сарбории кории монанди ин харита кунед. Дар мисоли зер шумо мебинед, ки veth#10 (calic1cbf1ca0f8) ба 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 мегузарад.

Аҳамият диҳед, ки pod инчунин аз ҷиҳати коркарди iptables як ҷузъи беруна аст (ба veth замима карда мешавад). Биёед ҷамъбаст кунем:

  • Трафики интиқолшуда (нат, масир ё ба/аз под) тавассути занҷирҳои PREROUTING - FORWARD - POSTROUTING мегузарад.
  • Трафик ба раванди мизбони маҳаллӣ тавассути занҷири PREROUTING - INPUT мегузарад.
  • Трафик аз раванди мизбони маҳаллӣ тавассути занҷири OUTPUT - POSTROUTING мегузарад.

Фаҳмидани имконоти татбиқи сиёсати шабакавӣ бо Calico

Calico имконоти сиёсатҳоро пешниҳод мекунад, ки шумо метавонед сиёсатҳоро ба ҳама занҷирҳо татбиқ кунед. Бо дарназардошти ин, биёед вариантҳои гуногуни сиёсатеро, ки дар Калико мавҷуданд, дида бароем. Рақамҳои рӯйхати вариантҳои дар поён овардашуда ба рақамҳои диаграммаи боло мувофиқат мекунанд.

  1. Сиёсати ниҳоии сарбории корӣ (под).
  2. сиёсати нуқтаи ниҳоии мизбон
  3. Опсияи ApplyOnForward
  4. Сиёсати PreDNAT
  5. Сиёсати назоратнашаванда

Биёед аз бубинем, ки чӣ гуна сиёсатҳо ба нуқтаҳои ниҳоии сарбории корӣ (Pods 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) тавассути эълони онҳо тавассути имконоти IP-ҳои кластерӣ ё IP-ҳои беруна фош карда шаванд. Kube-proxy трафики воридшавандаи хидматрасониро бо истифода аз DNAT ба қуттиҳои хидматрасонии мувофиқ мувозинат мекунад. Бо дарназардошти ин, шумо чӣ гуна сиёсатҳоро барои трафики тавассути NodePorts воридшаванда татбиқ мекунед? Барои он ки ин сиёсатҳо пеш аз коркарди трафик аз ҷониби DNAT (ки харитасозии мизбон: порт ва хидмати мувофиқ) татбиқ карда шаванд, Calico танзимотро барои сиёсати глобалии шабака бо номи "preDNAT: ҳақиқӣ" таъмин мекунад.

Вақте ки pre-DNAT фаъол карда мешавад, ин сиёсатҳо дар (4) дар диаграмма - дар ҷадвали танзими занҷири PREROUTING - танҳо пеш аз DNAT амалӣ карда мешаванд. Тартиби муқаррарии сиёсатҳо (тартиб) дар ин ҷо риоя карда намешавад, зеро татбиқи ин сиёсатҳо дар роҳи коркарди трафик хеле пештар сурат мегирад. Бо вуҷуди ин, сиёсати preDNAT тартиби (тартибот) дархостро байни худ эҳтиром мекунад.

Ҳангоми таҳияи сиёсатҳо бо pre-DNAT, муҳим аст, ки трафикеро, ки шумо коркард кардан мехоҳед, дар хотир доред ва бигзоред, ки аксарияти онҳо рад карда шаванд. Трафике, ки дар сиёсати пеш аз DNAT ҳамчун "иҷозат" қайд карда шудааст, дигар аз ҷониби сиёсати мизбон тафтиш карда намешавад, дар ҳоле ки трафике, ки сиёсати пеш аз DNAT-ро ноком мекунад, тавассути занҷирҳои боқимонда идома хоҳад ёфт.
Calico дохил кардани опсияи applyOnForward-ро ҳангоми истифодаи preDNAT ҳатмӣ кардааст, зеро тибқи таъриф, макони трафик ҳанӯз интихоб нашудааст. Трафик метавонад ба раванди ҳост равона карда шавад, ё он метавонад ба pod ё дигар гиреҳ равона карда шавад.

Сиёсати назоратнашаванда (5)

Шабакаҳо ва барномаҳо метавонанд дар рафтор фарқиятҳои калон дошта бошанд. Дар баъзе ҳолатҳои шадид, барномаҳо метавонанд бисёр пайвастҳои кӯтоҳмуддат эҷод кунанд. Ин метавонад боиси тамом шудани хотираи conntrack (як ҷузъи асосии стеки шабакаи Linux) гардад. Одатан, барои иҷро кардани ин намуди барномаҳо дар Linux, шумо бояд пайвасткуниро дастӣ танзим кунед ё ғайрифаъол кунед ё қоидаҳои iptables -ро барои гузаштан аз пайвастшавӣ нависед. Сиёсати назоратнашаванда дар Calico як варианти соддатар ва самараноктар аст, агар шумо хоҳед, ки пайвастҳоро ҳарчи зудтар коркард кунед. Масалан, агар шумо массивро истифода баред memcache ё ҳамчун чораи иловагии муҳофизат аз DDOS.

Инро хонед баъди блогтарҷумаи мо) барои маълумоти бештар, аз ҷумла санҷишҳои иҷроиш бо истифода аз сиёсати назоратнашаванда.

Вақте ки шумо варианти "doNotTrack: true" -ро дар Calico globalNetworkPolicy насб мекунед, он ба сиёсати **напайваст** мубаддал мешавад ва дар лӯлаи коркарди бастаҳои Linux хеле барвақт истифода мешавад. Ба диаграммаи боло нигоҳ карда, пеш аз оғози пайгирии пайвастшавӣ (conntrack) дар занҷирҳои PREROUTING ва OUTPUT дар ҷадвали хом сиёсатҳои назоратнашуда татбиқ карда мешаванд. Ҳангоме ки ба баста аз рӯи сиёсат иҷозат дода мешавад, ки пайгирӣ накунад, он барои хомӯш кардани пайгирии пайвастшавӣ барои ин баста қайд карда мешавад. Ин чунин маъно дорад:

  • Сиёсати назоратнашуда дар як баста татбиқ карда мешавад. Мафҳуми пайвастшавӣ (ё ҷараён) вуҷуд надорад. Набудани алоқаҳо якчанд оқибатҳои муҳим дорад:
  • Агар шумо хоҳед, ки ҳам трафики дархост ва ҳам ҷавобро иҷозат диҳед, ба шумо барои трафики даромад ва содирот қоида лозим аст (зеро Calico одатан барои қайд кардани трафики ҷавобӣ ҳамчун иҷозатшуда conntrack-ро истифода мебарад).
  • Сиёсати назоратнашаванда барои сарбории кории Kubernetes (подҳо) кор намекунад, зеро дар ин ҳолат роҳи пайгирии пайвасти содиротӣ аз подк вуҷуд надорад.
  • NAT бо бастаҳои назоратнашуда дуруст кор намекунад (зеро ядро ​​харитасозии NAT-ро дар conntrack нигоҳ медорад).
  • Ҳангоми гузаштан аз қоидаи "ҳама иҷозат додан" дар сиёсати беназир, ҳама бастаҳо ҳамчун пайгирӣнашуда қайд карда мешаванд. Ин қариб ҳамеша он чизест, ки шумо мехоҳед нест, аз ин рӯ муҳим аст, ки дар бораи он ки кадом пакетҳо аз ҷониби сиёсатҳои назоратнашаванда иҷозат дода мешаванд, хеле интихоб кунед (ва имкон медиҳад, ки аксари трафик аз сиёсатҳои муқаррарии пайгирӣ гузаранд).
  • Сиёсати назоратнашаванда дар ибтидои лӯлаи коркарди бастаҳо татбиқ карда мешавад. Ҳангоми таҳияи сиёсати Calico фаҳмидани ин хеле муҳим аст. Шумо метавонед сиёсати подшоиро бо фармоиш: 1 ва сиёсати назоратнашаванда бо фармоиш: 1000 дошта бошед. Фарқ надорад. Сиёсати назоратнашуда пеш аз сиёсат барои подк истифода мешавад. Сиёсати назоратнашаванда танҳо байни худ тартиби иҷроро эҳтиром мекунад.

Азбаски яке аз ҳадафҳои сиёсати doNotTrack татбиқи сиёсат дар лӯлаи коркарди бастаҳои Linux мебошад, Calico ҳатмӣ мекунад, ки варианти applyOnForward ҳангоми истифодаи doNotTrack муайян карда шавад. Бо истинод ба диаграммаи коркарди бастаҳо, қайд кунед, ки пеш аз қабули ҳама гуна қарор оид ба масир сиёсати untracked(5) истифода мешавад. Трафик метавонад ба раванди ҳост равона карда шавад, ё он метавонад ба pod ё дигар гиреҳ равона карда шавад.

Натиҷаҳо

Мо вариантҳои гуногуни сиёсатро (Нуктаи ниҳоӣ, ApplyOnForward, preDNAT ва Untracked) дар Calico дида баромадем ва чӣ гуна онҳо дар роҳи коркарди бастаҳо истифода мешаванд. Фаҳмидани он ки чӣ тавр онҳо кор мекунанд, ба шумо барои таҳияи сиёсатҳои муассир ва бехатар кӯмак мекунад. Бо Calico, шумо метавонед сиёсати шабакаи глобалиро истифода баред, ки ба нишона (як гурӯҳи гиреҳҳо ва подкҳо) дахл дорад ва сиёсатҳоро бо имконоти гуногун татбиқ кунед. Ин ба мутахассисони тарҳрезии амният ва шабака имкон медиҳад, ки якбора бо истифода аз забони ягонаи сиёсат бо сиёсати Calico “ҳама чизро” (намудҳои ниҳоӣ) ба таври қулай муҳофизат кунанд.

Эътироф: Ман мехоҳам ташаккур гӯям Шон Крамптон и Alexa Pollitta барои баррасии онҳо ва маълумоти арзишманд.

Манбаъ: will.com

Илова Эзоҳ