Ngalereskeun liang dina klaster Kubernetes. Laporan sareng transkrip ti DevOpsConf

Pavel Selivanov, arsiték solusi Southbridge sareng guru Slurm, masihan presentasi di DevOpsConf 2019. Obrolan ieu mangrupikeun bagian tina salah sahiji topik kursus anu jero ngeunaan Kubernetes "Slurm Mega".

Slurm Basic: Hiji Perkenalan pikeun Kubernetes lumangsung di Moscow on November 18-20.
Slurm Mega: pilari handapeun tiung tina Kubernetes — Moscow, 22-24 Nopémber.
Slurm Online: duanana kursus Kubernetes salawasna sadia.

Di handap cut aya transkrip laporan.

Wilujeng sonten, kolega sareng jalma anu simpati sareng aranjeunna. Dinten ieu kuring bakal ngobrol ngeunaan kaamanan.

Kuring ningali yén aya seueur satpam di aula ayeuna. Hapunten sateuacanna upami kuring nganggo istilah-istilah ti dunya kaamanan henteu persis sakumaha anu biasa pikeun anjeun.

Kajadian éta kira-kira genep bulan ka tukang kuring mendakan hiji kluster Kubernetes umum. Publik ngandung harti yén aya angka ka-n tina spasi ngaran; dina spasi ngaran ieu aya pamaké terasing dina spasi ngaran maranéhanana. Sadaya pangguna ieu milik perusahaan anu béda. Nya, éta dianggap yén klaster ieu kedah dianggo salaku CDN. Nyaéta, aranjeunna masihan anjeun klaster, aranjeunna masihan anjeun pangguna di dinya, anjeun angkat ka rohangan ngaran anjeun, nyebarkeun payuneun anjeun.

Perusahaan kuring sateuacana nyobian ngajual jasa sapertos kitu. Sareng kuring dipenta pikeun nyodok klaster pikeun ningali naha solusi ieu cocog atanapi henteu.

Kuring datang ka klaster ieu. Abdi dipasihan hak terbatas, ruang namina terbatas. Lalaki di dinya ngartos naon kaamanan. Aranjeunna maca ngeunaan Kontrol aksés Berbasis Peran (RBAC) dina Kubernetes - sareng aranjeunna dipintal ku kituna kuring henteu tiasa ngaluncurkeun pods nyalira tina panyebaran. Abdi henteu émut masalah anu kuring badé direngsekeun ku ngaluncurkeun pod tanpa panyebaran, tapi kuring hoyong ngaluncurkeun ngan ukur pod. Pikeun alus tuah, Kuring mutuskeun ningali naon hak kuring dina klaster, naon bisa I do, naon teu bisa ngalakukeun, sarta naon maranéhna geus ngaco nepi aya. Dina waktos anu sami, kuring bakal nyarioskeun ka anjeun naon anu aranjeunna henteu leres dikonpigurasikeun dina RBAC.

Kajadian éta dina dua menit kuring nampi admin ka klusterna, ningali sadaya rohangan ngaran tatangga, ningali aya payuneun produksi perusahaan anu parantos ngagaleuh jasa sareng disebarkeun. Kuring bieu bisa ngeureunkeun sorangan ti bade ka hareup batur sarta nempatkeun sababaraha sumpah palapa dina kaca utama.

Kuring bakal nyarioskeun ka anjeun conto kumaha kuring ngalakukeun ieu sareng kumaha cara ngajagaan diri tina ieu.

Tapi ke heula, hayu atuh ngenalkeun diri. Nami abdi Pavel Selivanov. Abdi arsitek di Southbridge. Abdi ngartos Kubernetes, DevOps sareng sagala rupa hal anu pikaresepeun. Insinyur Southbridge sareng kuring ngawangun sadayana ieu, sareng kuring konsultasi.

Salian kagiatan utama kami, kami nembe ngaluncurkeun proyék anu disebut Slurms. Urang nyobian mawa pangabisa urang pikeun digawekeun ku Kubernetes saeutik ka massa, pikeun ngajarkeun batur ogé gawé bareng K8s.

