Repare twou nan gwoup Kubernetes la. Rapò ak transkripsyon soti nan DevOpsConf

Pavel Selivanov, achitèk solisyon Southbridge ak pwofesè Slurm, te bay yon prezantasyon nan DevOpsConf 2019. Diskou sa a se yon pati nan youn nan sijè yo nan kou a pwofondè sou Kubernetes "Slurm Mega".

Slurm Basic: Yon Entwodiksyon nan Kubernetes pran plas nan Moskou sou Novanm 18-20.
Slurm Mega: kap anba kapo Kubernetes — Moskou, 22-24 novanm.
Slurm sou entènèt: tou de kou Kubernetes toujou disponib.

Anba koupe a se yon transkripsyon rapò a.

Bon aprè midi, kòlèg yo ak moun ki senpatize ak yo. Jodi a mwen pral pale sou sekirite.

Mwen wè ke gen anpil gad sekirite nan sal la jodi a. Mwen eskize w davans si mwen itilize tèm ki soti nan mond sekirite a pa egzakteman jan sa abitye pou ou.

Sa te rive ke anviwon sis mwa de sa mwen te rankontre yon gwoup piblik Kubernetes. Piblik vle di ke gen yon nyèm nimewo espas non; nan espas non sa yo gen itilizatè izole nan espas non yo. Tout itilizatè sa yo fè pati konpayi diferan. Oke, yo te sipoze ke gwoup sa a ta dwe itilize kòm yon CDN. Sa vle di, yo ba ou yon grap, yo ba ou yon itilizatè la, ou ale la nan espas non ou a, deplwaye devan ou.

Konpayi anvan mwen an te eseye vann yon sèvis konsa. Apre sa, mwen te mande pou pike gwoup la pou wè si solisyon sa a te apwopriye oswa ou pa.

Mwen te vin nan gwoup sa a. Mwen te bay dwa limite, espas non limite. Mesye la yo te konprann sa ki te sekirite. Yo li sou kontwòl aksè ki baze sou wòl (RBAC) nan Kubernetes - epi yo trese li pou ke mwen pa t 'kapab lanse gous separeman de deplwaman. Mwen pa sonje pwoblèm mwen t ap eseye rezoud nan lanse yon gous san deplwaman, men mwen reyèlman te vle lanse jis yon gous. Pou bon chans, mwen deside wè ki dwa mwen genyen nan gwoup la, ki sa mwen ka fè, ki sa mwen pa ka fè, ak sa yo te vise moute la. An menm tan an, mwen pral di w sa yo te konfigirasyon mal nan RBAC.

Li te rive ke nan de minit mwen te resevwa yon admin nan gwoup yo, gade nan tout namespaces vwazen yo, te wè gen fwon pwodiksyon yo kouri nan konpayi ki te deja achte sèvis la ak deplwaye. Mwen te kapab apèn anpeche tèt mwen ale nan devan yon moun ak mete kèk sèmante sou paj prensipal la.

Mwen pral di w ak egzanp ki jan mwen te fè sa ak ki jan yo pwoteje tèt ou kont sa a.

Men, anvan, kite m prezante tèt mwen. Non mwen se Pavel Selivanov. Mwen se yon achitèk nan Southbridge. Mwen konprann Kubernetes, DevOps ak tout kalite bagay anpenpan. Mwen menm ak enjenyè Southbridge yo ap konstwi tout bagay sa yo, epi m ap konsilte.

Anplis aktivite prensipal nou yo, nou fèk lanse pwojè yo rele Slurms. Nou ap eseye pote kapasite nou nan travay ak Kubernetes yon ti kras nan mas yo, yo anseye lòt moun yo travay tou ak K8s.

De kisa map pale jodia? Sijè a nan rapò a se evidan - sou sekirite nan gwoup la Kubernetes. Men, mwen vle di touswit ke sijè sa a se gwo anpil - ak Se poutèt sa mwen vle imedyatman klarifye sa mwen pral definitivman pa pale sou. Mwen pa pral pale sou tèm rache ki te deja itilize yon santèn fwa sou entènèt la. Tout kalite RBAC ak sètifika.

