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
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
calico
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
...
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.
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.
- Amụma njedebe njedebe ọrụ (pod).
- Amụma njedebe nke ndị ọbịa
- ApplyOnForward nhọrọ
- Amụma PreDNAT
- 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
Gụọ ihe a
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
isi: www.habr.com