Naon anu bakal kuring ngobrolkeun ayeuna? Topik laporan jelas - ngeunaan kaamanan klaster Kubernetes. Tapi kuring hoyong langsung nyarios yén topik ieu ageung pisan - sareng ku kituna kuring hoyong langsung netelakeun naon anu kuring pasti moal ngobrol. Kuring moal ngobrol ngeunaan istilah hackneyed anu parantos dianggo saratus kali dina Internét. Sagala jinis RBAC sareng sertipikat.

Kuring bakal ngobrol ngeunaan naon nyeri kuring sareng kolega kuring ngeunaan kaamanan dina klaster Kubernetes. Kami ningali masalah ieu duanana diantara panyadia anu nyayogikeun klaster Kubernetes sareng diantara klien anu sumping ka kami. Komo ti klien nu datang ka kami ti pausahaan admin konsultan séjén. Hartina, skala tragedi sabenerna kacida gedéna.

Aya sacara harfiah tilu poin anu kuring bakal ngobrolkeun ayeuna:

  1. Hak pamaké vs hak pod. Hak pamaké sareng hak pod sanés hal anu sami.
  2. Ngumpulkeun informasi ngeunaan klaster. Kuring baris némbongkeun yén anjeun bisa ngumpulkeun sakabeh informasi nu peryogi ti klaster tanpa ngabogaan hak husus dina klaster ieu.
  3. serangan DoS dina klaster. Lamun urang teu bisa ngumpulkeun informasi, urang bakal tiasa nempatkeun klaster dina sagala hal. Kuring bakal ngobrol ngeunaan serangan DoS dina elemen kontrol klaster.

Hal umum anu sanés anu kuring bakal disebatkeun nyaéta naon anu kuring uji sadayana ieu, dimana kuring pasti tiasa nyarios yén éta sadayana jalan.

Kami nyandak salaku dasar pamasangan klaster Kubernetes nganggo Kubespray. Upami aya anu henteu terang, ieu saleresna sakumpulan peran pikeun Ansible. Urang make eta terus dina karya urang. Hal anu saé nyaéta anjeun tiasa ngagulung di mana waé - anjeun tiasa ngagulung kana potongan beusi atanapi kana awan dimana waé. Hiji métode instalasi jalan prinsipna pikeun sagalana.

Dina klaster ieu kuring bakal boga Kubernetes v1.14.5. Sakabéh klaster kubus, nu urang bakal mertimbangkeun, dibagi kana ngaranspasi, unggal ngaranspasi milik tim misah, sarta anggota tim ieu miboga aksés ka unggal spasi ngaran. Aranjeunna teu tiasa angkat ka rohangan ngaran anu béda-béda, ngan ukur ka aranjeunna. Tapi aya hiji akun admin tangtu nu boga hak pikeun sakabéh klaster.

Ngalereskeun liang dina klaster Kubernetes. Laporan sareng transkrip ti DevOpsConf

Kuring jangji yén hal kahiji anu bakal urang laksanakeun nyaéta kéngingkeun hak admin kana kluster. Urang peryogi pod anu disiapkeun khusus anu bakal ngarobih klaster Kubernetes. Sadaya anu urang kedah laksanakeun nyaéta nerapkeun kana klaster Kubernetes.

kubectl apply -f pod.yaml

Pod ieu bakal sumping ka salah sahiji master klaster Kubernetes. Sarta sanggeus klaster ieu happily bakal balik deui ka kami file disebut admin.conf. Dina kubus, file ieu nyimpen sadaya sertipikat administrator, sarta dina waktos anu sareng ngonpigurasikeun API klaster. Ieu kumaha gampangna pikeun kéngingkeun aksés admin, saur kuring, 98% tina klaster Kubernetes.

Kuring ngulang, pod ieu dijieun ku hiji pamekar di klaster anjeun anu boga aksés ka nyebarkeun usulan-Na kana hiji namespace leutik, eta sadayana clamped ku RBAC. Anjeunna teu boga hak. Tapi sertipikat ieu dipulangkeun.

Sareng ayeuna ngeunaan pod anu disiapkeun khusus. Urang ngajalankeun eta dina gambar nanaon. Hayu urang nyandak debian:jessie sabagé conto.

Kami ngagaduhan hal ieu:

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