Mwen pral pale sou sa ki fè m mal ak kòlèg mwen yo sou sekirite nan yon gwoup Kubernetes. Nou wè pwoblèm sa yo tou de nan mitan founisè ki bay gwoup Kubernetes ak nan mitan kliyan ki vin jwenn nou. E menm nan kliyan ki vin jwenn nou nan lòt konpayi admin konsiltasyon. Sa vle di, echèl trajedi a se aktyèlman gwo anpil.

Gen literalman twa pwen ke mwen pral pale sou jodi a:

  1. Dwa itilizatè vs dwa gous. Dwa itilizatè yo ak dwa gous yo pa menm bagay la.
  2. Kolekte enfòmasyon sou gwoup la. Mwen pral montre ke ou ka kolekte tout enfòmasyon ou bezwen nan yon gwoup san yo pa gen dwa espesyal nan gwoup sa a.
  3. DoS atak sou gwoup la. Si nou pa ka kolekte enfòmasyon, nou pral kapab mete yon gwoup nan nenpòt ka. Mwen pral pale sou atak DoS sou eleman kontwòl gwoup.

Yon lòt bagay jeneral ke mwen pral mansyone se sa mwen teste tout bagay sa yo sou, sou ki mwen ka definitivman di ke li tout travay.

Nou pran kòm yon baz enstalasyon yon gwoup Kubernetes lè l sèvi avèk Kubespray. Si yon moun pa konnen, sa a se aktyèlman yon seri wòl pou Ansible. Nou toujou sèvi ak li nan travay nou. Bon bagay se ke ou ka woule li nenpòt kote - ou ka woule li sou moso fè oswa nan yon nwaj yon kote. Yon metòd enstalasyon travay nan prensip pou tout bagay.

Nan gwoup sa a mwen pral gen Kubernetes v1.14.5. Tout gwoup kib la, ke nou pral konsidere, divize an espas non, chak espas non fè pati yon ekip separe, ak manm ekip sa a gen aksè a chak espas non. Yo pa ka ale nan espas non diferan, sèlman nan pwòp yo. Men, gen yon sèten kont admin ki gen dwa pou tout gwoup la.

Repare twou nan gwoup Kubernetes la. Rapò ak transkripsyon soti nan DevOpsConf

Mwen te pwomèt ke premye bagay nou pral fè se jwenn dwa admin nan gwoup la. Nou bezwen yon gous ki prepare espesyalman ki pral kraze gwoup Kubernetes la. Tout sa nou bezwen fè se aplike li nan gwoup Kubernetes la.

kubectl apply -f pod.yaml

Gos sa a pral rive nan youn nan mèt gwoup Kubernetes la. Apre sa, gwoup la pral san pwoblèm mwen tap retounen nan nou yon dosye ki rele admin.conf. Nan Kib, fichye sa a estoke tout sètifika administratè yo, epi an menm tan an configured API gwoup la. Sa a se fasil pou jwenn aksè admin nan, mwen panse, 98% nan grap Kubernetes.

Mwen repete, se yon sèl devlopè nan gwoup ou a ki te fè gous sa a ki gen aksè a deplwaye pwopozisyon li yo nan yon ti espas non, li se tout sere pa RBAC. Li pa te gen okenn dwa. Men, poutan sètifika a te retounen.

Epi, koulye a sou yon gous espesyalman prepare. Nou kouri sou nenpòt imaj. Ann pran debian:jessie kòm egzanp.

Nou gen bagay sa a:

tolerations:
-   effect: NoSchedule 
    operator: Exists 
nodeSelector: 
    node-role.kubernetes.io/master: "" 

Ki sa ki tolerans? Mèt nan yon gwoup Kubernetes yo anjeneral make ak yon bagay ki rele taint. Ak sans nan "enfeksyon" sa a se ke li di ke gous pa ka asiyen nan nœuds mèt. Men, pesonn pa deranje pou endike nan nenpòt gous ke li toleran "enfeksyon an". Seksyon Tolerasyon an jis di ke si kèk ne gen NoSchedule, Lè sa a, ne nou an toleran yon enfeksyon konsa - epi pa gen okenn pwoblèm.

