Rydyn ni'n cau tyllau yng nghlwstwr Kubernetes. Adroddiad a thrawsgrifiad gyda DevOpsConf

Rhoddodd Pavel Selivanov, pensaer datrysiad Southbridge ac athro Slurm, sgwrs yn DevOpsConf 2019. Mae'r sgwrs hon yn rhan o un o bynciau cwrs Kubernetes uwch Slurm Mega.

Slurm Basic: Cyflwyniad i Kubernetes yn digwydd ym Moscow ar 18-20 Tachwedd.
Slurm Mega: sbecian o dan gwfl Kubernetes - Moscow, Tachwedd 22-24.
Slurm Ar-lein: Dau Gwrs Kubernetes ar gael bob amser.

O dan y toriad - trawsgrifiad o'r adroddiad.

Prynhawn da, cydweithwyr a chydymdeimlad. Heddiw byddaf yn siarad am ddiogelwch.

Gwelaf fod llawer o bobl diogelwch yn y neuadd heddiw. Ymddiheuraf i chi ymlaen llaw os byddaf yn defnyddio termau o'r byd diogelwch nid yn union fel yr ydych yn ei wneud fel arfer.

Digwyddodd felly bod un clwstwr Kubernetes cyhoeddus tua chwe mis yn ôl wedi disgyn i'm dwylo i. Cyhoeddus - yn golygu bod yna n-fed nifer o ofodau enw, yn y gofodau enw hyn mae defnyddwyr wedi'u hynysu yn eu gofod enwau. Mae'r holl ddefnyddwyr hyn yn perthyn i gwmnïau gwahanol. Wel, tybiwyd y dylid defnyddio'r clwstwr hwn fel CDN. Hynny yw, maen nhw'n rhoi clwstwr i chi, yn rhoi defnyddiwr yno, rydych chi'n mynd yno yn eich gofod enw, yn defnyddio'ch blaenau.

Ceisiodd fy nghwmni blaenorol werthu gwasanaeth o'r fath. A gofynnwyd i mi brocio'r clwstwr ar y pwnc - a yw datrysiad o'r fath yn addas ai peidio.

Deuthum i'r clwstwr hwn. Cefais hawliau cyfyngedig, gofod enwau cyfyngedig. Yno, roedd y dynion yn deall beth yw diogelwch. Maent yn darllen beth yw Rheolaeth mynediad Seiliedig ar Rôl (RBAC) yn Kubernetes - ac fe wnaethant ei droelli fel na allwn redeg codennau ar wahân i leoliadau. Dydw i ddim yn cofio'r broblem roeddwn i'n ceisio ei datrys trwy redeg pod heb ei ddefnyddio, ond roeddwn i wir eisiau rhedeg pod yn unig. Penderfynais o lwc i weld pa hawliau sydd gen i yn y clwstwr, beth alla i, beth alla i ddim, beth wnaethon nhw ei wneud yno. Ar yr un pryd, byddaf yn dweud wrthych beth y maent wedi'i ffurfweddu'n anghywir yn RBAC.

Digwyddodd felly i mi gael gweinyddwr i'w clwstwr mewn dau funud, edrych ar yr holl ofodau enwau cyfagos, gweld blaen cynhyrchu cwmnïau a oedd eisoes wedi prynu'r gwasanaeth ac wedi'i leoli yno. Prin y gwnes i stopio fy hun rhag dod at rywun yn y blaen a rhoi rhai geiriau rhegi ar y brif dudalen.

Dywedaf wrthych gydag enghreifftiau o sut y gwnes i hynny a sut i amddiffyn yn ei erbyn.

Ond yn gyntaf, gadewch i mi gyflwyno fy hun. Fy enw i yw Pavel Selivanov. Rwy'n bensaer i Southbridge. Rwy'n deall Kubernetes, DevOps a phob math o bethau ffansi. Mae peirianwyr Southbridge a minnau yn adeiladu'r cyfan, ac yr wyf yn ymgynghori.

Yn ogystal â’n prif weithgareddau, rydym wedi lansio prosiectau o’r enw Slurms yn ddiweddar. Rydym yn ceisio dod â'n gallu i weithio gyda Kubernetes i'r llu ychydig, i ddysgu pobl eraill sut i weithio gyda K8s hefyd.

Am beth y byddaf yn siarad heddiw. Mae pwnc yr adroddiad yn amlwg - am ddiogelwch clwstwr Kubernetes. Ond rwyf am ddweud ar unwaith bod y pwnc hwn yn fawr iawn - ac felly rwyf am nodi ar unwaith yr hyn na fyddaf yn bendant yn siarad amdano. Ni siaradaf am dermau hacni sydd eisoes wedi cael eu gorddefnyddio ganwaith ar y Rhyngrwyd. Unrhyw RBAC a thystysgrifau.