Naon toleransi? Masters dina klaster Kubernetes biasana ditandaan ku hal anu disebut taint. Sareng hakekat "inféksi" ieu nyaéta yén polong henteu tiasa ditugaskeun pikeun ngawasa titik. Tapi teu aya anu nyusahkeun nunjukkeun dina pod naon waé yén éta toleran kana "inféksi". Bagian Tolerasi ngan ukur nyarios yén upami sababaraha titik ngagaduhan NoSchedule, maka titik kami toleran kana inféksi sapertos kitu - sareng teu aya masalah.

Salajengna, urang nyebutkeun yén sahandapeun urang teu ngan toleran, tapi ogé hayang husus sasaran master. Kusabab master gaduh hal anu paling nikmat anu urang peryogikeun - sadaya sertipikat. Kituna, urang nyebutkeun nodeSelector - sarta kami boga labél baku on Masters, nu ngidinan Anjeun pikeun milih ti sakabéh titik dina klaster persis titik nu masters.

Kalayan dua bagian ieu anjeunna pasti bakal sumping ka master. Sareng anjeunna bakal diidinan cicing di dinya.

Tapi ngan datang ka master teu cukup pikeun urang. Ieu moal masihan kami nanaon. Janten salajengna urang gaduh dua hal ieu:

hostNetwork: true 
hostPID: true 

Urang nangtukeun yén pod urang, nu urang ngajalankeun, bakal hirup dina spasi ngaran kernel, dina spasi ngaran jaringan, sarta dina spasi ngaran PID. Sakali pod diluncurkeun dina master, éta bakal tiasa ningali sadaya antarmuka langsung tina titik ieu, ngadangukeun sadaya lalu lintas sareng ningali PID sadaya prosés.

Lajeng éta masalah hal leutik. Candak etcd sarta baca naon rék.

Hal anu paling pikaresepeun nyaéta fitur Kubernetes ieu, anu aya sacara standar.

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

Sareng hakekatna nyaéta yén urang tiasa nyarios dina pod anu urang jalankeun, sanaos tanpa hak kana klaster ieu, yén urang hoyong nyiptakeun volume jinis hostPath. Ieu hartosna nyandak jalur tina host anu kami bakal diluncurkeun - sareng nyandak éta salaku volume. Teras we nelepon nami: host. Urang Gunung sakabéh hostPath ieu di jero pod nu. Dina conto ieu, ka diréktori / host.

Abdi badé ngulang deui. Kami nyarios ka pod pikeun sumping ka master, kéngingkeun hostNetwork sareng hostPID di dinya - sareng pasang sadayana akar master di jero pod ieu.

Anjeun ngartos yén di Debian kami ngagaduhan bash jalan, sareng bash ieu dijalankeun dina akar. Hartina, urang ngan narima root dina master, tanpa ngabogaan hak naon wae dina klaster Kubernetes.

Teras sadayana tugasna nyaéta angkat ka sub diréktori /host /etc/kubernetes/pki, upami teu lepat, angkat sadayana sertipikat master klaster di dinya sareng, sasuai, janten administrator klaster.

Upami anjeun ningal ku cara ieu, ieu mangrupikeun sababaraha hak anu paling bahaya dina pod - henteu paduli hak naon anu dipiboga ku pangguna:
Ngalereskeun liang dina klaster Kubernetes. Laporan sareng transkrip ti DevOpsConf

Upami kuring ngagaduhan hak pikeun ngajalankeun pod dina sababaraha ruang ngaran kluster, maka pod ieu ngagaduhan hak ieu sacara standar. Abdi tiasa ngajalankeun pods istiméwa, sarta ieu umumna sagala hak, praktis root on node.

Paporit abdi nyaéta pamaké Akar. Sareng Kubernetes gaduh pilihan Run As Non-Root ieu. Ieu mangrupikeun jinis panyalindungan tina hacker. Naha anjeun terang naon "virus Moldavia"? Upami anjeun ujug-ujug janten hacker sareng sumping ka kluster Kubernetes kuring, maka kami, pangurus miskin, naroskeun: "Punten nunjukkeun dina pod anjeun dimana anjeun bakal hack klaster kuring, jalankeun salaku non-root. Upami teu kitu, eta bakal kajadian nu ngajalankeun prosés di pod anjeun handapeun root, sarta eta bakal pisan gampang pikeun anjeun hack kuring. Mangga ngajaga diri tina diri anjeun."

Volume jalur host nyaéta, dina pamanggih kuring, cara panggancangna pikeun kéngingkeun hasil anu dipikahoyong tina klaster Kubernetes.