Pli lwen, nou di ke anba nou an se pa sèlman toleran, men tou, vle espesyalman vize mèt la. Paske mèt yo gen bagay ki pi bon gou nou bezwen - tout sètifika yo. Se poutèt sa, nou di nodeSelector - epi nou gen yon etikèt estanda sou mèt, ki pèmèt ou chwazi nan tout nœuds yo nan gwoup la egzakteman nœuds sa yo ki se mèt.

Avèk de seksyon sa yo li pral definitivman vin jwenn mèt la. Epi li pral gen dwa viv la.

Men, jis vin jwenn mèt la pa ase pou nou. Sa p ap ban nou anyen. Se konsa, pwochen nou gen de bagay sa yo:

hostNetwork: true 
hostPID: true 

Nou presize ke gous nou an, ke nou lanse, ap viv nan espas non nwayo a, nan espas non rezo a, ak nan espas non PID la. Yon fwa ke gous la te lanse sou mèt la, li pral kapab wè tout reyèl, koòdone yo ap viv nan ne sa a, koute tout trafik ak wè PID a nan tout pwosesis.

Lè sa a, se yon kesyon de ti bagay. Pran etcd epi li sa ou vle.

Bagay ki pi enteresan an se karakteristik Kubernetes sa a, ki prezan la pa default.

volumeMounts:
- mountPath: /host 
  name: host 
volumes:
- hostPath: 
    path: / 
    type: Directory 
  name: host 

Ak sans li se ke nou ka di nan gous la ke nou lanse, menm san yo pa dwa nan gwoup sa a, ke nou vle kreye yon volim nan kalite hostPath. Sa vle di pran chemen an soti nan lame a sou ki nou pral lanse - ak pran li kòm volim. Lè sa a, nou rele li non: lame. Nou monte tout hostPath sa a andedan gous la. Nan egzanp sa a, nan anyè /host la.

Mwen pral repete l ankò. Nou te di gous la vin jwenn mèt la, jwenn hostNetwork ak hostPID la - epi monte tout rasin mèt la andedan gous sa a.

Ou konprann ke nan Debian nou gen bash kouri, ak bash sa a kouri anba rasin. Sa vle di, nou jis resevwa rasin sou mèt la, san yo pa gen okenn dwa nan gwoup Kubernetes la.

Lè sa a, tout travay la se ale nan sub anyè /host /etc/kubernetes/pki, si mwen pa fè erè, ranmase tout sètifika mèt gwoup la la epi, kòmsadwa, vin administratè gwoup la.

Si ou gade nan fason sa a, sa yo se kèk nan dwa ki pi danjere nan gous - kèlkeswa dwa itilizatè a genyen:
Repare twou nan gwoup Kubernetes la. Rapò ak transkripsyon soti nan DevOpsConf

Si mwen gen dwa pou kouri yon gous nan kèk espas non gwoup la, Lè sa a, gous sa a gen dwa sa yo pa default. Mwen ka kouri gous privilejye, ak sa yo se jeneralman tout dwa, pratikman rasin sou ne la.

Pi renmen mwen an se itilizatè rasin. Ak Kubernetes gen opsyon Run As Non-Root sa a. Sa a se yon kalite pwoteksyon kont yon pirate. èske w konnen kisa "viris Moldavi" la ye? Si toudenkou ou se yon pirate epi vini nan gwoup Kubernetes mwen an, Lè sa a, nou, administratè pòv yo, mande: "Tanpri, endike nan gous ou ak ki ou pral pirate gwoup mwen an, kouri kòm ki pa rasin. Sinon, li pral rive ke ou kouri pwosesis la nan gous ou anba rasin, epi li pral trè fasil pou ou Hack m '. Tanpri pwoteje tèt ou kont tèt ou."

Volim chemen lame se, nan opinyon mwen, fason ki pi rapid jwenn rezilta a vle soti nan yon gwoup Kubernetes.

Men, kisa pou w fè ak tout bagay sa yo?

