Calico għan-netwerking f'Kubernetes: introduzzjoni u ftit esperjenza
L-iskop tal-artikolu huwa li jintroduċi lill-qarrej għall-baŜi tan-netwerking u l-ġestjoni tal-politiki tan-netwerk f'Kubernetes, kif ukoll il-plugin Calico ta 'parti terza li jestendi l-kapaċitajiet standard. Tul it-triq, il-faċilità tal-konfigurazzjoni u xi karatteristiċi se jintwerew bl-użu ta 'eżempji reali mill-esperjenza operattiva tagħna.
Introduzzjoni ta' malajr għall-apparat tan-netwerking Kubernetes
Fil-kuntest ta’ dan l-artikolu, huwa importanti li wieħed jinnota li K8s innifsu mhuwiex responsabbli għall-konnettività tan-netwerk bejn il-kontenituri u n-nodi: għal dan, diversi Plugins tas-CNI (Kontenitur Netwerking Interface). Aktar dwar dan il-kunċett aħna qaluli wkoll.
Pereżempju, l-aktar komuni minn dawn il-plugins huwa Flannel — jipprovdi konnettività sħiħa tan-netwerk bejn in-nodi tal-clusters kollha billi jgħolli l-pontijiet fuq kull nodu, u jassenjalu subnet. Madankollu, aċċessibbiltà kompluta u mhux regolata mhux dejjem tkun ta’ benefiċċju. Biex tipprovdi xi tip ta 'iżolament minimu fil-cluster, huwa meħtieġ li jintervjeni fil-konfigurazzjoni tal-firewall. Fil-każ ġenerali, titqiegħed taħt il-kontroll tal-istess CNI, u huwa għalhekk li kwalunkwe interventi ta 'partijiet terzi f'iptables jistgħu jiġu interpretati ħażin jew injorati għal kollox.
U "barra mill-kaxxa" għall-organizzazzjoni tal-ġestjoni tal-politika tan-netwerk fi cluster Kubernetes hija pprovduta NetworkPolicy API. Din ir-riżorsa, imqassma fuq spazji tal-isem magħżula, jista' jkun fiha regoli biex jiddifferenzjaw l-aċċess minn applikazzjoni għal oħra. Jippermettilek ukoll tikkonfigura l-aċċessibbiltà bejn pods, ambjenti (ispazji tal-isem) jew blokki ta’ indirizzi IP speċifiċi:
Dan mhuwiex l-aktar eżempju primittiv ta dokumentazzjoni uffiċjali jista' darba għal dejjem jiskoraġġixxi x-xewqa li wieħed jifhem il-loġika ta' kif jaħdmu l-politiki tan-netwerk. Madankollu, xorta se nippruvaw nifhmu l-prinċipji bażiċi u l-metodi tal-ipproċessar tal-flussi tat-traffiku bl-użu ta’ politiki tan-netwerk...
Huwa loġiku li hemm 2 tipi ta 'traffiku: id-dħul fil-pod (Dħul) u l-ħruġ minnu (Egress).
Fil-fatt, il-politika hija maqsuma f'dawn iż-żewġ kategoriji bbażati fuq id-direzzjoni tal-moviment.
L-attribut meħtieġ li jmiss huwa selettur; dak li għalih tapplika r-regola. Dan jista’ jkun pod (jew grupp ta’ imżiewed) jew ambjent (jiġifieri namespace). Dettall importanti: iż-żewġ tipi ta' dawn l-oġġetti għandu jkun fihom tikketta (tikketta fit-terminoloġija Kubernetes) - dawn huma dawk li jaħdmu magħhom il-politiċi.
Minbarra għadd finit ta 'seletturi magħquda b'xi tip ta' tikketta, huwa possibbli li tikteb regoli bħal "Ħalli / iċħad kollox / kulħadd" f'varjazzjonijiet differenti. Għal dan il-għan, jintużaw kostruzzjonijiet tal-forma:
Nirritornaw għall-għażla ta 'plugin CNI għal cluster, ta' min jinnota li mhux kull plugin tan-netwerk jappoġġja NetworkPolicy. Pereżempju, il-Flannel diġà msemmi ma jafx kif tikkonfigura l-politiki tan-netwerk, liema huwa qal direttament fir-repożitorju uffiċjali. Hemm tissemma wkoll alternattiva - proġett Open Source Calico, li tespandi b'mod sinifikanti s-sett standard ta' Kubernetes APIs f'termini ta' politiki tan-netwerk.
Insiru nafu lil Calico: teorija
Il-plugin Calico jista 'jintuża fl-integrazzjoni ma' Flannel (sottoproġett Canal) jew b'mod indipendenti, li jkopri kemm il-konnettività tan-netwerk kif ukoll il-kapaċitajiet ta' ġestjoni tad-disponibbiltà.
X'opportunitajiet tipprovdi l-użu tas-soluzzjoni "b'kaxxa" K8s u s-sett API minn Calico?
Hawn x'inhu mibni fin-NetwerkPolicy:
il-politiċi huma limitati mill-ambjent;
politiki huma applikati għall-imżiewed immarkati b'tikketti;
regoli jistgħu jiġu applikati għall-imżiewed, ambjenti jew subnets;
ir-regoli jista' jkun fihom protokolli, speċifikazzjonijiet tal-port imsemmija jew simboliċi.
Hawn kif Calico jestendi dawn il-funzjonijiet:
politiki jistgħu jiġu applikati għal kwalunkwe oġġett: pod, kontenitur, magna virtwali jew interface;
ir-regoli jista' jkun fihom azzjoni speċifika (projbizzjoni, permess, qtugħ);
il-mira jew is-sors tar-regoli jista 'jkun port, firxa ta' portijiet, protokolli, attributi HTTP jew ICMP, IP jew subnet (4 jew 6 ġenerazzjoni), kwalunkwe seletturi (nodi, hosts, ambjenti);
Barra minn hekk, tista' tirregola l-mogħdija tat-traffiku billi tuża s-settings tad-DNAT u l-politiki tat-trażmissjoni tat-traffiku.
L-ewwel impenji fuq GitHub fir-repożitorju Calico jmorru lura għal Lulju 2016, u sena wara l-proġett ħa pożizzjoni ewlenija fl-organizzazzjoni tal-konnettività tan-netwerk Kubernetes - dan jidher, pereżempju, mir-riżultati tal-istħarriġ, immexxi minn The New Stack:
Ħafna soluzzjonijiet kbar ġestiti b'K8s, bħal Amazon EKS, Azure AKS, Google GKE u oħrajn bdew jirrakkomandawha għall-użu.
Fir-rigward tal-prestazzjoni, kollox huwa kbir hawn. Fl-ittestjar tal-prodott tagħhom, it-tim ta 'żvilupp Calico wera prestazzjoni astronomika, li jħaddem aktar minn 50000 kontenitur fuq 500 nodu fiżiku b'rata ta' ħolqien ta '20 kontenitur kull sekonda. L-ebda problemi ma ġew identifikati bl-iskala. Riżultati bħal dawn tħabbru diġà mat-tħabbira tal-ewwel verżjoni. Studji indipendenti li jiffokaw fuq il-produzzjoni u l-konsum tar-riżorsi jikkonfermaw ukoll il-prestazzjoni ta 'Calico hija kważi tajba daqs dik ta' Flannel. Per eżempju:
Il-proġett qed jiżviluppa malajr ħafna, jappoġġa xogħol f'soluzzjonijiet popolari ġestiti K8s, OpenShift, OpenStack, huwa possibbli li tuża Calico meta tuża cluster bl-użu kops, hemm referenzi għall-kostruzzjoni ta 'netwerks Service Mesh (hawn hu eżempju użata flimkien ma’ Istio).
Prattika ma Calico
Fil-każ ġenerali tal-użu ta 'vanilla Kubernetes, l-installazzjoni tas-CNI tirriżulta mill-użu tal-fajl calico.yaml, jitniżżel mill-websajt uffiċjali, billi tuża kubectl apply -f.
Bħala regola, il-verżjoni attwali tal-plugin hija kompatibbli mal-aħħar 2-3 verżjonijiet ta 'Kubernetes: it-tħaddim f'verżjonijiet eqdem mhuwiex ittestjat u mhux garantit. Skont l-iżviluppaturi, Calico jaħdem fuq qlub Linux 'il fuq minn 3.10 li jaħdem CentOS 7, Ubuntu 16 jew Debian 8, fuq iptables jew IPVS.
Iżolament fl-ambjent
Għal fehim ġenerali, ejja nħarsu lejn każ sempliċi biex nifhmu kif il-politiki tan-netwerk fin-notazzjoni Calico huma differenti minn dawk standard u kif l-approċċ biex jinħolqu regoli jissimplifika l-leġibbiltà u l-flessibilità tal-konfigurazzjoni tagħhom:
Hemm 2 applikazzjonijiet tal-web skjerati fil-cluster: f'Node.js u PHP, li waħda minnhom tuża Redis. Biex timblokka l-aċċess għal Redis minn PHP, filwaqt li żżomm il-konnettività ma 'Node.js, applika biss il-politika li ġejja:
Essenzjalment ippermettejna traffiku deħlin lejn il-port ta 'Redis minn Node.js. U b'mod ċar ma pprojbixxewx xi ħaġa oħra. Hekk kif tidher NetworkPolicy, is-seletturi kollha msemmija fiha jibdew ikunu iżolati, sakemm ma jkunx speċifikat mod ieħor. Madankollu, ir-regoli tal-iżolament ma japplikawx għal oġġetti oħra mhux koperti mis-selettur.
L-eżempju juża apiVersion Kubernetes barra mill-kaxxa, iżda xejn ma jżommek milli tużah riżorsa bl-istess isem mill-kunsinna Calico. Is-sintassi hemm hija aktar dettaljata, għalhekk ser ikollok bżonn tikteb mill-ġdid ir-regola għall-każ ta 'hawn fuq fil-forma li ġejja:
Il-kostruzzjonijiet imsemmija hawn fuq biex jippermettu jew jiċħdu t-traffiku kollu permezz tal-API NetworkPolicy regolari fihom kostruzzjonijiet b'parentesi li huma diffiċli biex jinftiehmu u jiftakru. Fil-każ ta 'Calico, biex tibdel il-loġika ta' regola tal-firewall għall-oppost, ibdel biss action: Allow fuq action: Deny.
Iżolament mill-ambjent
Issa immaġina sitwazzjoni fejn applikazzjoni tiġġenera metriċi tan-negozju għall-ġbir fi Prometheus u analiżi ulterjuri bl-użu ta’ Grafana. It-tlugħ jista' jkun fih dejta sensittiva, li għal darb'oħra tista' tara pubblikament b'mod awtomatiku. Ejja naħbu din id-dejta minn għajnejhom:
Prometheus, bħala regola, jitqiegħed f'ambjent ta 'servizz separat - fl-eżempju se jkun namespace bħal dan:
Qasam metadata.labels dan irriżulta li ma kienx inċident. Kif imsemmi hawn fuq, namespaceSelector (kif ukoll podSelector) topera b'tikketti. Għalhekk, biex tippermetti li jittieħdu metriċi mill-imżiewed kollha fuq port speċifiku, ikollok iżżid xi tip ta' tikketta (jew tieħu minn dawk eżistenti), u mbagħad tapplika konfigurazzjoni bħal:
B'mod ġenerali, billi żżid dawn it-tipi ta 'politiki għal bżonnijiet speċifiċi, tista' tipproteġi kontra interferenza malizzjuża jew aċċidentali fl-operat tal-applikazzjonijiet fil-cluster.
L-aħjar prattika, skont il-ħallieqa ta' Calico, hija l-approċċ "Bblokka kollox u iftaħ b'mod espliċitu dak li għandek bżonn", iddokumentat f' dokumentazzjoni uffiċjali (oħrajn isegwu approċċ simili - b'mod partikolari, fi artiklu diġà msemmi).
Bl-użu ta 'Oġġetti Calico Addizzjonali
Ħa nfakkarkom li permezz tas-sett estiż ta' Calico APIs tista' tirregola d-disponibbiltà tan-nodi, mhux limitata għall-imżiewed. Fl-eżempju li ġej bl-użu GlobalNetworkPolicy l-abbiltà li tgħaddi talbiet ICMP fil-cluster hija magħluqa (per eżempju, pings minn pod għal node, bejn pods, jew minn node għal pod IP):
Fil-każ ta 'hawn fuq, xorta huwa possibbli li n-nodi tal-cluster "jilħqu" lil xulxin permezz tal-ICMP. U din il-kwistjoni tissolva permezz ta 'mezzi GlobalNetworkPolicy, applikat għal entità HostEndpoint:
Fl-aħħarnett, se nagħti eżempju reali ħafna tal-użu tal-funzjonijiet Calico għall-każ ta 'interazzjoni qrib cluster, meta sett standard ta' politiki ma jkunx biżżejjed. Il-klijenti jużaw mina VPN biex jaċċessaw l-applikazzjoni tal-web, u dan l-aċċess huwa kkontrollat sewwa u limitat għal lista speċifika ta’ servizzi permessi għall-użu:
Il-klijenti jikkonnettjaw mal-VPN permezz tal-port standard UDP 1194 u, meta konnessi, jirċievu rotot għas-subnets tal-clusters tal-imżiewed u s-servizzi. Subnets sħaħ huma mbuttati sabiex ma jitilfux is-servizzi waqt il-bidu mill-ġdid u l-bidliet fl-indirizz.
Il-port fil-konfigurazzjoni huwa standard, li jimponi xi sfumaturi fuq il-proċess tal-konfigurazzjoni tal-applikazzjoni u t-trasferiment tagħha lill-cluster Kubernetes. Pereżempju, fl-istess AWS LoadBalancer għal UDP deher litteralment fl-aħħar tas-sena li għaddiet f'lista limitata ta 'reġjuni, u NodePort ma jistax jintuża minħabba t-twassil tiegħu fuq in-nodi kollha tal-clusters u huwa impossibbli li tiskala n-numru ta' istanzi tas-server għal skopijiet ta' tolleranza għal ħtija. Barra minn hekk, ser ikollok tibdel il-firxa default tal-portijiet...
Bħala riżultat ta 'tfittxija permezz ta' soluzzjonijiet possibbli, intgħażel dan li ġej:
Il-miżwed b'VPN huma skedati għal kull nodu fi hostNetwork, jiġifieri, għall-IP attwali.
Is-servizz huwa stazzjonat barra permezz ClusterIP. Port huwa fiżikament installat fuq in-nodu, li huwa aċċessibbli minn barra b'riżervi minuri (preżenza kondizzjonali ta 'indirizz IP reali).
Id-determinazzjoni tan-nodu li fuqu tela 'l-pows huwa lil hinn mill-ambitu tal-istorja tagħna. Ngħid biss li tista '"dwiefer" sewwa s-servizz f'node jew tikteb servizz sidecar żgħir li se jimmonitorja l-indirizz IP attwali tas-servizz VPN u jeditja r-rekords DNS reġistrati mal-klijenti - min għandu immaġinazzjoni biżżejjed.
Mill-perspettiva tar-rotta, nistgħu nidentifikaw b'mod uniku klijent VPN mill-indirizz IP tiegħu maħruġ mis-server VPN. Hawn taħt hawn eżempju primittiv ta’ restrizzjoni tal-aċċess ta’ tali klijent għas-servizzi, illustrat fuq ir-Redis imsemmija hawn fuq:
Hawnhekk, il-konnessjoni mal-port 6379 hija strettament ipprojbita, iżda fl-istess ħin it-tħaddim tas-servizz DNS huwa ppreservat, li l-funzjonament tiegħu ta 'spiss ibati meta jfassal ir-regoli. Minħabba li, kif issemma qabel, meta selettur jidher, il-politika ta' ċaħda default tiġi applikata għalih sakemm ma jkunx speċifikat mod ieħor.
Riżultati ta '
Għalhekk, billi tuża l-API avvanzata ta 'Calico, tista' tikkonfigura b'mod flessibbli u tbiddel b'mod dinamiku r-rotot ġewwa u madwar il-cluster. B'mod ġenerali, l-użu tiegħu jista 'jidher qisu sparrows b'kanun, u l-implimentazzjoni ta' netwerk L3 b'mini BGP u IP-IP tidher mostruża f'installazzjoni Kubernetes sempliċi fuq netwerk ċatt... Madankollu, inkella l-għodda tidher pjuttost vijabbli u utli .
L-iżolament ta 'cluster biex jissodisfa r-rekwiżiti tas-sigurtà jista' mhux dejjem ikun fattibbli, u dan huwa fejn Calico (jew soluzzjoni simili) tiġi salvata. L-eżempji mogħtija f'dan l-artikolu (b'modifiki minuri) jintużaw f'diversi installazzjonijiet tal-klijenti tagħna fl-AWS.