Tapi naon anu kudu dipigawé kalayan sagala ieu?

Pikiran anu kedah sumping ka administrator normal anu mendakan Kubernetes nyaéta: "Leres, kuring nyarios ka anjeun, Kubernetes henteu jalan. Aya liang di jerona. Sareng sadaya Kubus mangrupikeun omong kosong. ” Kanyataanna, aya hiji hal saperti dokuméntasi, sarta lamun nempo aya, aya bagian Kawijakan Kaamanan Pod.

Ieu mangrupikeun obyék yaml - urang tiasa nyiptakeunana dina kluster Kubernetes - anu ngatur aspék kaamanan khusus dina pedaran pods. Nyaéta, kanyataanna, éta ngatur hak pikeun ngagunakeun hostNetwork, hostPID, jinis volume anu tangtu anu aya dina pods nalika ngamimitian. Kalayan bantosan Kabijakan Kaamanan Pod, sadayana ieu tiasa dijelaskeun.

Hal anu paling pikaresepeun ngeunaan Kabijakan Kaamanan Pod nyaéta dina klaster Kubernetes, sadaya pamasang PSP henteu ngan ukur dijelaskeun ku cara naon waé, aranjeunna ngan saukur ditumpurkeun sacara standar. Kabijakan Kaamanan Pod diaktipkeun nganggo plugin pangakuan.

Oké, hayu urang nyebarkeun Kabijakan Kaamanan Pod kana kluster, hayu urang nyarios yén urang gaduh sababaraha pods jasa dina ruang ngaran, anu ngan ukur admin anu gaduh aksés. Hayu urang nyebutkeun, dina sakabeh kasus séjén, pods boga hak kawates. Kusabab paling dipikaresep pamekar teu kedah ngajalankeun pods husus dina klaster Anjeun.

Jeung sagalana sigana alus kalawan kami. Sareng kluster Kubernetes kami henteu tiasa diretas dina dua menit.

Aya masalah. Paling dipikaresep, upami anjeun gaduh klaster Kubernetes, teras monitoring dipasang dina klaster anjeun. Kuring malah bakal dugi ka ngaduga yén upami kluster anjeun gaduh ngawaskeun, éta bakal disebat Prometheus.

Naon anu kuring badé nyarioskeun ka anjeun bakal sah pikeun operator Prometheus sareng Prometheus anu dikirimkeun dina bentuk murni na. Patarosan éta lamun kuring teu bisa meunang hiji admin kana klaster jadi gancang, lajeng ieu ngandung harti yén kuring kudu néangan deui. Sareng abdi tiasa milarian kalayan bantosan monitoring anjeun.

Panginten sadayana maca tulisan anu sami ngeunaan Habré, sareng pangawasna aya dina rohangan ngaran ngawaskeun. Bagan Helm disebut kasarna sarua for everyone. Kuring guessing yén lamun ngalakukeun Helm install stabil / prometheus, anjeun bakal mungkas nepi ka kasarna ngaran sarua. Jeung paling dipikaresep kuring malah moal kudu nebak nami DNS dina klaster Anjeun. Kusabab éta standar.

Ngalereskeun liang dina klaster Kubernetes. Laporan sareng transkrip ti DevOpsConf

Salajengna urang boga dev ns tangtu, nu bisa ngajalankeun hiji pod tangtu. Teras tina pod ieu gampang pisan pikeun ngalakukeun sapertos kieu:

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

prometheus-kube-state-metrics mangrupikeun salah sahiji eksportir Prometheus anu ngumpulkeun métrik tina API Kubernetes sorangan. Aya seueur data di dinya, naon anu dijalankeun dina kluster anjeun, naon éta, naon masalah anjeun sareng éta.

Salaku conto basajan:

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

Ku nyieun pamundut curl basajan ti pod unprivileged, Anjeun bisa meunangkeun inpo di handap ieu. Upami anjeun henteu terang versi Kubernetes anu anjeun jalankeun, éta bakal gampang nyarioskeun ka anjeun.

Sareng anu paling pikaresepeun nyaéta salian pikeun ngaksés kube-state-metrics, anjeun ogé tiasa ngaksés Prometheus sacara langsung. Anjeun tiasa ngumpulkeun metrics ti dinya. Anjeun malah tiasa ngawangun métrik ti dinya. Malah sacara téoritis, anjeun tiasa ngawangun pamundut sapertos tina klaster di Prometheus, anu ngan saukur bakal pareum. Sareng ngawaskeun anjeun bakal lirén damel tina kluster sadayana.