Panse a ki ta dwe vini nan nenpòt administratè nòmal ki rankontre Kubernetes se: "Wi, mwen te di ou, Kubernetes pa travay. Gen twou ladan l. Epi tout Kib la se yon vye bagay. An reyalite, gen yon bagay tankou dokiman, epi si ou gade la, gen yon seksyon Règ Sekirite Pod.

Sa a se yon objè yaml - nou ka kreye li nan gwoup Kubernetes - ki kontwole aspè sekirite espesyalman nan deskripsyon gous yo. Sa vle di, an reyalite, li kontwole dwa pou itilize nenpòt hostNetwork, hostPID, sèten kalite volim ki nan gous yo nan demaraj. Avèk èd nan Règ Sekirite Pod, tout bagay sa yo ka dekri.

Bagay ki pi enteresan sou Règ Sekirite Pod la se ke nan gwoup Kubernetes la, tout enstalatè PSP yo pa jis pa dekri nan okenn fason, yo tou senpleman enfim pa default. Règ Sekirite Pod yo aktive lè l sèvi avèk plugin admisyon an.

Oke, ann deplwaye Politik Sekirite Pod nan gwoup la, ann di ke nou gen kèk gous sèvis nan espas non an, kote admin sèlman gen aksè. Ann di, nan tout lòt ka, gous yo gen dwa limite. Paske gen plis chans devlopè yo pa bezwen kouri gous privilejye nan gwoup ou a.

Ak tout bagay sanble ap byen ak nou. Ak gwoup Kubernetes nou an pa ka rache nan de minit.

Gen yon pwoblèm. Gen plis chans, si ou gen yon gwoup Kubernetes, Lè sa a, siveyans enstale sou gwoup ou a. Mwen ta menm ale byen lwen pou m predi ke si gwoup ou a gen siveyans, li pral rele Prometheus.

Sa mwen pral di w ap valab pou operatè Prometheus la ak Prometheus ki te delivre nan fòm pi li yo. Kesyon an se ke si mwen pa ka jwenn yon admin nan gwoup la byen vit, Lè sa a, sa vle di ke mwen bezwen gade plis. Apre sa, mwen ka fè rechèch ak èd nan siveyans ou.

Pwobableman tout moun li menm atik yo sou Habré, epi siveyans la sitiye nan espas non siveyans la. Tablo Helm yo rele apeprè menm bagay la pou tout moun. Mwen devine ke si ou fè Helm enstale stable/prometheus, ou pral fini ak apeprè menm non yo. Ak gen plis chans mwen pa pral menm gen devine non an dns nan gwoup ou a. Paske li estanda.

Repare twou nan gwoup Kubernetes la. Rapò ak transkripsyon soti nan DevOpsConf

Next nou gen yon sèten dev ns, nan ki ou ka kouri yon gous sèten. Lè sa a, soti nan gous sa a li trè fasil fè yon bagay tankou sa a:

$ curl http://prometheus-kube-state-metrics.monitoring 

prometheus-kube-state-metrics se youn nan ekspòtatè Prometheus ki kolekte mezi nan API Kubernetes li menm. Gen anpil done la, kisa k ap kouri nan gwoup ou a, ki sa li ye, ki pwoblèm ou genyen ak li.

Kòm yon egzanp senp:

kube_pod_container_info{namespace=“kube-system”,pod=”kube-apiserver-k8s- 1″,container=”kube-apiserver”,image=

"gcr.io/google-containers/kube-apiserver:v1.14.5"

,image_id=»docker-pullable://gcr.io/google-containers/kube- apiserver@sha256:e29561119a52adad9edc72bfe0e7fcab308501313b09bf99df4a96 38ee634989″,container_id=»docker://7cbe7b1fea33f811fdd8f7e0e079191110268f2 853397d7daf08e72c22d3cf8b»} 1

Lè w fè yon demann boukl senp nan yon gous ki pa gen privilèj, ou ka jwenn enfòmasyon sa yo. Si ou pa konnen ki vèsyon Kubernetes w ap kouri, li pral fasil di w.

Ak bagay ki pi enteresan an se ke nan adisyon a aksè nan kube-state-metrics, ou ka menm fasil aksè Prometheus tèt li dirèkteman. Ou ka kolekte mezi soti nan la. Ou ka menm konstwi mesures de la. Menm teyorikman, ou ka bati tankou yon rechèch nan yon gwoup nan Prometheus, ki pral tou senpleman fèmen li. Epi siveyans ou a ap sispann travay nan gwoup la tout ansanm.

Ak isit la kesyon an leve si nenpòt siveyans ekstèn kontwole siveyans ou. Mwen jis jwenn opòtinite pou opere nan yon gwoup Kubernetes san okenn konsekans pou tèt mwen. Ou p ap menm konnen ke mwen ap opere la, paske pa gen okenn siveyans ankò.

Menm jan ak PSP a, li santi ke pwoblèm nan se ke tout teknoloji sa yo anpenpan - Kubernetes, Prometheus - yo jis pa travay epi yo plen twou. Pa vrèman.

Gen yon bagay konsa - Règleman rezo.

Si ou se yon admin nòmal, Lè sa a, gen plis chans ou konnen sou Règleman Rezo ke sa a se jis yon lòt yaml, ki gen deja yon anpil nan yo nan gwoup la. Ak kèk Règleman Rezo yo definitivman pa nesesè. E menm si ou li sa ki Règleman Rezo a, ke li se yon firewall yaml nan Kubernetes, li pèmèt ou limite dwa aksè ant namespaces, ant gous, Lè sa a, ou sètènman deside ke firewall la nan fòma yaml nan Kubernetes baze sou pwochen abstraksyon yo. ... Non, non. Sa a se definitivman pa nesesè.

Menm si ou pa t 'di espesyalis sekirite ou yo ke lè l sèvi avèk Kubernetes ou ou ka bati yon pare-feu trè fasil ak senp, ak yon sèl trè granulaire nan sa. Si yo poko konnen sa epi yo pa deranje w: "Bon, ban mwen, ban mwen..." Lè sa a, nan nenpòt ka, ou bezwen Règleman Rezo pou bloke aksè nan kèk kote sèvis ki ka rale nan gwoup ou a. san okenn otorizasyon.

Kòm nan egzanp mwen te bay la, ou ka rale mezi eta kube soti nan nenpòt espas non nan gwoup Kubernetes la san yo pa gen okenn dwa pou fè sa. Règleman rezo yo te fèmen aksè soti nan tout lòt espas non nan espas non siveyans la e se li: pa gen aksè, pa gen pwoblèm. Nan tout tablo ki egziste yo, tou de estanda Prometheus la ak Prometheus ki nan operatè a, gen tou senpleman yon opsyon nan valè Helm yo tou senpleman pèmèt politik rezo pou yo. Ou jis bezwen vire l 'sou epi yo pral travay.

Gen reyèlman yon pwoblèm isit la. Kòm yon admin nòmal bab, ou gen plis chans deside ke politik rezo yo pa nesesè. Epi apre w fin li tout kalite atik sou resous tankou Habr, ou deside ke flanèl, espesyalman ak mòd lame-gateway, se pi bon bagay ou ka chwazi.

Ki sa ki fè?

Ou ka eseye redeplwaye solisyon rezo ou genyen nan gwoup Kubernetes ou a, eseye ranplase li ak yon bagay ki pi fonksyonèl. Pou menm Calico a, pou egzanp. Men, mwen vle di touswit ke travay la nan chanje solisyon rezo a nan yon gwoup k ap travay Kubernetes se byen ki pa trivial. Mwen te rezoud li de fwa (tou de fwa, sepandan, teyorikman), men nou menm te montre ki jan fè li nan Slurms. Pou elèv nou yo, nou te montre kijan pou chanje solisyon rezo a nan yon gwoup Kubernetes. Nan prensip, ou ka eseye asire w ke pa gen okenn D 'nan grap pwodiksyon an. Men, pwobableman ou pa pral reyisi.

Ak pwoblèm nan aktyèlman rezoud trè tou senpleman. Gen sètifika nan gwoup la, epi ou konnen ke sètifika ou yo pral ekspire nan yon ane. Oke, epi anjeneral yon solisyon nòmal ak sètifika nan gwoup la - poukisa nou enkyete, nou pral ogmante yon nouvo gwoup tou pre, kite ansyen an ale pouri, ak redeplwaye tout bagay. Vrè, lè li ale pouri, nou pral oblije chita pou yon jou, men isit la nan yon gwoup nouvo.

Lè ou ogmante yon nouvo gwoup, an menm tan mete Calico olye pou yo flanèl.

Kisa pou w fè si sètifika ou yo bay pou yon santèn ane epi ou pa pral re-deplwaye gwoup la? Gen yon bagay tankou Kube-RBAC-Proxy. Sa a se yon devlopman trè fre, li pèmèt ou entegre tèt li kòm yon veso sidecar nan nenpòt gous nan gwoup Kubernetes la. Epi li aktyèlman ajoute otorizasyon nan gous sa a atravè RBAC nan Kubernetes tèt li.

Gen yon pwoblèm. Anvan sa, solisyon Kube-RBAC-Proxy sa a te konstwi nan Prometheus operatè a. Men, Lè sa a, li te ale. Koulye a, vèsyon modèn konte sou lefèt ke ou gen yon politik rezo epi fèmen li lè l sèvi avèk yo. Se poutèt sa nou pral oblije reekri tablo a yon ti kras. An reyalite, si ou ale nan depo sa a, gen egzanp sou fason yo sèvi ak sa a kòm sidecars, ak tablo yo pral gen yo dwe reekri yon minimòm.

Gen yon lòt ti pwoblèm ankò. Prometheus se pa youn nan sèlman bay soti mezi li yo nan nenpòt moun. Tout konpozan gwoup Kubernetes nou yo kapab tou retounen pwòp mezi pa yo.

Men, jan mwen te deja di, si ou pa ka jwenn aksè nan gwoup la ak kolekte enfòmasyon, Lè sa a, ou ka omwen fè kèk mal.

Se konsa, mwen pral byen vit montre de fason ki jan yon gwoup Kubernetes ka depafini.

Ou pral ri lè mwen di ou sa a, sa yo se de ka lavi reyèl.

Metòd yon sèl. Appauvrissement resous.

Ann lanse yon lòt gous espesyal. Li pral gen yon seksyon tankou sa a.

resources: 
    requests: 
        cpu: 4 
        memory: 4Gi 

Kòm ou konnen, demann se kantite CPU ak memwa ki rezève sou lame a pou gous espesifik ak demann. Si nou gen yon lame kat nwayo nan yon gwoup Kubernetes, ak kat gous CPU rive la ak demann, sa vle di ke pa gen okenn gous plis ak demann yo pral kapab vini nan lame sa a.

Si mwen kouri tankou yon gous, Lè sa a, mwen pral kouri lòd la:

$ kubectl scale special-pod --replicas=...

Lè sa a, pa gen lòt moun ki pral kapab deplwaye nan gwoup Kubernetes la. Paske tout nœuds ap kouri soti nan demann. Se konsa, mwen pral sispann gwoup Kubernetes ou a. Si mwen fè sa nan aswè a, mwen ka sispann deplwaman yo pou yon bon bout tan.

Si nou gade ankò nan dokiman Kubernetes la, nou pral wè bagay sa a ki rele Limit Range. Li mete resous pou objè gwoup yo. Ou ka ekri yon objè Limit Range nan yaml, aplike li nan sèten namespaces - ak Lè sa a, nan namespace sa a ou ka di ke ou gen default, maksimòm ak minimòm resous pou gous yo.

Avèk èd nan yon bagay konsa, nou ka limite itilizatè yo nan espas non pwodwi espesifik nan ekip nan kapasite nan endike tout kalite bagay anbarasan sou gous yo. Men, malerezman, menm si ou di itilizatè a ke yo pa ka lanse gous ak demann pou plis pase yon CPU, gen tankou yon lòd echèl bèl bagay, oswa yo ka fè echèl nan tablodbò a.

Lè sa a se kote metòd nimewo de soti. Nou lanse 11 gous. Sa se onz milya dola. Sa a se pa paske mwen te vini ak yon nimewo konsa, men paske mwen te wè li tèt mwen.

Istwa reyèl. Ta nan aswè a mwen te sou pou kite biwo a. Mwen wè yon gwoup devlopè chita nan kwen an, fòlman fè yon bagay ak laptops yo. Mwen ale bò kote mesye yo epi mwen mande: "Kisa ki rive ou?"

Yon ti kras pi bonè, alantou nèf nan aswè a, youn nan devlopè yo te prepare yo ale lakay ou. Apre sa, mwen deside: "Kounye a, mwen pral diminye aplikasyon mwen an nan yon sèl." Mwen peze youn, men entènèt la ralanti yon ti kras. Li peze youn nan ankò, li peze youn nan, li klike sou Antre. Mwen pike nan tout sa mwen te kapab. Lè sa a, entènèt la te vin nan lavi - ak tout bagay te kòmanse echèl desann nan nimewo sa a.

Se vre, istwa sa a pa t fèt sou Kubernetes; nan epòk sa a li te Nomad. Li te fini ak lefèt ke apre yon èdtan nan tantativ nou yo sispann Nomad soti nan tantativ ki pèsistan nan echèl, Nomad reponn ke li pa ta sispann dekale epi li pa ta fè anyen lòt bagay. "Mwen fatige, mwen prale." Epi li boukle.

Natirèlman, mwen te eseye fè menm bagay la sou Kubernetes. Kubernetes pa t kontan ak onz milya gous, li te di: "Mwen pa kapab. Depase gad bouch entèn yo." Men, 1 gous te kapab.

An repons a yon milya dola, Kib la pa t retire nan tèt li. Li reyèlman te kòmanse dekale. Plis pwosesis la te ale, plis tan li te pran pou l kreye nouvo gous. Men, toujou pwosesis la te kontinye. Pwoblèm nan sèlman se ke si mwen ka lanse gous san limit nan espas non mwen an, Lè sa a, menm san demann ak limit mwen ka lanse gous anpil ak kèk travay ke avèk èd nan travay sa yo nœuds yo ap kòmanse ajoute moute nan memwa, nan CPU. Lè mwen lanse anpil gous, enfòmasyon ki soti nan yo ta dwe antre nan depo, se sa ki, elatriye. Ak lè twòp enfòmasyon rive la, depo a kòmanse retounen twò dousman - ak Kubernetes kòmanse vin mat.

Ak yon lòt pwoblèm... Kòm ou konnen, eleman kontwòl Kubernetes yo pa yon sèl bagay santral, men plizyè eleman. An patikilye, gen yon manadjè kontwolè, orè, ak sou sa. Tout mesye sa yo pral kòmanse fè travay ki pa nesesè, estipid an menm tan, ki apre yon sèten tan ap kòmanse pran plis ak plis tan. Manadjè kontwolè a pral kreye nouvo gous. Scheduler pral eseye jwenn yon nouvo ne pou yo. Ou pral gen plis chans kouri soti nan nouvo nœuds nan grap ou byento. Gwoup Kubernetes la pral kòmanse travay pi dousman ak pi dousman.

Men, mwen deside ale menm pi lwen. Kòm ou konnen, nan Kubernetes gen yon bagay sa yo rele yon sèvis. Oke, pa default nan grap ou yo, gen plis chans, sèvis la ap travay lè l sèvi avèk tab IP.

Si ou kouri yon milya gous, pou egzanp, epi sèvi ak yon script pou fòse Kubernetis pou kreye nouvo sèvis:

for i in {1..1111111}; do
    kubectl expose deployment test --port 80  
        --overrides="{"apiVersion": "v1", 
           "metadata": {"name": "nginx$i"}}"; 
