Ịghọta nhọrọ amụma netwọkụ na Calico

Ịghọta nhọrọ amụma netwọkụ na Calico

Ihe mgbakwunye netwọkụ Calico na-enye ọtụtụ usoro iwu netwọkụ nwere syntax ejikọtara ọnụ iji chebe ndị ọbịa ngwaike, igwe mebere na pọd. Enwere ike tinye ụkpụrụ ndị a n'ọrụ n'ime oghere aha ma ọ bụ bụrụ amụma netwọk zuru ụwa ọnụ nke metụtara njedebe nnabata (iji chebe ngwa na-agba ọsọ ozugbo na onye ọbịa - onye ọbịa nwere ike ịbụ ihe nkesa ma ọ bụ igwe mebere) ma ọ bụ njedebe ọrụ (iji chekwaa ngwa na-agba n'ime akpa ma ọ bụ igwe mebere akwadoro). Amụma Calico na-enye gị ohere itinye usoro nchekwa n'ebe dị iche iche n'okporo ụzọ ngwugwu site na iji nhọrọ dị ka preDNAT, enweghị nke ọma, na itinyeOnForward. Ịghọta ka nhọrọ ndị a si arụ ọrụ nwere ike inye aka melite nchekwa na arụmọrụ nke sistemụ gị n'ozuzu ya. Edemede a na-akọwa ihe kachasị mkpa nke nhọrọ amụma Calico ndị a (preDNAT, unracked na applyOnForward) etinyere na njedebe njedebe, na-emesi ike na ihe na-eme na ụzọ nhazi ngwugwu (iptabels chains).

Edemede a na-eche na ị nwere nghọta bụ isi nke amụma netwọkụ Kubernetes na Calico si arụ ọrụ. Ọ bụrụ na ọ bụghị, anyị na-akwado ịnwale ya nkuzi amụma netwọkụ bụ isi и nkuzi nchedo nnabata iji Calico tupu ị gụọ akụkọ a. Anyị na-atụkwa anya ka ị nweta nghọta bụ isi nke ọrụ ahụ iptables na linux.

calico amụma netwọk ụwa na-enye gị ohere itinye usoro iwu ịnweta site na akara (na otu ndị ọbịa na ibu ọrụ/pods). Nke a bara ezigbo uru ma ọ bụrụ na ị na-eji usoro dị iche iche ọnụ - igwe mebere, sistemụ na ngwaike, ma ọ bụ akụrụngwa kubernetes. Na mgbakwunye, ị nwere ike ichekwa ụyọkọ (ọnụ) gị site na iji usoro nkwupụta ma tinye atumatu netwọkụ na okporo ụzọ na-abata (dịka ọmụmaatụ, site na NodePorts ma ọ bụ ọrụ IP Mpụga).

N'ọkwa dị mkpa, mgbe Calico jikọtara pọd na netwọkụ (lee eserese dị n'okpuru), ọ na-ejikọ ya na onye ọbịa site na iji interface Ethernet mebere (veth). Okporo ụzọ nke pọd zitere na-abịakwute onye ọbịa site na interface mebere nke a ma na-ahazi ya n'otu ụzọ ahụ dị ka a ga-asị na ọ sitere na interface netwọk anụ ahụ. Na ndabara, Calico kpọrọ aha ihu ndị a caliXXX. Ebe ọ bụ na okporo ụzọ na-abịa site na mebere interface, ọ na-aga site iptables dị ka a ga-asị na pọd bụ otu hop pụọ. Ya mere, mgbe okporo ụzọ na-abata/site na pọd, a na-ebuga ya n'echiche onye ọbịa.

Na ọnụ ụzọ Kubernetes na-agba Calico, ị nwere ike maapụ interface mebere (veth) ka ọ rụọ ọrụ dị ka ndị a. N'ihe atụ dị n'okpuru, ị nwere ike ịhụ na veth#10 (calic1cbf1ca0f8) jikọtara ya na cnx-manager-* na calico-monitoring namespace.