Sareng di dieu patarosan timbul naha aya ngawaskeun éksternal ngawas ngawaskeun anjeun. Kuring kakara meunang kasempetan pikeun beroperasi dina klaster Kubernetes tanpa konsékuansi keur kuring sorangan. Anjeun malah moal terang yén kuring nuju operasi di dinya, sabab teu aya deui ngawaskeun.

Sapertos sareng PSP, sigana masalahna nyaéta yén sadaya téknologi mewah ieu - Kubernetes, Prometheus - aranjeunna henteu tiasa dianggo sareng pinuh ku liang. Henteu ogé.

Aya hal sapertos kitu - Kawijakan Jaringan.

Upami anjeun admin normal, maka paling dipikaresep anjeun terang ngeunaan Kawijakan Jaringan yén ieu mangrupikeun yaml anu sanés, anu parantos seueur dina kluster. Sareng sababaraha Kabijakan Jaringan pasti henteu diperyogikeun. Sareng upami anjeun maca naon Kabijakan Jaringan, yén éta mangrupikeun firewall Yaml Kubernetes, éta ngamungkinkeun anjeun pikeun ngawatesan hak aksés antara ruang ngaran, antara pods, teras anjeun pasti mutuskeun yén firewall dina format yaml di Kubernetes dumasar kana abstraksi salajengna. ... Henteu, henteu. Ieu pasti teu perlu.

Sanaos anjeun henteu nyarios ka spesialis kaamanan anjeun yén ngagunakeun Kubernetes anjeun tiasa ngawangun firewall anu gampang pisan sareng saderhana, sareng anu langkung rinci. Upami aranjeunna henteu acan terang ieu sareng henteu ngaganggu anjeun: "Muhun, pasihan abdi, pasihan abdi ..." Lajeng dina sagala hal, anjeun peryogi Kabijakan Jaringan pikeun meungpeuk aksés ka sababaraha tempat jasa anu tiasa ditarik tina kluster anjeun. tanpa otorisasina.

Sapertos dina conto anu kuring masihan, anjeun tiasa narik métrik kaayaan kube tina rohangan ngaran dina klaster Kubernetes tanpa gaduh hak pikeun ngalakukeunana. Kawijakan jaringan parantos nutup aksés tina sadaya rohangan ngaran anu sanés ka ruang ngaran ngawaskeun sareng éta: henteu aya aksés, henteu aya masalah. Dina sadaya bagan anu aya, boh Prometheus standar sareng Prometheus anu aya dina operator, ngan ukur aya pilihan dina nilai-nilai Helm pikeun ngan saukur ngaktifkeun kawijakan jaringan pikeun aranjeunna. Anjeun ngan ukur kedah ngaktipkeun sareng aranjeunna bakal tiasa dianggo.

Aya bener hiji masalah di dieu. Janten admin janggot normal, anjeun paling dipikaresep mutuskeun yén kawijakan jaringan henteu diperyogikeun. Sareng saatos maca sagala jinis tulisan ngeunaan sumber sapertos Habr, anjeun mutuskeun yén flanel, khususna sareng mode host-gateway, mangrupikeun hal anu pangsaéna anjeun tiasa milih.

Naon anu kudu dipigawé?

Anjeun tiasa nyobian redeploy solusi jaringan anu anjeun gaduh dina klaster Kubernetes anjeun, coba ngagentos ku hal anu langkung fungsional. Pikeun Calico sarua, contona. Tapi kuring hoyong langsung nyarios yén tugas ngarobih solusi jaringan dina kluster kerja Kubernetes henteu sepele. Kuring direngsekeun dua kali (dua kali, kumaha oge, sacara téoritis), tapi urang malah némbongkeun kumaha ngalakukeun eta di Slurms. Pikeun murid kami, kami nunjukkeun kumaha ngarobih solusi jaringan dina klaster Kubernetes. Sacara prinsip, anjeun tiasa nyobian pastikeun yén teu aya downtime dina klaster produksi. Tapi sigana anjeun moal suksés.