done 

Sou tout nœuds nan gwoup la, pi plis ak plis nouvo règ iptables yo pral pwodwi apeprè an menm tan. Anplis, yon milya règ iptables pral pwodwi pou chak sèvis.

Mwen tcheke tout bagay sa a sou plizyè milye, jiska dis. Ak pwoblèm nan se ke deja nan papòt sa a li se byen pwoblèm fè ssh nan ne la. Paske pake, ap pase nan anpil chenn, kòmanse santi yo pa trè byen.

Ak sa a tou, se tout rezoud avèk èd nan Kubernetes. Gen tankou yon objè kota Resous. Mete kantite resous ak objè ki disponib pou espas non an nan gwoup la. Nou ka kreye yon objè yaml nan chak espas non nan gwoup Kubernetes la. Sèvi ak objè sa a, nou ka di ke nou gen yon sèten kantite demann ak limit atribye ba pou espas non sa a, ak Lè sa a, nou ka di ke nan espas non sa a se posib yo kreye 10 sèvis ak 10 gous. Ak yon sèl pwomotè ka omwen toufe tèt li nan aswè yo. Kubernetes pral di l: "Ou pa ka monte gous ou yo nan kantite lajan sa a, paske resous la depase kota a." Sa a, pwoblèm rezoud. Dokimantasyon isit la.