Byddaf yn siarad am yr hyn sy'n fy mrifo i a'm cydweithwyr oherwydd diogelwch mewn clwstwr Kubernetes. Rydym yn gweld y problemau hyn gyda darparwyr sy'n darparu clystyrau Kubernetes a chyda chleientiaid sy'n dod atom ni. A hyd yn oed ar gyfer cleientiaid sy'n dod atom gan gwmnïau gweinyddol ymgynghorol eraill. Hynny yw, mae maint y drasiedi yn fawr iawn mewn gwirionedd.

Yn llythrennol tri phwynt y byddaf yn siarad amdanynt heddiw:

  1. Hawliau defnyddwyr yn erbyn hawliau codennau. Nid yw hawliau defnyddwyr a hawliau pod yr un peth.
  2. Casglu gwybodaeth am y clwstwr. Byddaf yn dangos y gallwch gasglu’r holl wybodaeth sydd ei hangen arnoch gan glwstwr heb fod â hawliau arbennig yn y clwstwr hwn.
  3. Ymosodiad DoS ar y clwstwr. Os byddwn yn methu â chasglu gwybodaeth, byddwn yn gallu rhoi'r clwstwr beth bynnag. Siaradaf am ymosodiadau DoS ar elfennau rheoli clwstwr.

Peth cyffredinol arall y byddaf yn sôn amdano yw'r hyn y profais y cyfan arno, y gallaf ddweud yn sicr ei fod i gyd yn gweithio.

Fel sail, rydym yn cymryd gosod clwstwr Kubernetes gan ddefnyddio Kubespray. Os nad yw rhywun yn gwybod, set o rolau ar gyfer Ansible yw hon mewn gwirionedd. Rydyn ni'n ei ddefnyddio trwy'r amser yn y gwaith. Y peth da yw y gallwch rolio yn unrhyw le - a gallwch rolio ar y darnau o haearn, ac yn rhywle yn y cwmwl. Mae un dull gosod yn addas mewn egwyddor ar gyfer popeth.

Yn y clwstwr hwn, bydd gen i Kubernetes v1.14.5. Mae'r clwstwr Ciwb cyfan, y byddwn yn ei ystyried, wedi'i rannu'n ofodau enwau, mae pob gofod enw yn perthyn i dîm ar wahân, mae gan aelodau'r tîm hwn fynediad i bob gofod enw. Ni allant fynd i wahanol ofodau enwau, dim ond i'w rhai eu hunain. Ond mae yna gyfrif gweinyddol penodol sydd â hawliau i'r clwstwr cyfan.

Rydyn ni'n cau tyllau yng nghlwstwr Kubernetes. Adroddiad a thrawsgrifiad gyda DevOpsConf

Addewais mai’r peth cyntaf a fydd gennym yw sicrhau hawliau gweinyddol i’r clwstwr. Mae arnom angen pod wedi'i baratoi'n arbennig a fydd yn torri clwstwr Kubernetes. Y cyfan sydd angen i ni ei wneud yw ei gymhwyso i glwstwr Kubernetes.

kubectl apply -f pod.yaml

Bydd y pod hwn yn dod i un o feistri clwstwr Kubernetes. A bydd y clwstwr yn hapus yn dychwelyd ffeil o'r enw admin.conf ar ôl hynny. Yng Nghiwba, mae'r ffeil hon yn storio'r holl dystysgrifau gweinyddol, ac ar yr un pryd mae'r API clwstwr wedi'i ffurfweddu. Dyma pa mor hawdd yw hi i gael mynediad gweinyddol, rwy'n meddwl, i 98% o glystyrau Kubernetes.

Unwaith eto, gwnaed y pod hwn gan un datblygwr yn eich clwstwr, sydd â mynediad i ddefnyddio eu cynigion mewn un gofod enw bach, mae'r cyfan yn cael ei glampio gan RBAC. Nid oedd ganddo unrhyw hawliau. Ond er hynny dychwelodd y dystysgrif.

Ac yn awr am aelwyd a baratowyd yn arbennig. Rydym yn lansio ar unrhyw ddelwedd. Gadewch i ni gymryd debian:jessie fel enghraifft.

Mae gennym ni rywbeth fel hyn:

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

Beth yw goddefgarwch? Mae meistri mewn clwstwr Kubernetes fel arfer yn cael eu labelu â pheth o'r enw taint. A hanfod y “haint” hwn yw ei fod yn dweud na ellir neilltuo codennau i nodau meistr. Ond nid oes neb yn trafferthu nodi mewn unrhyw god ei fod yn oddefgar o'r “haint”. Mae'r adran Goddefgarwch yn dweud, os yw NoSchedule wedi'i osod ar ryw nod, yna mae ein pod yn oddefgar i haint o'r fath - ac nid oes unrhyw broblemau.