Jeung masalah sabenerna direngsekeun pisan basajan. Aya sertipikat dina kluster, sareng anjeun terang yén sertipikat anjeun bakal kadaluwarsa dina sataun. Nya, sareng biasana solusi normal kalayan sertipikat dina kluster - naha urang hariwang, urang bakal ngangkat kluster énggal caket dieu, ngantepkeun anu lami janten busuk, sareng nyebarkeun sadayana. Leres, nalika éta busuk, urang kedah calik sadinten, tapi ieu mangrupikeun klaster énggal.

Lamun anjeun ngangkat klaster anyar, sakaligus nyelapkeun Calico tinimbang flannel.

Naon anu kudu dilakukeun upami sertipikat anjeun dikaluarkeun salami saratus taun sareng anjeun henteu badé nyebarkeun deui kluster? Aya hal sapertos Kube-RBAC-Proxy. Ieu mangrupikeun pamekaran anu saé pisan, éta ngamungkinkeun anjeun nyelapkeun diri salaku wadah sidecar ka pod mana waé dina klaster Kubernetes. Sareng saleresna nambihan otorisasi ka pod ieu ngalangkungan RBAC Kubernetes sorangan.

Aya hiji masalah. Saméméhna, solusi Kube-RBAC-Proxy ieu diwangun kana Prometheus operator. Tapi saterusna manéhna indit. Ayeuna versi modéren ngandelkeun kanyataan yén anjeun gaduh kawijakan jaringan sareng nutup éta ngagunakeunana. Ku kituna urang kudu nulis ulang bagan saeutik. Kanyataanna, lamun indit ka gudang ieu, Aya conto kumaha ngagunakeun ieu salaku sidecars, sarta grafik kudu ditulis ulang minimally.

Aya hiji deui masalah leutik. Prometheus sanés ngan ukur masihan métrikna ka saha waé. Sadaya komponén klaster Kubernetes urang ogé tiasa ngabalikeun métrik sorangan.

Tapi sakumaha anu kuring parantos nyarios, upami anjeun henteu tiasa ngaksés kluster sareng ngumpulkeun inpormasi, maka anjeun sahenteuna tiasa ngarugikeun.

Janten kuring bakal gancang nunjukkeun dua cara kumaha klaster Kubernetes tiasa dirusak.

Anjeun bakal seuri nalika kuring nyarioskeun ka anjeun, ieu mangrupikeun dua kasus kahirupan nyata.

Métode hiji. Deplesi sumberdaya.

Hayu urang ngajalankeun pod husus sejen. Éta bakal ngagaduhan bagian sapertos kieu.

resources: 
    requests: 
        cpu: 4 
        memory: 4Gi 

Sakumaha anjeun terang, pamundut mangrupikeun jumlah CPU sareng mémori anu ditangtayungan dina host pikeun pods khusus sareng pamundut. Lamun urang boga host opat-inti dina klaster Kubernetes, sarta opat pods CPU anjog ka dinya kalawan requests, hartina euweuh pods kalawan requests bakal bisa datang ka host ieu.

Upami kuring ngajalankeun pod sapertos kitu, maka kuring bakal ngajalankeun paréntah:

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

Teras teu aya anu sanés anu tiasa nyebarkeun kana klaster Kubernetes. Kusabab sakabeh titik bakal kaluar tina requests. Ku kituna kuring bakal ngeureunkeun klaster Kubernetes Anjeun. Upami kuring ngalakukeun ieu magrib, kuring tiasa ngeureunkeun panyebaran pikeun waktos anu lami.

Lamun urang tingali deui dina dokuméntasi Kubernetes, urang bakal ningali hal ieu disebut Wates Range. Eta susunan sumberdaya pikeun objék klaster. Anjeun tiasa nyerat obyék Wates Range dina yaml, larapkeun kana rohangan ngaran anu tangtu - teras dina rohangan ngaran ieu anjeun tiasa nyarios yén anjeun gaduh sumber daya standar, maksimal sareng minimum pikeun pods.

Kalayan bantosan hal sapertos kitu, urang tiasa ngabatesan pangguna dina rohangan ngaran produk khusus pikeun tim dina kamampuan nunjukkeun sagala jinis hal jahat dina podna. Tapi hanjakalna, sanajan anjeun ngabejaan pamaké yén maranéhna moal bisa ngajalankeun pods kalawan requests pikeun leuwih ti hiji CPU, aya hiji paréntah skala éndah, atawa maranéhna bisa ngalakukeun skala ngaliwatan dasbor.