Yon pwen pwoblèm rive nan sans sa a. Ou santi jan li difisil pou kreye yon espas non nan Kubernetes. Pou kreye li, nou bezwen pran anpil bagay an kont.

Kota resous + Limit Range + RBAC
• Kreye yon espas non
• Kreye yon limit limit andedan
• Kreye andedan resourquota
• Kreye yon kont sèvis pou CI
• Kreye rolebinding pou CI ak itilizatè yo
• Opsyonèlman lanse gous sèvis ki nesesè yo

Se poutèt sa, mwen ta renmen pwofite opòtinite sa a pou pataje devlopman mwen yo. Gen yon bagay konsa yo rele SDK operatè a. Sa a se yon fason pou yon gwoup Kubernetes ekri operatè pou li. Ou ka ekri deklarasyon lè l sèvi avèk Ansible.

Okòmansman li te ekri nan Ansible, ak Lè sa a, mwen te wè ke te gen yon operatè SDK ak reekri wòl nan Ansible nan yon operatè. Deklarasyon sa a pèmèt ou kreye yon objè nan gwoup Kubernetes yo rele yon lòd. Anndan yon lòd, li pèmèt ou dekri anviwònman an pou lòd sa a nan yaml. Ak nan anviwònman ekip la, li pèmèt nou dekri ke nou ap allocate anpil resous.