Ymhellach, dywedwn fod ein pod nid yn unig yn oddefgar, ond hefyd eisiau taro'r meistr yn bwrpasol. Oherwydd bod gan y meistri y peth mwyaf blasus sydd ei angen arnom - yr holl dystysgrifau. Felly, rydyn ni'n dweud nodeSelector - ac mae gennym ni label safonol ar y meistri, sy'n eich galluogi i ddewis o holl nodau'r clwstwr yn union y nodau hynny sy'n feistri.

Gyda'r ddwy adran hyn, bydd yn bendant yn dod i'r meistr. A bydd yn cael byw yno.

Ond nid yw dod at y meistr yn ddigon i ni. Ni fydd yn rhoi unrhyw beth i ni. Felly nesaf mae gennym y ddau beth hyn:

hostNetwork: true 
hostPID: true 

Rydym yn nodi y bydd ein pod rydym yn ei redeg yn byw yn y gofod enw cnewyllyn, gofod enw'r rhwydwaith, a gofod enwau PID. Unwaith y bydd pod yn rhedeg ar y meistr, bydd yn gallu gweld holl ryngwynebau real, byw y nod hwnnw, gwrando ar yr holl draffig, a gweld PIDs pob proses.

Yna mater i'r pethau bach yw hi. Cymerwch ac ati a darllenwch beth rydych chi ei eisiau.

Y peth mwyaf diddorol yw'r nodwedd Kubernetes hon, sydd yno yn ddiofyn.

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

A'i hanfod yw y gallwn, yn y pod yr ydym yn ei lansio, hyd yn oed heb hawliau i'r clwstwr hwn, ddweud ein bod am greu cyfrol o'r math hostPath. Felly cymerwch y llwybr o'r gwesteiwr y byddwn yn cychwyn arno - a chymerwch ef fel cyfaint. Ac yna rydyn ni'n ei alw'n enw: gwesteiwr. Rydyn ni'n gosod yr holl hostPath hwn y tu mewn i'r pod. Yn yr enghraifft hon, i'r cyfeiriadur / host.

Unwaith eto byddaf yn ailadrodd. Fe wnaethon ni ddweud wrth y pod i ddod at y meistr, cael hostNetwork a hostPID yno - a gosod gwraidd cyfan y meistr y tu mewn i'r pod hwn.

Rydych chi'n deall bod gennym ni mewn debian rhedeg bash, ac mae'r bash hwn yn gweithio i ni fel gwraidd. Hynny yw, rydym newydd gael gwreiddiau ar y meistr, tra nad oes gennym unrhyw hawliau yng nghlwstwr Kubernetes.

Yna'r dasg gyfan yw mynd i mewn i'r cyfeiriadur / gwesteiwr / etc / kubernetes / pki, os nad wyf yn camgymryd, codwch holl dystysgrifau meistr y clwstwr yno ac, yn unol â hynny, dod yn weinyddwr y clwstwr.

O edrych arnynt fel hyn, dyma rai o'r hawliau mwyaf peryglus mewn codennau, waeth pa hawliau sydd gan y defnyddiwr:
Rydyn ni'n cau tyllau yng nghlwstwr Kubernetes. Adroddiad a thrawsgrifiad gyda DevOpsConf

Os oes gennyf hawliau i redeg pod mewn gofod enwau clwstwr, yna mae gan y pod hwn yr hawliau hyn yn ddiofyn. Gallaf redeg codennau breintiedig, sydd yn gyffredinol yn holl hawliau, yn ymarferol gwreiddio nod.

Fy ffefryn yw defnyddiwr Root. Ac mae gan Kubernetes yr opsiwn Run As Non-Root hwn. Mae hwn yn fath o amddiffyniad yn erbyn haciwr. Ydych chi'n gwybod beth yw "feirws Moldovan"? Os ydych chi'n haciwr yn sydyn ac wedi dod i'm clwstwr Kubernetes, yna rydyn ni, weinyddwyr gwael, yn gofyn: “Nodwch yn eich codennau y byddwch chi'n hacio fy nghlwstwr â nhw, yn rhedeg fel di-wraidd. Fel arall, bydd yn troi allan eich bod yn dechrau ar y broses yn eich pod o dan y gwraidd, a bydd yn hawdd iawn i chi darnia mi. Amddiffyn eich hun, os gwelwch yn dda."

Cyfrol llwybr gwesteiwr - yn fy marn i, y ffordd gyflymaf o gael y canlyniad a ddymunir gan glwstwr Kubernetes.