[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
...

Ịghọta nhọrọ amụma netwọkụ na Calico

Nyere na Calico na-emepụta veth interface maka ọrụ ọ bụla, kedu ka o si eme iwu? Iji mee nke a, Calico na-emepụta nko na agbụ dị iche iche nke ụzọ nhazi ngwugwu site na iji iptables.

Eserese dị n'okpuru na-egosi ụdọ aka na nhazi ngwugwu na iptables (ma ọ bụ netfilter subsystem). Mgbe ngwugwu rutere site na netwọkụ netwọkụ, ọ na-ebu ụzọ gafee n'agbụ PREROUTING. A na-eme mkpebi ntụgharị, dabere na nke a, ngwugwu ahụ na-agafe ma ọ bụ INPUT (nke a na-eduzi na usoro nnabata) ma ọ bụ FORWARD (na-eduzi ya na pọd ma ọ bụ ọnụ ụzọ ọzọ na netwọkụ). Site na usoro mpaghara, ngwugwu ahụ na-aga site na OUTPUT wee POSTROUTING yinye tupu ebutu ya eriri.

Rịba ama na pọd bụkwa ihe dị na mpụga (jikọrọ na veth) n'ihe gbasara nhazi iptables. Ka anyị chịkọta:

  • Okporo ụzọ ebugharị (nat, chụpụrụ ma ọ bụ gaa na/site na pọd) na-agafe n'agbụ PREROUTING - FORWARD - POSTROUTING chains.
  • Okporo ụzọ gaa na usoro nnabata mpaghara na-agafe n'usoro PREROUTING - INPUT.
  • Okporo ụzọ sitere na usoro nnabata mpaghara na-aga n'usoro OUTPUT - POSTROUTING.

Ịghọta nhọrọ amụma netwọkụ na Calico

Calico na-enye nhọrọ amụma na-enye gị ohere itinye iwu n'ofe agbụ niile. N'iburu nke ahụ n'uche, ka anyị lelee nhọrọ nhazi amụma dị iche iche dị na Calico. Nọmba ndị dị na ndepụta nhọrọ dị n'okpuru kwekọrọ na ọnụọgụ ndị dị na eserese dị n'elu.

  1. Amụma njedebe njedebe ọrụ (pod).
  2. Amụma njedebe nke ndị ọbịa
  3. ApplyOnForward nhọrọ
  4. Amụma PreDNAT
  5. Amụma emebeghị

Ka anyị bido site na ilele etu esi etinye amụma na njedebe njedebe ọrụ (Kubernetes pods ma ọ bụ OpenStack VMs), wee lelee nhọrọ amụma maka njedebe njedebe.

Ebe njedebe ọrụ

Iwu njedebe njedebe ọrụ (1)

Nke a bụ nhọrọ iji chebe kubernetes pods gị. Calico na-akwado ịrụ ọrụ na Kubernetes NetworkPolicy, mana ọ na-enyekwa amụma ndị ọzọ - Calico NetworkPolicy na GlobalNetworkPolicy. Calico na-emepụta agbụ maka pọd ọ bụla (ibu ọrụ) yana nko na ụdọ INPUT na Mpụpụ maka ọrụ na-arụ ọrụ na tebụl nzacha nke yinye FORWARD.

Ebe njedebe

Amụma ngwụcha ngwụcha nke ndị ọbịa (2)

Na mgbakwunye na CNI (container network interface), atumatu Calico na-enye ikike ichekwa onye ọbịa n'onwe ya. Na Calico, ị nwere ike ịmepụta njedebe njedebe site n'ịkọpụta nchikota nke interface nnabata na, ọ bụrụ na ọ dị mkpa, nọmba ọdụ ụgbọ mmiri. A na-enweta mmanye iwu maka ụlọ ọrụ a site na iji tebụl nzacha n'agbụ INPUT na Mpụpụ. Dị ka ị na-ahụ site na eserese, (2) ha na-emetụta usoro mpaghara na ọnụ/onye ọbịa. Nke ahụ bụ, ọ bụrụ na ịmepụta iwu nke metụtara njedebe njedebe nke onye ọbịa, ọ gaghị emetụta okporo ụzọ na-aga / site na pods gị. Mana ọ na-enye otu interface / syntax maka igbochi okporo ụzọ maka ndị ọbịa gị na pọd site na iji atumatu Calico. Nke a na-eme ka usoro njikwa atumatu dị mfe maka netwọkụ dị iche iche. Ịhazi atumatu njedebe njedebe iji kwalite nchekwa ụyọkọ bụ ihe ọzọ dị mkpa eji eme ihe.

ApplyOnForward Policy (3)

Nhọrọ ApplyOnForward dị na amụma netwọkụ ụwa Calico iji kwe ka etinyere iwu na okporo ụzọ niile na-agafe ebe njedebe ndị ọbịa, gụnyere okporo ụzọ nke onye ọbịa ga-ebuga. Nke a gụnyere okporo ụzọ ezigara na pọd mpaghara ma ọ bụ ebe ọ bụla ọzọ na netwọk. Calico chọrọ ka enyere ntọala a maka amụma iji PreDNAT ma emechie ya, lee ngalaba ndị a. Na mgbakwunye, enwere ike iji ApplyOnForward nyochaa okporo ụzọ ndị ọbịa n'ọnọdụ ebe ejiri rawụta mebere ma ọ bụ NAT ngwanrọ.

Rịba ama na ọ bụrụ na ịchọrọ itinye otu iwu netwọkụ ahụ na usoro nnabata na pọd, mgbe ahụ ịkwesighi iji nhọrọ ApplyOnForward. Ihe niile ị ga - eme bụ ịmepụta akara maka ebe nnabata achọrọ na njedebe ọrụ (pod). Calico maara nke ọma iji manye amụma dabere na akara, n'agbanyeghị ụdị njedebe (hostendpoint ma ọ bụ ọrụ ọrụ).

Amụma PreDNAT (4)

Na Kubernetes, enwere ike ikpughe ọdụ ụgbọ mmiri ndị ọrụ na mpụga site na iji nhọrọ NodePorts ma ọ bụ, nhọrọ (mgbe ị na-eji Calico), site na ịkpọsa ha site na iji Cluster IPs ma ọ bụ nhọrọ IP Mpụga. Kube-proxy na-edozi okporo ụzọ na-abata jikọtara na ọrụ na pọd nke ọrụ kwekọrọ na iji DNAT. Nyere nke a, kedu ka ị ga-esi manye iwu maka okporo ụzọ na-esi na NodePorts na-abịa? Iji hụ na etinyere iwu ndị a tupu DNAT hazie okporo ụzọ (nke bụ maapụ n'etiti onye ọbịa: ọdụ ụgbọ mmiri na ọrụ kwekọrọ), Calico na-enye paramita maka GlobalNetworkPolicy akpọrọ "preDNAT: eziokwu".

Mgbe etinyere tupu DNAT, a na-emejuputa atumatu ndị a na (4) na eserese - na tebụl mangle nke yinye PREROUTING - ozugbo tupu DNAT. A naghị agbaso usoro iwu a na-emebu ebe a, ebe ọ bụ na ntinye nke atumatu ndị a na-eme na mbụ na ụzọ nhazi okporo ụzọ. Agbanyeghị, amụma preDNAT na-asọpụrụ usoro nke ngwa n'etiti onwe ha.

Mgbe ị na-eke atumatu na tupu-DNAT, ọ dị mkpa ịkpachara anya maka okporo ụzọ ịchọrọ ịhazi ma kwe ka jụ ọtụtụ. Amụma hostendpoint agaghị enyocha okporo ụzọ akara dị ka 'ekwe' na amụma tupu-DNAT, ebe okporo ụzọ na-adaba na amụma tupu DNAT ga-aga n'ihu site na agbụ ndị fọdụrụ.
Calico emeela ka ọ bụrụ iwu na ọ ga-eme ka applyOnForward nhọrọ mgbe ị na-eji preDNAT, ebe ọ bụ na nkọwapụta ahọpụtabeghị ebe okporo ụzọ ahụ. Enwere ike iduzi okporo ụzọ gaa na usoro nnabata, ma ọ bụ enwere ike ibuga ya na pọd ma ọ bụ ọnụ ụzọ ọzọ.

Amụma anaghị agbaso (5)

Netwọk na ngwa nwere ike inwe nnukwu ọdịiche na omume. N'ọnọdụ ụfọdụ dị oke njọ, ngwa nwere ike ịmepụta ọtụtụ njikọ dị mkpụmkpụ. Nke a nwere ike ime ka conntrack (ihe bụ isi akụrụngwa nke netwọk netwọk Linux) kwụsị na ebe nchekwa. Dị ka omenala, iji mee ụdị ngwa ndị a na Linux, ị ga-eji aka hazie ma ọ bụ gbanyụọ conntrack, ma ọ bụ dee iwu iptables ka ị gafere conntrack. Amụma a na-emebeghị na Calico bụ nhọrọ dị mfe ma dị irè karị ma ọ bụrụ na ịchọrọ ịhazi njikọ ngwa ngwa o kwere omume. Dịka ọmụmaatụ, ọ bụrụ na ị na-eji oke memcache ma ọ bụ dị ka ihe mgbakwunye nchebe megide DDOS.

Gụọ ihe a blog post (ma ọ bụ ntụgharị asụsụ anyị) maka ozi ndị ọzọ, gụnyere ule arụmọrụ site na iji amụma anaghị agbaso.

Mgbe ịtọrọ nhọrọ "doNotTrack: ezi" na Calico globalNetworkPolicy, ọ na-aghọ amụma ** enweghị usoro** ma etinyere ya n'isi mmalite na pipeline nhazi ngwugwu Linux. N'ileghachi anya na eserese dị n'elu, a na-etinye ụkpụrụ a na-edeghị ede na ụdọ PREROUTING na OUTPUT na tebụl raw tupu amalitere njikọ njikọ (conntrack). Mgbe atumatu emechiri emechi anabatara ngwugwu, akara ya iji gbanyụọ nsochi njikọ maka ngwugwu ahụ. Ọ pụtara:

  • A na-etinye ụkpụrụ a na-emebeghị anya n'otu ngwugwu. Enweghị echiche nke njikọ (ma ọ bụ eruba). Enweghị njikọ nwere ọtụtụ nsonaazụ dị mkpa:
  • Ọ bụrụ na ịchọrọ ịhapụ ma arịrịọ na nzaghachi nzaghachi, ịchọrọ iwu maka ma mbata na ọpụpụ (ebe ọ bụ na Calico na-ejikarị conntrack akara okporo ụzọ nzaghachi dị ka ekwenyere).
  • Amụma a na-edeghị ede anaghị arụ ọrụ maka ọrụ Kubernetes (pods), n'ihi na n'ọnọdụ a ọ dịghị ụzọ isi soro njikọ na-apụ apụ site na pod.
  • NAT anaghị arụ ọrụ nke ọma na ngwugwu ndị a na-edeghị ede (ebe ọ bụ na kernel na-echekwa maapụ NAT na conntrack).
  • Mgbe ị na-agafe iwu "kwe ka ihe niile" dị na usoro a na-emebeghị, a ga-akara ngwugwu niile dị ka emebeghị ya. Nke a fọrọ nke nta ka ọ bụrụ mgbe niile ọ bụghị ihe ịchọrọ, yabụ ọ dị mkpa ka ị họrọ nke ukwuu gbasara ngwugwu ndị atumatu a na-enyochaghị (ma kwe ka ọtụtụ okporo ụzọ na-aga site na usoro a na-enyocha nke ọma).
  • A na-etinye usoro iwu anaghị agbaso na mmalite nke pipeline nhazi ngwugwu. Nke a dị ezigbo mkpa ịghọta mgbe ị na-emepụta ụkpụrụ Calico. Ị nwere ike ịnwe amụma pọd nwere usoro: 1 yana amụma enweghị usoro nwere usoro: 1000. Ọ gaghị adị mkpa. A ga-etinye usoro a na-emebeghị anya n'ihu amụma maka pọd ahụ. Amụma ndị a na-esoghị n'usoro na-asọpụrụ usoro ogbugbu naanị n'etiti onwe ha.

N'ihi na otu n'ime ebumnuche nke doNotTrack bụ ịmanye amụma ahụ n'isi mmalite na pipeline nhazi ngwugwu Linux, Calico na-eme ka ọ bụrụ iwu na-akọwapụta nhọrọ applyOnForward mgbe ị na-eji doNotTrack. N'ịtụ aka na eserese nhazi ngwugwu, rịba ama na a na-etinye usoro a na-emebeghị anya (5) tupu mkpebi ntụgharị ọ bụla. Enwere ike iduzi okporo ụzọ gaa na usoro nnabata, ma ọ bụ enwere ike ibuga ya na pọd ma ọ bụ ọnụ ụzọ ọzọ.

Nsonaazụ

Anyị lere anya nhọrọ iwu dị iche iche (Ọbịa njedebe, ApplyOnForward, preDNAT, na Untracked) na Calico na otu esi etinye ha n'ọrụ n'okporo ụzọ nhazi ngwugwu. Ịghọta ka ha si arụ ọrụ na-enyere aka n'ịmepụta atumatu dị irè ma dị nchebe. Na Calico ị nwere ike iji amụma netwọkụ zuru ụwa ọnụ nke na-emetụta akara (otu ọnụ na pọd) wee tinye atumatu nwere oke dị iche iche. Nke a na-enye ohere nchekwa na ndị ọkachamara imewe netwọkụ iji chekwaa “ihe niile” (ụdị njedebe) ozugbo iji otu asụsụ amụma nwere amụma Calico.

Nkwenye: Ọ ga-amasị m ikele Sean Crampton и Alexa Pollitta maka nyocha ha na ozi bara uru.

isi: www.habr.com

Tinye a comment