Little yon sèl fè tout pwosesis konplèks sa a pi fasil.

E an konklizyon. Kisa pou fè ak tout bagay sa yo?
Premye. Politik Sekirite Pod la bon. Ak malgre lefèt ke okenn nan enstalatè Kubernetes yo sèvi ak yo nan jounen jodi a, ou toujou bezwen sèvi ak yo nan grap ou yo.

Règleman rezo a se pa sèlman yon lòt karakteristik ki pa nesesè. Sa a se sa ki vrèman nesesè nan yon gwoup.

LimitRange/ResourceQuota - li lè pou itilize li. Nou te kòmanse itilize sa a depi lontan, e pou yon tan long mwen te sèten ke tout moun te itilize li. Li te tounen soti ke sa a se ra.

Anplis de sa mwen te mansyone pandan rapò a, gen karakteristik san papye ki pèmèt ou atake gwoup la. Lage dènyèman analiz vaste sou vilnerabilite Kubernetes.

Gen kèk bagay ki tèlman tris ak fè mal. Pou egzanp, nan sèten kondisyon, cubelets nan yon gwoup Kubernetes ka bay sa ki nan anyè a warlocks a yon itilizatè san otorizasyon.

Isit la Gen enstriksyon sou kòman yo repwodui tout sa mwen te di ou. Gen dosye ki gen egzanp pwodiksyon sou sa ResourceQuota ak Pod Security Policy sanble. Epi ou ka manyen tout bagay sa yo.

Mèsi a tout moun.

Sous: www.habr.com

Add nouvo kòmantè