Ond beth i'w wneud â hyn i gyd?

Meddyliau a ddylai ddod i unrhyw weinyddwr arferol sy'n dod ar draws Kubernetes: “Ie, dywedais wrthych, nid yw Kubernetes yn gweithio. Mae tyllau ynddo. Ac mae'r Ciwb cyfan yn weirglodd.” Mewn gwirionedd, mae y fath beth â dogfennaeth, ac os edrychwch yno, yna mae adran Polisi Diogelwch Podiau.

Mae hwn yn wrthrych mor yaml - gallwn ei greu yng nghlwstwr Kubernetes - sy'n rheoli'r agweddau diogelwch yn y disgrifiad o'r codennau. Hynny yw, mewn gwirionedd, mae'n rheoli'r hawliau i ddefnyddio unrhyw hostNetwork, hostPID, rhai mathau o gyfaint sydd yn y codennau wrth gychwyn. Gyda chymorth Polisi Diogelwch Pod, gellir disgrifio hyn i gyd.

Y peth mwyaf diddorol am y Polisi Diogelwch Pod yw, yng nghlwstwr Kubernetes, nad yw'r holl osodwyr PSP yn cael eu disgrifio mewn unrhyw ffordd yn unig, maent yn cael eu diffodd yn ddiofyn. Mae Polisi Diogelwch Pod wedi'i alluogi gan ddefnyddio'r ategyn derbyn.

Iawn, gadewch i ni ddefnyddio Polisi Diogelwch Podiau i'r clwstwr, gadewch i ni ddweud bod gennym ni rai codennau gwasanaeth yn y gofod enwau, a dim ond gweinyddwyr sydd â mynediad iddynt. Gadewch i ni ddweud, yn y gweddill i gyd, mae gan godau hawliau cyfyngedig. Oherwydd nid oes angen i ddatblygwyr mwyaf tebygol redeg codennau breintiedig ar eich clwstwr.

Ac mae'n ymddangos ein bod ni'n iawn. Ac ni ellir hacio ein clwstwr Kubernetes mewn dau funud.

Mae yna broblem. Yn fwyaf tebygol, os oes gennych glwstwr Kubernetes, yna mae monitro wedi'i osod yn eich clwstwr. Rwyf hyd yn oed yn ymrwymo i ragweld, os yw eich clwstwr yn cael ei fonitro, yna fe'i gelwir yn Prometheus.

Bydd yr hyn yr wyf yn mynd i'w ddweud wrthych yn awr yn ddilys i weithredwr Prometheus ac i Prometheus wedi'i gyflwyno yn ei ffurf bur. Y cwestiwn yw, os na allaf gael gweinyddwr i'r clwstwr mor gyflym, yna mae hyn yn golygu bod angen i mi chwilio mwy. A gallaf chwilio gan ddefnyddio eich monitro.

Yn ôl pob tebyg, mae pawb yn darllen yr un erthyglau ar Habré, ac mae monitro wedi'i leoli yn y monitro gofod enwau. Gelwir siart Helm tua'r un peth i bawb. Fy nyfaliad yw, os ydych chi'n arwain gosod stabl/prometheus, dylech chi gael tua'r un enwau yn y pen draw. A hyd yn oed yn fwyaf tebygol na fydd yn rhaid i mi ddyfalu'r enw DNS yn eich clwstwr. Oherwydd ei fod yn safonol.

Rydyn ni'n cau tyllau yng nghlwstwr Kubernetes. Adroddiad a thrawsgrifiad gyda DevOpsConf

Nesaf, mae gennym rai datblygiadau, lle gallwch chi redeg pod penodol. Ac yna o'r pod hwn mae'n hawdd iawn gwneud fel hyn:

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

Mae prometheus-kube-state-metrics yn un o'r allforwyr prometheus sy'n casglu metrigau o API Kubernetes ei hun. Mae llawer o ddata yno, beth sy'n rhedeg yn eich clwstwr, beth ydyw, pa broblemau sydd gennych ag ef.

Fel enghraifft syml:

kube_pod_container_info{namespace="kube-system", pod="kube-apiserver-k8s-1", cynhwysydd = "kube-apiserver", delwedd=

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

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

Trwy wneud cais cyrl syml o god di-freintiedig, gallwch gael gwybodaeth fel hyn. Os nad ydych chi'n gwybod pa fersiwn o Kubernetes rydych chi'n ei rhedeg, bydd yn dweud wrthych yn hawdd.

A'r peth mwyaf diddorol yw, yn ogystal â'r ffaith eich bod chi'n cyrchu kube-state-metrics, y gallwch chi hefyd gael mynediad uniongyrchol i Prometheus ei hun. Gallwch chi gasglu metrigau oddi yno. Gallwch hyd yn oed adeiladu metrigau oddi yno. Hyd yn oed yn ddamcaniaethol, gallwch chi adeiladu ymholiad o'r fath gan glwstwr yn Prometheus, a fydd yn ei ddiffodd. Ac yn gyffredinol bydd eich monitro yn rhoi'r gorau i weithio o'r clwstwr.

Ac yma mae'r cwestiwn eisoes yn codi a yw unrhyw fonitro allanol yn monitro eich monitro. Cefais gyfle i weithredu mewn clwstwr Kubernetes heb unrhyw ganlyniadau i mi fy hun. Ni fyddwch hyd yn oed yn gwybod fy mod yn gweithio yno, gan nad yw monitro yno mwyach.

Yn union fel gyda'r rhaglen cymorth Bugeiliol, mae'n teimlo mai'r broblem yw nad yw'r holl dechnolegau ffansi hyn - Kubernetes, Prometheus - yn gweithio ac maent yn llawn tyllau. Ddim mewn gwirionedd.

Mae y fath beth - polisi rhwydwaith.

Os ydych chi'n weinyddwr arferol, yna mae'n debyg eich bod chi'n gwybod am Bolisi Rhwydwaith mai yaml arall yw hwn, y mae dofiga ohono eisoes yn y clwstwr. Ac yn bendant nid oes angen Polisïau Rhwydwaith. A hyd yn oed os ydych chi'n darllen beth yw Polisi Rhwydwaith, beth yw wal dân Kubernetes yaml, mae'n caniatáu ichi gyfyngu ar hawliau mynediad rhwng gofodau enwau, rhwng codennau, yna fe wnaethoch chi benderfynu'n bendant bod wal dân yaml yn Kubernetes yn seiliedig ar y tyniadau nesaf ... Na -na. Yn bendant nid yw'n angenrheidiol.

Hyd yn oed os na ddywedwyd wrth eich arbenigwyr diogelwch, gyda chymorth eich Kubernetes, y gallwch chi adeiladu wal dân hawdd a syml iawn, a gronynnog iawn. Os nad ydyn nhw'n gwybod hyn eto ac nad ydyn nhw'n eich tynnu chi: “Wel, rhowch hi, rhowch hi ...” Yna beth bynnag, mae angen Polisi Rhwydwaith arnoch i rwystro mynediad i rai lleoedd gwasanaeth y gallwch chi eu tynnu o'ch clwstwr heb unrhyw awdurdodiad.

Fel yn yr enghraifft a roddais, gallwch dynnu metrigau cyflwr kube o unrhyw ofod enwau yng nghlwstwr Kubernetes heb fod gennych unrhyw hawliau i wneud hynny. Mae polisïau rhwydwaith wedi cau mynediad o bob gofod enw arall i'r gofod enwau monitro ac, fel petai, popeth: dim mynediad, dim problemau. Yn yr holl siartiau sy'n bodoli, y prometheus safonol a'r prometheus sydd yn y gweithredwr, yn syml, mae opsiwn yng ngwerthoedd y llyw i alluogi polisïau rhwydwaith ar eu cyfer yn syml. Does ond angen i chi ei droi ymlaen a byddan nhw'n gweithio.

Mae un broblem yma mewn gwirionedd. Gan eich bod yn weinyddwr barfog arferol, mae'n debyg eich bod wedi penderfynu nad oes angen polisïau rhwydwaith. Ac ar ôl darllen pob math o erthyglau ar adnoddau fel Habr, fe wnaethoch chi benderfynu mai gwlanen, yn enwedig gyda'r modd porth-gwesteiwr, yw'r peth gorau y gallwch chi ei ddewis.

Beth i'w wneud?

Gallwch geisio ail-leoli'r datrysiad rhwydwaith sydd gennych yn eich clwstwr Kubernetes, ceisiwch roi rhywbeth mwy swyddogaethol yn ei le. Ar yr un Calico, er enghraifft. Ond ar unwaith rwyf am ddweud nad yw'r dasg o newid yr ateb rhwydwaith yng nghlwstwr gweithredol Kubernetes yn ddibwys. Fe wnes i ei ddatrys ddwywaith (y ddau dro, fodd bynnag, yn ddamcaniaethol), ond fe wnaethon ni hyd yn oed ddangos sut i wneud hynny yn Slurms. Ar gyfer ein myfyrwyr, fe wnaethom ddangos sut i newid y datrysiad rhwydwaith mewn clwstwr Kubernetes. Mewn egwyddor, gallwch geisio sicrhau nad oes unrhyw amser segur ar y clwstwr cynhyrchu. Ond mae'n debyg na fyddwch chi'n llwyddo.

Ac mewn gwirionedd mae'r broblem yn cael ei datrys yn syml iawn. Mae yna dystysgrifau yn y clwstwr, a gwyddoch y bydd eich tystysgrifau yn mynd yn ddrwg mewn blwyddyn. Wel, ac fel arfer ateb arferol gyda thystysgrifau yn y clwstwr - pam ydym ni'n mynd i gymryd bath stêm, byddwn yn codi clwstwr newydd wrth ei ymyl, gadael iddo fynd yn pydru yn yr hen un, ac adleoli popeth. Yn wir, pan fydd yn pydru, bydd popeth yn gorwedd i lawr am ddiwrnod, ond yna clwstwr newydd.

Pan fyddwch chi'n codi clwstwr newydd, ar yr un pryd mewnosodwch Calico yn lle gwlanen.

Beth i'w wneud os oes gennych dystysgrifau wedi'u cyhoeddi am gan mlynedd ac nad ydych yn mynd i adleoli'r clwstwr? Mae yna'r fath beth Kube-RBAC-Proxy. Mae hwn yn ddatblygiad cŵl iawn, mae'n caniatáu ichi wreiddio ei hun fel cynhwysydd car ochr i unrhyw god mewn clwstwr Kubernetes. Ac mewn gwirionedd mae'n ychwanegu awdurdodiad trwy RBAC Kubernetes ei hun i'r pod hwn.

Mae un broblem. Yn flaenorol, cafodd yr ateb Kube-RBAC-Proxy hwn ei ymgorffori ym mhrometheus y gweithredwr. Ond yna roedd wedi mynd. Nawr mae fersiynau modern yn dibynnu ar y ffaith bod gennych chi bolisïau rhwydwaith a'u cau gyda nhw. Ac felly mae'n rhaid i chi ailysgrifennu'r siart ychydig. Yn wir, os ewch i ystorfa hon, mae enghreifftiau o sut i'w ddefnyddio fel sidecars, a bydd yn rhaid ailysgrifennu'r siartiau cyn lleied â phosibl.

Mae un broblem fach arall. Nid yn unig mae Prometheus yn rhoi ei fetrigau i ffwrdd i unrhyw un. Yn ein hachos ni, mae holl gydrannau clwstwr Kubernetes hefyd yn gallu rhoi eu metrigau.

Ond fel y dywedais, os na allwch gael mynediad at y clwstwr a chasglu gwybodaeth, yna gallwch chi o leiaf wneud niwed.

Felly byddaf yn dangos yn gyflym i chi ddwy ffordd y gall clwstwr Kubernetes fynd yn sâl.

Byddwch yn chwerthin pan ddywedaf wrthych, mae'r rhain yn ddau achos bywyd go iawn.

Dull un. Gorludded adnoddau.

Rydym yn lansio pod arbennig arall. Bydd ganddo'r adran hon.

resources: 
    requests: 
        cpu: 4 
        memory: 4Gi 

Fel y gwyddoch, ceisiadau yw faint o CPU a chof a gedwir ar y gwesteiwr ar gyfer codennau cais penodol. Os oes gennym westeiwr pedwar craidd yng nghlwstwr Kubernetes, a phedwar pod CPU yn cyrraedd yno gyda cheisiadau, yna ni all mwy o godennau â cheisiadau ddod i'r gwesteiwr hwn.

Os ydw i'n rhedeg pod o'r fath, yna rwy'n cyhoeddi'r gorchymyn:

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

Yna ni fydd unrhyw un arall yn gallu defnyddio i glwstwr Kubernetes. Oherwydd bydd pob nod yn rhedeg allan o geisiadau. Ac felly byddaf yn atal eich clwstwr Kubernetes. Os byddaf yn gwneud hyn gyda'r nos, yna gellir atal y gosodiadau am amser eithaf hir.

Os edrychwn eto ar ddogfennaeth Kubernetes, fe welwn y fath beth o'r enw Limit Range. Mae'n gosod yr adnoddau ar gyfer gwrthrychau'r clwstwr. Gallwch ysgrifennu gwrthrych Ystod Cyfyng yn yaml, ei gymhwyso i ofodau enwau penodol - ac ymhellach yn y gofod enw hwn gallwch ddweud bod gennych adnoddau ar gyfer codennau rhagosodedig, uchaf ac isaf.

Gyda chymorth y fath beth, gallwn gyfyngu defnyddwyr mewn gofodau enwau cynnyrch tîm penodol rhag y gallu i nodi pob math o bethau cas ar eu codennau. Ond yn anffodus, hyd yn oed os dywedwch wrth y defnyddiwr na allwch redeg codennau gyda cheisiadau am fwy nag un CPU, mae yna orchymyn graddfa mor wych, yn dda, neu trwy'r dangosfwrdd gallant wneud graddfa.

A dyma lle mae rhif dau yn dod i mewn. Rhedwch 11 111 111 111 111 codennau. Mae'n un ar ddeg biliwn. Nid yw hyn oherwydd i mi ddod i fyny gyda'r fath nifer, ond oherwydd fy mod yn ei weld fy hun.

Stori go iawn. Yn hwyr yn y nos roeddwn ar fin gadael y swyddfa. Rwy'n edrych, mae grŵp o ddatblygwyr yn eistedd yn y gornel ac yn wyllt yn gwneud rhywbeth gyda gliniaduron. Es i fyny at y bois a gofyn: “Beth ddigwyddodd i chi?”

Ychydig yn gynharach, am naw o'r gloch yr hwyr, roedd un o'r datblygwyr yn mynd adref. A phenderfynais: “Nawr byddaf yn graddio fy nghais i un.” Pwysais un, ac aeth y Rhyngrwyd ychydig yn ddiflas. Pwysodd yr un eto, gwasgodd yr un, taro Enter. Plygodd bopeth a allai. Yna daeth y Rhyngrwyd yn fyw - a dechreuodd popeth gynyddu hyd at y dyddiad hwn.

Yn wir, ni ddigwyddodd y stori hon ar Kubernetes, ar y pryd Nomad ydoedd. Daeth i ben gyda'r ffaith, ar ôl awr o'n hymdrechion i atal Nomad rhag ymdrechion ystyfnig i raddfa, atebodd Nomad na fyddai'n rhoi'r gorau i raddio ac na fyddai'n gwneud dim byd arall. "Rwy'n flinedig, rwy'n gadael." A throi o gwmpas.

Yn naturiol, ceisiais wneud yr un peth ar Kubernetes. Ni phlesiodd un ar ddeg biliwn o godennau Kubernetes, meddai: “Ni allaf. Yn rhagori ar gapiau mewnol. Ond gallai 1 o godau.

Mewn ymateb i biliwn, ni wnaeth y Ciwb dynnu'n ôl iddo'i hun. Dechreuodd i raddfa mewn gwirionedd. Po bellaf yr aeth y broses, y mwyaf o amser a gymerodd i greu codennau newydd. Ond aeth y broses ymlaen o hyd. Yr unig broblem yw, os gallaf redeg codennau yn fy ngofod enw am gyfnod amhenodol, yna hyd yn oed heb geisiadau a chyfyngiadau, gallaf redeg cymaint o godennau gyda rhai tasgau y bydd y nodau, gyda chymorth y tasgau hyn, yn dechrau adio o'r cof, ar y CPU. Pan fyddaf yn rhedeg cymaint o godennau, rhaid i'r wybodaeth oddi wrthynt fynd i mewn i'r storfa, hynny yw, ac ati. A phan ddaw gormod o wybodaeth i mewn, mae'r storfa'n dechrau rhoi yn ôl yn rhy araf - ac mae Kubernetes yn dechrau mynd yn ddi-flewyn ar dafod.

Ac un broblem arall ... Fel y gwyddoch, nid rhyw fath o beth canolog yw rheolaethau Kubernetes, ond sawl cydran. Yno, yn arbennig, mae rheolwr rheolwr, trefnydd amserlen ac yn y blaen. Bydd yr holl fechgyn hyn yn dechrau gwneud gwaith gwirion diangen ar yr un pryd, a fydd dros amser yn dechrau cymryd mwy a mwy o amser. Bydd y rheolwr rheoli yn creu codennau newydd. Bydd Trefnydd yn ceisio dod o hyd i nod newydd ar eu cyfer. Mae'n debyg y bydd nodau newydd yn eich clwstwr yn dod i ben yn fuan. Bydd clwstwr Kubernetes yn dechrau rhedeg yn arafach ac yn arafach.

Ond penderfynais fynd ymhellach fyth. Fel y gwyddoch, mae gan Kubernetes beth o'r enw gwasanaeth. Wel, yn ddiofyn yn eich clystyrau, yn fwyaf tebygol, mae'r gwasanaeth yn gweithio gan ddefnyddio tablau IP.

Os ydych chi'n rhedeg biliwn o godau, er enghraifft, ac yna'n defnyddio sgript i orfodi Kubernetis i greu gwasanaethau newydd:

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

Ar holl nodau'r clwstwr, bydd mwy a mwy o reolau iptables newydd yn cael eu cynhyrchu tua'r un pryd. At hynny, bydd un biliwn o reolau iptables yn cael eu cynhyrchu ar gyfer pob gwasanaeth.

Gwiriais yr holl beth hwn ar rai miloedd, hyd at ddwsin. A'r broblem yw ei bod eisoes ar y trothwy hwn yn eithaf problematig i wneud ssh i'r nod. Oherwydd bod pecynnau, sy'n mynd trwy gynifer o gadwyni, yn dechrau teimlo nad ydynt yn dda iawn.

Ac mae hyn hefyd i gyd yn cael ei ddatrys gyda chymorth Kubernetes. Mae cwota Adnoddau gwrthrych o'r fath. Yn gosod nifer yr adnoddau a gwrthrychau sydd ar gael ar gyfer y gofod enwau yn y clwstwr. Gallwn greu gwrthrych yaml ym mhob gofod enw clwstwr Kubernetes. Gyda chymorth y gwrthrych hwn, gallwn ddweud bod gennym nifer penodol o geisiadau, terfynau wedi'u dyrannu ar gyfer y gofod enw hwn, ac ymhellach gallwn ddweud ei bod yn bosibl creu 10 gwasanaeth a 10 pod yn y gofod enw hwn. A gall un datblygwr hyd yn oed wasgu ei hun gyda'r nos. Bydd Kubernetes yn dweud wrtho: “Ni allwch raddfa eich codennau i gymaint, oherwydd ei fod yn fwy na’r cwota adnoddau.” Dyna ni, problem wedi'i datrys. Dogfennaeth yma.

Mae un broblem yn codi mewn cysylltiad â hyn. Rydych chi'n teimlo pa mor anodd yw hi i greu gofod enw yn Kubernetes. Er mwyn ei greu, mae angen inni gymryd i ystyriaeth griw o bethau.

Cwota adnoddau + Ystod Terfyn + RBAC
• Creu gofod enw
• Creu tu mewn limitrange
• Creu cwota adnoddau y tu mewn
• Creu cyfrif gwasanaeth ar gyfer CI
• Creu rhwymiad rôl ar gyfer CI a defnyddwyr
• Lansio'r codennau gwasanaeth angenrheidiol yn ddewisol

Felly, gan fanteisio ar y cyfle hwn, hoffwn rannu fy natblygiadau. Mae yna beth o'r fath a elwir yn weithredwr SDK. Dyma'r ffordd yn y clwstwr Kubernetes i ysgrifennu datganiadau ar ei gyfer. Gallwch ysgrifennu datganiadau gydag Ansible.

Ar y dechrau, ysgrifennom yn Ansible, ac yna edrychais ar beth oedd y gweithredwr SDK ac ailysgrifennu rôl Ansible yn weithredwr. Mae'r datganiad hwn yn caniatáu ichi greu gwrthrych yn y clwstwr Kubernetes o'r enw gorchymyn. Y tu mewn i'r gorchymyn, mae'n caniatáu ichi ddisgrifio yn yaml yr amgylchedd ar gyfer y gorchymyn hwn. Ac y tu mewn i'r amgylchedd tîm, mae'n caniatáu inni ddisgrifio ein bod yn dyrannu cymaint o adnoddau.

Ychydig hwylusydd y broses gymhleth hon.

Ac i gloi. Beth i'w wneud â hyn i gyd?
Yn gyntaf. Mae Polisi Diogelwch Podiau yn dda. Ac er gwaethaf y ffaith nad oes unrhyw un o osodwyr Kubernetes yn eu defnyddio hyd heddiw, mae angen i chi eu defnyddio yn eich clystyrau o hyd.

Nid yw Polisi Rhwydwaith yn nodwedd ddiangen arall. Dyma sydd ei angen mewn gwirionedd yn y clwstwr.

LimitRange / ResourceQuota - mae'n amser i'w ddefnyddio. Fe ddechreuon ni ei ddefnyddio amser maith yn ôl, ac am amser hir roeddwn i'n siŵr bod pawb yn ddieithriad yn ei ddefnyddio. Mae'n troi allan bod hyn yn brin.

Yn ogystal â'r hyn a grybwyllais yn ystod yr adroddiad, mae nodweddion heb eu dogfennu sy'n eich galluogi i ymosod ar y clwstwr. Rhyddhawyd yn ddiweddar dadansoddiad bregusrwydd Kubernetes mawr.

Mae rhai pethau mor drist a niweidiol. Er enghraifft, o dan amodau penodol, gall ciwbedi mewn clwstwr Kubernetes roi cynnwys y cyfeiriadur warlocks, ac i ddefnyddiwr heb awdurdod.

Yma mae cyfarwyddiadau ar sut i atgynhyrchu popeth a ddywedais. Mae yna ffeiliau gydag enghreifftiau cynhyrchu, sut olwg sydd ar ResourceQuota, Pod Security Policy. A gellir cyffwrdd â hyn i gyd.

Diolch i bawb.

Ffynhonnell: hab.com

Ychwanegu sylw