Sareng ieu dimana metode nomer dua asalna. Urang ngajalankeun 11 pods. Éta sabelas milyar. Ieu lain kusabab kuring datang nepi ka angka misalna, tapi kusabab kuring nempo sorangan.

carita nyata. Soré-sore kuring rék ninggalkeun kantor. Kuring ningali grup pamekar linggih di juru, frantically ngalakonan hal kalawan laptop maranéhanana. Kuring angkat ka budak lalaki sareng naroskeun: "Naon anu kajantenan ka anjeun?"

Sakedapan, kira-kira jam salapan sonten, salah saurang pamekar nuju siap-siap mulih. Sareng kuring mutuskeun: "Kuring ayeuna bakal ngirangan aplikasi kuring ka hiji." Kuring mencet hiji, tapi Internet slowed handap saeutik. Anjeunna mencét hiji deui, anjeunna mencét hiji, teras klik Enter. Kuring poked dina sagalana kuring bisa. Lajeng Internet hirup - sarta sagalana mimiti skala handap ka angka ieu.

Leres, carita ieu henteu lumangsung dina Kubernetes; dina waktos éta éta Nomad. Ditungtungan ku kanyataan yén sanggeus sajam usaha urang pikeun ngeureunkeun Nomad tina usaha pengkuh skala, Nomad ngawaler yén anjeunna moal eureun skala na moal ngalakukeun nanaon sejenna. "Abdi capé, abdi angkat." Sarta anjeunna curled up.

Alami, kuring diusahakeun lakonan hal nu sarua dina Kubernetes. Kubernetes henteu resep kana sabelas miliar pod, saurna: "Kuring henteu tiasa. Ngalangkungan penjaga mulut internal." Tapi 1 pods tiasa.

Dina respon kana samilyar, kubus teu mundur kana dirina. Anjeunna leres-leres ngamimitian skala. Prosésna langkung jauh, langkung seueur waktos anjeunna nyiptakeun pods énggal. Tapi tetep prosésna diteruskeun. Hiji-hijina masalah nyaéta upami kuring tiasa ngaluncurkeun pods tanpa wates dina rohangan ngaran kuring, sanaos tanpa pamundut sareng wates kuring tiasa ngaluncurkeun seueur pods kalayan sababaraha tugas anu ku bantosan tugas-tugas ieu titik-titik bakal mimiti nambahan dina mémori, dina CPU. Nalika kuring ngaluncurkeun seueur pods, inpormasi ti aranjeunna kedah disimpen, nyaéta, jsb. Sareng nalika seueur teuing inpormasi dugi ka dinya, panyimpen mimiti laun-laun teuing - sareng Kubernetes mimiti kusam.

Sareng hiji deui masalah... Sakumaha anjeun terang, elemen kontrol Kubernetes sanes hiji hal anu sentral, tapi sababaraha komponén. Khususna, aya manajer controller, scheduler, jeung saterusna. Sadayana ieu bakal mimiti ngalakukeun padamelan anu teu perlu, bodo dina waktos anu sami, anu kana waktosna bakal ngawitan nyandak langkung seueur waktos. Manajer controller bakal nyieun pods anyar. Penjadwal bakal nyobian milarian titik énggal pikeun aranjeunna. Anjeun paling dipikaresep bakal kaluar titik anyar dina klaster anjeun pas. Kluster Kubernetes bakal mimiti dianggo langkung laun sareng laun.

Tapi kuring mutuskeun pikeun leuwih jauh. Sakumaha anjeun terang, dina Kubernetes aya anu disebut jasa. Nya, sacara standar dina klaster anjeun, paling dipikaresep, jasa dianggo nganggo tabel IP.

Upami anjeun ngajalankeun samilyar pods, contona, teras nganggo skrip pikeun maksa Kubernetis ngadamel jasa énggal:

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

Dina sadaya titik kluster, beuki loba aturan iptables anyar bakal dihasilkeun kira-kira sakaligus. Leuwih ti éta, hiji miliar aturan iptables bakal dihasilkeun pikeun tiap jasa.

