Calico менен тармак саясатынын параметрлерин түшүнүү

Calico менен тармак саясатынын параметрлерин түшүнүү

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

Бул макалада сиз Kubernetes жана Calico тармагынын саясаттары кандайча иштээри жөнүндө негизги түшүнүккө ээ экениңизди болжолдойт. Эгерде жок болсо, биз аны сынап көрүүнү сунуштайбыз негизги тармак саясаты окуу куралы и хост коргоо окуу куралы Бул макаланы окуганга чейин Calico колдонуу. Биз ошондой эле сизден иштин негизги түшүнүгүнө ээ болушуңузду күтөбүз iptables Linuxта.

Calico глобалдык тармак саясаты энбелгилер боюнча кирүү эрежелеринин топтомун колдонууга мүмкүндүк берет (хосттордун топторуна жана жумуш жүктөмдөрүнө/поддорго). Эгер сиз гетерогендик системаларды чогуу колдонсоңуз, бул абдан пайдалуу - виртуалдык машиналар, түз жабдыктагы система же kubernetes инфраструктурасы. Кошумчалай кетсек, сиз өзүңүздүн кластериңизди (түйүндөрдү) декларативдик саясаттардын топтомун колдонуп коргой аласыз жана келген трафикке тармак саясатын колдоно аласыз (мисалы, NodePorts же Тышкы IP кызматы аркылуу).

Фундаменталдык деңгээлде, Calico поддонду тармакка туташтырганда (төмөндөгү диаграмманы караңыз), аны виртуалдык Ethernet интерфейси (veth) аркылуу хостко туташтырат. Под аркылуу жөнөтүлгөн трафик бул виртуалдык интерфейстен хостко келет жана физикалык тармак интерфейсинен келгендей эле иштетилет. Демейки боюнча, Calico бул интерфейстерди caliXXX деп атайт. Трафик виртуалдык интерфейс аркылуу келгендиктен, ал iptables аркылуу поддон бир хоп алыстыкта ​​жүргөндөй өтөт. Ошондуктан, трафик поддонго келгенде, ал хосттун көз карашынан багытталат.

Calico иштеткен Kubernetes түйүнүндө сиз виртуалдык интерфейсти (veth) жумуш жүктөмүнө төмөндөгүдөй салыштыра аласыз. Төмөндөгү мисалда veth#10 (calic1cbf1ca0f8) calico-мониторинг ат мейкиндигинде 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 ар бир жумуш жүгү үчүн veth интерфейсин түзөрүн эске алсак, ал саясаттарды кантип ишке ашырат? Бул үчүн, 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 VMs) кандайча колдонуларын карап баштайлы, андан кийин хосттун акыркы чекиттери үчүн саясат опцияларын карап көрөлү.

Жумуш жүктөмүнүн акыркы чекиттери

Жумуш жүктөмүнүн акыркы чекити саясаты (1)

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

Хосттун акыркы чекиттери

Хосттун акыркы чекити саясаты (2)

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

ApplyOnForward Policy (3)

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

Эгер сиз бир эле тармак саясатын хост процесстерине да, подкасттарга да колдонушуңуз керек болсо, анда ApplyOnForward опциясын колдонуунун кереги жок экенин эске алыңыз. Сизге керек болгон нерсе - талап кылынган хостенд-пункт жана жумуш жүктөмүнүн акыркы чекити (под) үчүн энбелги түзүү. Calico акыркы чекиттин түрүнө (хост-пункт же жумуш жүгү) карабастан, энбелгилердин негизинде саясатты ишке ашыруу үчүн жетиштүү акылдуу.

PreDNAT саясаты (4)

Kubernetes'те тейлөө объектисинин порттору сырттан NodePorts опциясын колдонуу менен же кошумча түрдө (Calico колдонуп жатканда) Cluster IPs же Тышкы IP параметрлери аркылуу аларды жарнамалоо аркылуу ачыкка чыгарылышы мүмкүн. Kube-прокси DNAT аркылуу тиешелүү кызматтын подколоруна кызматка байланышкан келген трафикти тең салмактайт. Муну эске алып, NodePorts аркылуу келген трафик үчүн саясатты кантип ишке ашырасыз? Бул саясаттар трафик DNAT тарабынан иштетилгенге чейин колдонулушун камсыз кылуу үчүн (бул хост: порт менен тиешелүү кызматтын ортосундагы карта), Calico глобалдыкNetworkPolicy үчүн "preDNAT: true" деп аталган параметрди камсыз кылат.

Pre-DNAT иштетилгенде, бул саясаттар (4) диаграммада - PREROUTING чынжырынын мангле таблицасында - дароо DNAT алдында ишке ашырылат. Бул жерде саясаттын кадимки тартиби сакталбайт, анткени бул саясаттарды колдонуу трафикти иштетүү жолунда алда канча мурда пайда болот. Бирок, preDNAT саясаты өз ара колдонуу тартибин сыйлайт.

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

Көз салынбаган саясат (5)

Тармактар ​​жана колдонмолор жүрүм-турумда чоң айырмачылыктарга ээ болушу мүмкүн. Кээ бир экстремалдык учурларда, тиркемелер көптөгөн кыска мөөнөттүү байланыштарды жаратышы мүмкүн. Бул conntrack (Linux тармактык стекинин негизги компоненти) эстутумунун түгөнүп калышына алып келиши мүмкүн. Адаттагыдай эле, Linux'та тиркемелердин бул түрлөрүн иштетүү үчүн сиз кол менен конфигурациялашыңыз же конфигурациялоону өчүрүшүңүз керек, же conntrackти айланып өтүү үчүн iptables эрежелерин жазышыңыз керек. Эгер сиз туташууларды мүмкүн болушунча тезирээк иштеткиңиз келсе, Calico'догу көзөмөлдөнбөгөн саясат жөнөкөй жана натыйжалуураак вариант. Мисалы, сиз массалык түрдө колдонсоңуз memcache же коргоонун кошумча чарасы катары юп.

Муну оку блог (же биздин котормобуз) көбүрөөк маалымат, анын ичинде көзөмөлдөнбөгөн саясатты колдонуу менен аткаруу тесттери үчүн.

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

  • Көзөмөлсүз саясат ар бир пакеттин негизинде колдонулат. Байланыш (же агым) деген түшүнүк жок. Байланыштардын жоктугу бир нече маанилүү кесепеттерге алып келет:
  • Эгерде сиз суроо-талап менен жооп трафигине уруксат бергиңиз келсе, сизге кирүүчү жана чыгуучу үчүн эреже керек (анткени Calico адатта жооп трафигине уруксат берилген деп белгилөө үчүн conntrack колдонот).
  • Көзөмөл кылынбаган саясат Kubernetes жумуш жүгү (поддору) үчүн иштебейт, анткени бул учурда поддондон чыгуучу туташууга көз салуу мүмкүнчүлүгү жок.
  • NAT көзөмөлдөнбөгөн пакеттер менен туура иштебейт (анткени ядро ​​NAT картасын conntrackде сактайт).
  • Көзөмөл кылынбаган саясатта "баарын уруксат берүү" эрежеси аркылуу өткөндө, бардык пакеттер көзөмөлдөнбөгөн деп белгиленет. Бул дээрлик дайыма сиз каалагандай боло бербейт, андыктан көзөмөлдөнбөгөн саясаттар уруксат берген пакеттерге өтө кылдаттык менен мамиле кылуу маанилүү (жана трафиктин көпчүлүгүнө кадимки көзөмөлдөнүүчү саясаттар аркылуу өтүүгө мүмкүндүк берет).
  • Көзөмөлгө алынбаган саясат пакеттерди иштетүү түтүгүнүн эң башында колдонулат. Бул Calico саясатын түзүүдө түшүнүү үчүн абдан маанилүү болуп саналат. Сизде order:1 менен подполдук саясат жана order:1000 менен көзөмөлдөнбөгөн саясат болушу мүмкүн. Бул маанилүү эмес. Көзөмөлгө алынбаган саясат поддон үчүн саясаттын алдында колдонулат. Көзөмөлсүз саясаттар аткаруу тартибин өз ара гана сыйлашат.

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

натыйжалары

Биз Calicoдогу саясаттын ар кандай варианттарын (Host endpoint, ApplyOnForward, preDNAT жана Untracked) карап чыктык жана алар пакетти иштетүү жолунда кандайча колдонулат. Алардын кантип иштээрин түшүнүү натыйжалуу жана коопсуз саясатты иштеп чыгууга жардам берет. Calico менен сиз энбелгиге (түйүндөрдүн жана поддондордун тобуна) тиешелүү глобалдык тармак саясатын колдоно аласыз жана ар кандай параметрлер менен саясаттарды колдоно аласыз. Бул коопсуздук жана тармактык дизайн адистерине Calico саясаттары менен бирдиктүү саясат тилин колдонуу менен бир эле учурда "баарын" (акыркы чекиттердин түрлөрү) ыңгайлуу коргоого мүмкүндүк берет.

Ыраазычылык: Мен ыраазычылык билдиргим келет Шон Крамптон и Alexa Pollitta алардын кароосу жана баалуу маалыматы үчүн.

Source: www.habr.com

Комментарий кошуу