Kuring dipariksa sakabeh hal ieu dina sababaraha sarébu, nepi ka sapuluh. Sareng masalahna nyaéta parantos aya dina ambang ieu rada masalah pikeun ngalakukeun ssh kana titik. Kusabab pakét, ngalangkungan seueur ranté, mimiti karasaeun henteu saé.

Sareng ieu ogé, sadayana direngsekeun kalayan bantosan Kubernetes. Aya objek kuota Resource sapertos. Nyetél jumlah sumberdaya sadia jeung objék pikeun ngaranspasi dina klaster. Urang tiasa ngadamel obyék yaml dina unggal rohangan ngaran tina klaster Kubernetes. Ngagunakeun obyék ieu, urang bisa disebutkeun yen urang boga jumlah nu tangtu requests sarta wates disadiakeun pikeun ngaranspasi ieu, lajeng urang bisa disebutkeun yen dina namespace ieu kasebut nyaéta dimungkinkeun pikeun nyieun 10 jasa jeung 10 pods. Sareng hiji pamekar tunggal sahenteuna tiasa cuk dirina dina soré. Kubernetes bakal nyarioskeun ka anjeunna: "Anjeun teu tiasa skala pod anjeun kana jumlah éta, sabab sumberna ngaleuwihan kuota." Éta éta, masalah direngsekeun. Dokuméntasi di dieu.

Hiji titik masalah timbul dina hal ieu. Anjeun ngarasa kumaha héséna nyieun ngaranspasi di Kubernetes. Pikeun nyiptakeunana, urang kedah tumut kana seueur hal.

Kuota sumberdaya + Wates Range + RBAC
• Jieun ngaranspasi
• Jieun limitrange jero
• Jieun jero resourcequota
• Jieun hiji serviceaccount pikeun CI
• Jieun rolebinding pikeun CI jeung pamaké
• Optionally ngajalankeun pods layanan diperlukeun

Ku sabab kitu, kuring hoyong nyandak kasempetan ieu pikeun ngabagi kamajuan kuring. Aya hiji hal anu disebut operator SDK. Ieu mangrupikeun cara pikeun klaster Kubernetes nyerat operator pikeun éta. Anjeun tiasa nyerat pernyataan nganggo Ansible.

Mimitina ditulis dina Ansible, teras kuring ningali yén aya operator SDK sareng nyerat peran Ansible janten operator. Pernyataan ieu ngamungkinkeun anjeun nyiptakeun obyék dina klaster Kubernetes anu disebut paréntah. Di jero paréntah, éta ngamungkinkeun anjeun pikeun ngajelaskeun lingkungan pikeun paréntah ieu dina yaml. Sareng dina lingkungan tim, éta ngamungkinkeun urang pikeun ngajelaskeun yén kami nyayogikeun seueur sumber.

Petite ngajadikeun sakabeh proses kompléks ieu gampang.

Jeung kasimpulanana. Naon anu kudu dipigawé kalayan sagala ieu?
kahiji. Kabijakan Kaamanan Pod saé. Sareng sanaos kanyataan yén teu aya pamasangan Kubernetes anu ngagunakeunana dugi ka ayeuna, anjeun masih kedah ngagunakeunana dina klaster anjeun.

Kabijakan Jaringan sanés ngan ukur fitur anu teu dipikabutuh. Ieu naon bener diperlukeun dina klaster a.

LimitRange/ResourceQuota - waktuna pikeun ngagunakeunana. Urang mimiti ngagunakeun ieu geus lila pisan, sarta geus lila kuring yakin yén dulur ngagunakeun eta. Tétéla ieu téh langka.

Salian naon anu kuring disebutkeun salila laporan, aya fitur undocumented nu ngidinan Anjeun pikeun nyerang klaster. Dileupaskeun nembe analisis éksténsif ngeunaan kerentanan Kubernetes.

Sababaraha hal anu jadi hanjelu tur nyeri pisan. Contona, dina kaayaan nu tangtu, cubelets dina klaster Kubernetes tiasa masihan eusi diréktori warlocks ka pamaké nu teu sah.

di dieu Aya parentah tentang kumaha carana baranahan sagalana Kuring bébéja anjeun. Aya file sareng conto produksi kumaha ResourceQuota sareng Kabijakan Kaamanan Pod. Sareng anjeun tiasa nyabak sadayana ieu.

Hatur nuhun ka sadayana.

sumber: www.habr.com

Tambahkeun komentar