{"id":36918,"date":"2019-10-31T22:14:43","date_gmt":"2019-10-31T19:14:43","guid":{"rendered":"https:\/\/prohoster.info\/blog\/bezopasnost-helm\/"},"modified":"2019-10-31T22:14:43","modified_gmt":"2019-10-31T19:14:43","slug":"bezopasnost-helm","status":"publish","type":"post","link":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/bezopasnost-helm","title":{"rendered":"Securitatea Helm","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Esenta povestirii despre cel mai popular manager de pachete pentru Kubernetes ar putea fi ilustrat\u0103 cu ajutorul emoji-ului:<\/p>\n<ul>\n<li>cutie \u2014 acesta este Helm (cea mai potrivit\u0103 reprezentare din ultima versiune Emoji);<\/li>\n<li>lac\u0103t \u2014 securitate;<\/li>\n<li>omule\u021b \u2014 solu\u021bia problemelor.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Securitatea Helm\" src=\"\/wp-content\/uploads\/2019\/08\/91099b372fd73bce94268563c3ee2c50.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00cen realitate, lucrurile vor fi pu\u021bin mai complicate, iar povestea este plin\u0103 de detalii tehnice despre cum <b>s\u0103 faci Helm sigur<\/b>.<\/p>\n<ul>\n<li>Pe scurt, ce este Helm, dac\u0103 nu \u0219tiai sau ai uitat. Ce probleme rezolv\u0103 \u0219i unde se afl\u0103 \u00een ecosistem.<\/li>\n<li>S\u0103 analiz\u0103m arhitectura Helm. Nicio discu\u021bie despre securitate \u0219i despre cum s\u0103 faci un instrument sau o solu\u021bie mai sigur\u0103 nu poate ocoli \u00een\u021belegerea arhitecturii componentelor.<\/li>\n<li>S\u0103 discut\u0103m despre componentele Helm.<\/li>\n<li>Cea mai arz\u0103toare \u00eentrebare \u2014 viitorul \u2014 noua versiune Helm 3.\u00a0<\/li>\n<\/ul>\n<p>\nTot ce este \u00een acest articol se refer\u0103 la Helm 2. Aceast\u0103 versiune este acum \u00een produc\u021bie \u0219i este probabil c\u0103 exact aceasta o folose\u0219ti acum, iar \u00een ea exist\u0103 amenin\u021b\u0103ri la adresa securit\u0103\u021bii.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<center><div class=\"youtube-placeholder\" data-id=\"_8zNTJ1_R5I\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/_8zNTJ1_R5I\/hqdefault.jpg\" alt=\"Reda\u021bi video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><br \/>\n<strong>Despre vorbitor:<\/strong> Alexandru Ha\u00ebrov (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/allexx\/\" class=\"user_link\">allexx<\/a><\/noindex>) are 10 ani de experien\u021b\u0103 \u00een dezvoltare, ajut\u00e2nd la \u00eembun\u0103t\u0103\u021birea con\u021binutului <noindex><a rel=\"nofollow\" href=\"https:\/\/conf.python.ru\/2019\">Moscow Python Conf++<\/a><\/noindex> \u0219i s-a al\u0103turat comitetului <noindex><a rel=\"nofollow\" href=\"https:\/\/events.linuxfoundation.org\/events\/helm-summit-2019\/\">Helm Summit<\/a><\/noindex>. \u00cen prezent lucreaz\u0103 la Chainstack ca lider de dezvoltare \u2014 acesta este un hibrid \u00eentre un \u0219ef de dezvoltare \u0219i o persoan\u0103 care se ocup\u0103 de livrarea versiunilor finale. Adic\u0103 se afl\u0103 pe frontul de lupt\u0103, unde se \u00eent\u00e2mpl\u0103 totul, de la crearea produsului p\u00e2n\u0103 la exploatarea acestuia.<\/p>\n<p>Chainstack este un start-up mic, \u00een cre\u0219tere rapid\u0103, cu scopul de a oferi clien\u021bilor posibilitatea s\u0103 uite de infrastructur\u0103 \u0219i de dificult\u0103\u021bile oper\u0103rii aplica\u021biilor descentralizate, echipa de dezvoltare fiind \u00een Singapore. Nu cere\u021bi Chainstack s\u0103 v\u00e2nd\u0103 sau s\u0103 cumpere criptovalut\u0103, ci propune\u021bi s\u0103 discuta\u021bi despre cadrele blockchain pentru \u00eentreprinderi, iar v\u0103 vor r\u0103spunde cu pl\u0103cere.<\/p>\n<h2>Helm<\/h2>\n<p>\nAcesta este un manager de pachete (charturi) pentru Kubernetes. Cea mai clar\u0103 \u0219i versatil\u0103 modalitate de a aduce aplica\u021bii \u00een clusterul Kubernetes.<\/p>\n<p><img decoding=\"async\" alt=\"Securitatea Helm\" src=\"\/wp-content\/uploads\/2019\/08\/30c0fc1cc1c6ebde97c6e8ec1886ce9f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEste vorba, desigur, de o abordare mai structurat\u0103 \u0219i industrial\u0103 dec\u00e2t crearea propriilor manifesturi YAML \u0219i scrierea unor mici utilitare.<\/p>\n<blockquote><p>Helm este cel mai bun lucru disponibil \u0219i popular \u00een prezent.<\/p><\/blockquote>\n<p>\nDe ce Helm? \u00cen primul r\u00e2nd, pentru c\u0103 este sus\u021binut de CNCF. Cloud Native este o organiza\u021bie mare, care este compania-mam\u0103 pentru proiectele Kubernetes, etcd, Fluentd \u0219i altele.<\/p>\n<p>Un alt fapt important este c\u0103 Helm este un proiect foarte popular. C\u00e2nd \u00een ianuarie 2019 am \u00eenceput s\u0103 m\u0103 g\u00e2ndesc s\u0103 povestesc despre cum s\u0103 fac Helm sigur, proiectul avea o mie de stele pe GitHub. P\u00e2n\u0103 \u00een mai, num\u0103rul lor a ajuns la 12 mii.<\/p>\n<p>Mul\u021bi sunt interesa\u021bi de Helm, a\u0219a c\u0103, chiar dac\u0103 nu \u00eel folose\u0219ti \u00eenc\u0103, cuno\u0219tin\u021bele despre securitatea sa \u00ee\u021bi vor fi utile. <strong>Securitatea este important\u0103.<\/strong><\/p>\n<p>Echipa principal\u0103 a lui Helm este sus\u021binut\u0103 de Microsoft Azure, ceea ce \u00eel face un proiect destul de stabil \u00een compara\u021bie cu multe altele. Lansarea Helm 3 Alpha 2 \u00een mijlocul lunii iulie demonstreaz\u0103 c\u0103 multe persoane lucreaz\u0103 la proiect \u0219i au dorin\u021ba \u0219i resursele necesare pentru a dezvolta \u0219i \u00eembun\u0103t\u0103\u021bi Helm.<\/p>\n<p><img decoding=\"async\" alt=\"Securitatea Helm\" src=\"\/wp-content\/uploads\/2019\/08\/e53c8e64c3cf5eea3fbd9b0095b0f81e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHelm abordeaz\u0103 c\u00e2teva probleme fundamentale \u00een gestionarea aplica\u021biilor \u00een Kubernetes.<\/p>\n<ul>\n<li>\u00cempachetarea aplica\u021biei. Chiar \u0219i un aplica\u021bie de tip \u201eHello, World\u201d pe WordPress reprezint\u0103 deja c\u00e2teva servicii, iar dorin\u021ba este de a le \u00eempacheta \u00eempreun\u0103.<\/li>\n<li>Gestionarea complexit\u0103\u021bii care apare cu managementul acestor aplica\u021bii.<\/li>\n<li>Ciclul de via\u021b\u0103 care nu se \u00eencheie dup\u0103 instalarea sau implementarea aplica\u021biei. Aceasta continu\u0103 s\u0103 existe, trebuie s\u0103 fie actualizat\u0103, iar Helm ajut\u0103 la acest lucru \u0219i se str\u0103duie\u0219te s\u0103 aduc\u0103 m\u0103surile \u0219i politicile corecte pentru gestionarea sa.<\/li>\n<\/ul>\n<p>\n<strong>\u00cempachetare<\/strong> este organizat\u0103 \u00eentr-un mod clar: exist\u0103 metadate conform func\u021bion\u0103rii unui manager de pachete obi\u0219nuit pentru Linux, Windows sau MacOS. Cu alte cuvinte, repository, dependen\u021be de diferite pachete, informa\u021bii meta pentru aplica\u021bii, configur\u0103ri, particularit\u0103\u021bi de configurare, indexarea informa\u021biilor etc. Toate acestea sunt posibile datorit\u0103 lui Helm.<\/p>\n<p><strong>Gestionarea complexit\u0103\u021bii<\/strong>. Dac\u0103 ai multe aplica\u021bii similare, este necesar\u0103 parametrazarea. Din aceasta rezult\u0103 \u0219abloanele, dar pentru a nu inventa o modalitate proprie de a crea \u0219abloane, po\u021bi folosi ce ofer\u0103 Helm din start.<\/p>\n<p><strong>Gestionarea ciclului de via\u021b\u0103 al aplica\u021biei<\/strong> \u2014 din punctul meu de vedere, aceasta este cea mai interesant\u0103 \u0219i nerezolvat\u0103 problem\u0103. Aceasta este motivul pentru care am venit la Helm \u00een trecut. Trebuia s\u0103 monitoriz\u0103m ciclul de via\u021b\u0103 al aplica\u021biei, voiam s\u0103 ne transfer\u0103m CI\/CD-ul \u0219i ciclurile aplica\u021biilor \u00een aceast\u0103 paradigm\u0103.<\/p>\n<p>Helm permite:<\/p>\n<ul>\n<li>gestionarea implement\u0103rilor, introduce conceptul de configura\u021bie \u0219i revizuire;<\/li>\n<li>executarea rollback-urilor cu succes;<\/li>\n<li>utilizarea hook-urilor pentru diferite evenimente;<\/li>\n<li>ad\u0103ugarea de verific\u0103ri suplimentare pentru aplica\u021bii \u0219i reac\u021bia la rezultatele acestora.<\/li>\n<\/ul>\n<p>\n\u00cen plus, <strong>Helm are \u201ebaterii\u201d<\/strong> \u2014 o mul\u021bime de lucruri delicioase care pot fi incluse sub form\u0103 de plugin-uri, simplific\u00e2ndu-\u021bi via\u021ba. Plugin-urile pot fi scrise de tine \u00eensu\u021bi, sunt destul de izolate \u0219i nu necesit\u0103 o arhitectur\u0103 complex\u0103. Dac\u0103 vrei s\u0103 realizezi ceva, \u00ee\u021bi recomand s\u0103 o faci sub form\u0103 de plugin, iar apoi, poate, s\u0103-l incluzi \u00een upstream.<\/p>\n<p>Helm se bazeaz\u0103 pe trei concepte fundamentale:<\/p>\n<ul>\n<li><strong>Chart Repo<\/strong> \u2014 o descriere \u0219i un set de parametrii posibili pentru manifestul t\u0103u.\u00a0<\/li>\n<li><strong>Configura\u021bie<\/strong> \u2014 adic\u0103 valorile care vor fi aplicate (text, valori numerice etc.).<\/li>\n<li><strong>Release<\/strong> reune\u0219te cele dou\u0103 componente de sus, iar \u00eempreun\u0103 acestea devin un Release. Releas-urile pot fi versiune, ob\u021bin\u00e2nd astfel organizarea ciclului de via\u021b\u0103: mic la momentul instal\u0103rii \u0219i mare la momentul upgrade-ului, downgrade-ului sau rollback-ului.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Arhitectura Helm<\/h2>\n<p>\n\u00cen schem\u0103 este reflectat\u0103 arhitectura de \u00eenalt nivel a Helm.<\/p>\n<p><img decoding=\"async\" alt=\"Securitatea Helm\" src=\"\/wp-content\/uploads\/2019\/08\/c5cf54890682a3d6ca7a45021b5006a1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAmintesc c\u0103 Helm este legat de Kubernetes. De aceea, nu putem s\u0103 ne descurc\u0103m f\u0103r\u0103 un cluster Kubernetes (dreptunghiul). Componenta kube-apiserver se afl\u0103 pe master. F\u0103r\u0103 Helm, avem Kubeconfig. Helm aduce un mic binar, dac\u0103 pot s\u0103-l numesc a\u0219a, utilitar Helm CLI, care se instaleaz\u0103 pe computer, laptop, mainframe \u2014 pe orice.<\/p>\n<p>Dar aceasta nu este suficient. Helm are un component server numit Tiller. El reprezint\u0103 interesele Helm \u00een interiorul cluster-ului, fiind o aplica\u021bie \u00een interiorul cluster-ului Kubernetes, la fel ca oricare alta.<\/p>\n<p>Urm\u0103toarea component\u0103 Chart Repo este un repository cu chart-uri. Exist\u0103 un repository oficial, iar poate exista un repository privat al unei companii sau proiect.<\/p>\n<h3>Interac\u021biune<\/h3>\n<p>\nS\u0103 examin\u0103m cum interac\u021bioneaz\u0103 componentele arhitecturii atunci c\u00e2nd dorim s\u0103 instal\u0103m o aplica\u021bie folosind Helm.<\/p>\n<ul>\n<li>Spunem <code>Helm install<\/code>, ne adres\u0103m repository-ului (Chart Repo) \u0219i primim Helm chart-ul.<\/li>\n<\/ul>\n<p><\/p>\n<ul>\n<li>Utilitarul Helm (Helm CLI) interac\u021bioneaz\u0103 cu Kubeconfig pentru a determina la ce cluster s\u0103 se adreseze.\u00a0<\/li>\n<li>Ob\u021bin\u00e2nd aceast\u0103 informa\u021bie, utilitarul se adreseaz\u0103 lui Tiller, care se afl\u0103 \u00een cluster-ul nostru, ca la o aplica\u021bie.\u00a0<\/li>\n<li>Tiller se adreseaz\u0103 lui Kube-apiserver pentru a efectua ac\u021biuni \u00een Kubernetes, pentru a crea anumite obiecte (servicii, pod-uri, replici, secrete etc.).<\/li>\n<\/ul>\n<p>\nApoi vom complica schema pentru a vedea vectorul de atacuri la care poate fi expus\u0103 \u00eentreaga arhitectur\u0103 Helm. Apoi, vom \u00eencerca s\u0103 o protej\u0103m.<\/p>\n<h3>Vectorul de atacuri<\/h3>\n<p>\nPrima poten\u021bial\u0103 sl\u0103biciune \u2014 <strong>API-ul privilegiat<\/strong>\u2014<strong>utilizator<\/strong>\u00cen cadrul schemei, acesta este un hacker care a ob\u021binut acces administrativ la Helm CLI.<\/p>\n<p><strong>Utilizator API neprioritar<\/strong> poate reprezenta, de asemenea, un pericol, dac\u0103 se afl\u0103 \u00een apropiere. Acest utilizator va avea un alt context, de exemplu, poate fi fixat \u00eentr-un anumit namespace al cluster-ului \u00een set\u0103rile Kubeconfig.<\/p>\n<p>Cea mai interesant\u0103 vector de atac poate fi procesul care se afl\u0103 \u00een cluster undeva aproape de Tiller \u0219i poate comunica cu acesta. Acesta poate fi un server web sau un microserviciu care vede mediul de re\u021bea al cluster-ului.<\/p>\n<p>O variant\u0103 exotic\u0103, dar \u00een cre\u0219tere, a atacului este legat\u0103 de Chart Repo. Un chart creat de un autor r\u0103u inten\u021bionat poate con\u021bine resurse nesigure, iar tu le vei executa, av\u00e2nd \u00eencredere \u00een ele. Sau acesta poate \u00eenlocui chart-ul pe care \u00eel descarci din depozitul oficial \u0219i, de exemplu, poate crea o resurs\u0103 sub form\u0103 de politici \u0219i astfel s\u0103 \u00ee\u0219i escaladeze accesul.<\/p>\n<p><img decoding=\"async\" alt=\"Securitatea Helm\" src=\"\/wp-content\/uploads\/2019\/08\/2828046feb9ba8413a1b0e8741b4c354.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nS\u0103 \u00eencerc\u0103m s\u0103 ne ap\u0103r\u0103m de atacuri din cele patru p\u0103r\u021bi \u0219i s\u0103 analiz\u0103m unde sunt probleme \u00een arhitectura Helm \u0219i unde, posibil, nu sunt.<\/p>\n<p>S\u0103 extindem schema, s\u0103 ad\u0103ug\u0103m mai multe elemente, dar s\u0103 p\u0103str\u0103m toate componentele de baz\u0103.<\/p>\n<p><img decoding=\"async\" alt=\"Securitatea Helm\" src=\"\/wp-content\/uploads\/2019\/08\/4110898e79619b8546408c668c48da0d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHelm CLI comunic\u0103 cu Chart Repo, interac\u021bioneaz\u0103 cu Kubeconfig, iar munca este transmis\u0103 \u00een cluster c\u0103tre componenta Tiller.<\/p>\n<p>Tiller este reprezentat de dou\u0103 obiecte:<\/p>\n<ul>\n<li>Serviciul Tiller-deploy, care expune un anumit serviciu;<\/li>\n<li>Pod-ul Tiller-deploy (\u00een schema, \u00eentr-un singur exemplar \u00eentr-o replic\u0103), pe care ruleaz\u0103 \u00eentreaga sarcin\u0103 \u0219i care comunic\u0103 cu cluster-ul.<\/li>\n<\/ul>\n<p>\nSe folosesc diferite protocoale \u0219i scheme pentru interac\u021biune. Din perspectiva securit\u0103\u021bii, cel mai interesant pentru noi este:<\/p>\n<ul>\n<li>Mecanismul prin care Helm CLI acceseaz\u0103 chart repo: ce protocol, exist\u0103 autentificare \u0219i ce se poate face \u00een aceast\u0103 privin\u021b\u0103.<\/li>\n<li>Protocolul prin care Helm CLI, folosind kubectl, comunic\u0103 cu Tiller. Acesta este un server RPC, instalat \u00een interiorul cluster-ului.<\/li>\n<li>Tiller \u00eensu\u0219i este accesibil pentru microserviciile care se afl\u0103 \u00een cluster \u0219i interac\u021bioneaz\u0103 cu Kube-apiserver.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Securitatea Helm\" src=\"\/wp-content\/uploads\/2019\/08\/19e7e085567f3bbb49746e6402926bd6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nS\u0103 discut\u0103m toate aceste direc\u021bii \u00een ordine.<\/p>\n<h2>RBAC<\/h2>\n<p><\/p>\n<blockquote><p>Este inutil s\u0103 discut\u0103m despre vreo securitate a Helm sau a altui serviciu din cluster, dac\u0103 RBAC nu este activat.<\/p><\/blockquote>\n<p>\nSe pare c\u0103 nu este cea mai nou\u0103 recomandare, dar sunt sigur c\u0103 mul\u021bi nu au activat \u00eenc\u0103 RBAC chiar \u0219i \u00een produc\u021bie, deoarece este complicat \u0219i necesit\u0103 multe configura\u021bii. Cu toate acestea, v\u0103 \u00eendemn s\u0103 o face\u021bi.<\/p>\n<p><img decoding=\"async\" alt=\"Securitatea Helm\" src=\"\/wp-content\/uploads\/2019\/08\/37ee8aeb2b331b75ea5569c0b114a756.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/rbac.dev\/\">https:\/\/rbac.dev\/<\/a><\/noindex> \u2014 site avocat pentru RBAC. Aici este adunat\u0103 o mul\u021bime de materiale interesante care te vor ajuta s\u0103 configurezi RBAC, \u00ee\u021bi vor ar\u0103ta de ce este bun \u0219i cum s\u0103 tr\u0103ie\u0219ti cu el \u00een produc\u021bie.<\/p>\n<p>Voi \u00eencerca s\u0103 explic cum func\u021bioneaz\u0103 Tiller \u0219i RBAC. Tiller lucreaz\u0103 \u00een interiorul clusterului sub un anumit cont de serviciu. De obicei, dac\u0103 RBAC nu este configurat, acesta va fi superutilizator. \u00cen configura\u021bia de baz\u0103, Tiller va fi administrator. De aceea, se spune adesea c\u0103 Tiller este un tunel SSH c\u0103tre clusterul t\u0103u. \u00cen realitate, a\u0219a este, a\u0219a c\u0103 po\u021bi folosi un cont de serviciu specializat \u00een loc de Default Service Account \u00een schema de mai sus.<\/p>\n<p>C\u00e2nd ini\u021bializezi Helm, instal\u00e2ndu-l pentru prima dat\u0103 pe server, po\u021bi specifica contul de serviciu folosind <code>--service-account<\/code>. Acest lucru va permite utilizarea unui utilizator cu setul minim necesar de permisiuni. Cu toate acestea, va trebui s\u0103 creezi o astfel de \u201eghirland\u0103\u201d: Role \u0219i RoleBinding.<\/p>\n<p><img decoding=\"async\" alt=\"Securitatea Helm\" src=\"\/wp-content\/uploads\/2019\/08\/ec805cde756495cfd5c480ac40739c43.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDin p\u0103cate, Helm nu va face acest lucru pentru tine. Fie tu, fie administratorul Kubernetes al clusterului trebuie s\u0103 preg\u0103ti\u021bi \u00een prealabil un set de Role, RoleBinding pentru contul de serviciu pentru a-l transmite Helm.<\/p>\n<p>Se ridic\u0103 \u00eentrebarea \u2014 care este diferen\u021ba dintre Role \u0219i ClusterRole? Diferen\u021ba este c\u0103 ClusterRole ac\u021bioneaz\u0103 pentru toate namespace-urile, spre deosebire de rolurile \u0219i RoleBinding-urile obi\u0219nuite, care func\u021bioneaz\u0103 doar pentru un namespace specializat. Po\u021bi configura politici at\u00e2t pentru \u00eentregul cluster \u0219i toate namespace-urile, c\u00e2t \u0219i personalizate pentru fiecare namespace \u00een parte.<\/p>\n<p>Merit\u0103 men\u021bionat c\u0103 RBAC rezolv\u0103 \u0219i o alt\u0103 problem\u0103 major\u0103. Mul\u021bi se pl\u00e2ng c\u0103 Helm, din p\u0103cate, nu este multitenant (nu suport\u0103 multi-arendare). Dac\u0103 mai multe echipe consum\u0103 clusterul \u0219i folosesc Helm, este imposibil s\u0103 configur\u0103m politicile \u0219i s\u0103 delimit\u0103m accesul lor \u00een cadrul acestui cluster, deoarece exist\u0103 un anumit cont de serviciu din care func\u021bioneaz\u0103 Helm, \u0219i acesta creeaz\u0103 toate resursele \u00een cluster din acest cont, ceea ce uneori este foarte inconvenient. A\u0219a este \u2014 ca fi\u0219ierul binar \u00een sine, ca proces, <strong>Helm Tiller nu are no\u021biunea de multitenancy.<\/strong>.<\/p>\n<p>Cu toate acestea, exist\u0103 o modalitate minunat\u0103 care permite s\u0103 lansezi Tiller \u00een cluster de mai multe ori. Cu aceasta nu sunt probleme, Tiller poate fi lansat \u00een fiecare namespace. Astfel, po\u021bi profita de RBAC, Kubeconfig ca pe un context \u0219i s\u0103 limitezi accesul la Helm specializat.<\/p>\n<p>Asta va ar\u0103ta astfel.<\/p>\n<p><img decoding=\"async\" alt=\"Securitatea Helm\" src=\"\/wp-content\/uploads\/2019\/08\/eae922c7b5e1422fb51667364ed79e0a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDe exemplu, exist\u0103 dou\u0103 Kubeconfig cu context pentru echipe diferite (dou\u0103 namespace): Echipa X pentru echipa de dezvoltare \u0219i clusterul de admin. Clusterul de admin are un Tiller mai larg, care se afl\u0103 \u00een spa\u021biul Kube-system namespace, av\u00e2nd astfel un service-account avansat. \u0218i un namespace separat pentru echipa de dezvoltare, ei vor putea s\u0103 \u00ee\u0219i desf\u0103\u0219oare serviciile \u00een namespace-ul special.<\/p>\n<p>Aceasta este o abordare viabil\u0103, Tiller nu este at\u00e2t de consumator pentru a afecta semnificativ bugetul dumneavoastr\u0103. Este una dintre solu\u021biile rapide.<\/p>\n<blockquote><p>Nu ezita\u021bi s\u0103 configura\u021bi separat Tiller \u0219i s\u0103 furniza\u021bi Kubeconfig cu context pentru echip\u0103, pentru un anumit dezvoltator sau pentru mediu: Dev, Staging, Production (este pu\u021bin probabil ca toate s\u0103 fie pe un singur cluster, dar se poate face a\u0219a).<\/p><\/blockquote>\n<p>\nContinu\u00e2nd povestea noastr\u0103, vom schimba subiectul de la RBAC \u0219i vom vorbi despre ConfigMaps.<\/p>\n<h3>ConfigMaps<\/h3>\n<p>\nHelm folose\u0219te ConfigMaps ca depozit de date. C\u00e2nd am vorbit despre arhitectur\u0103, nu exista o baz\u0103 de date \u00een care s\u0103 fie stocate informa\u021biile despre eliber\u0103ri, configura\u021bii, rollbacks etc. Pentru aceasta se folosesc ConfigMaps.<\/p>\n<p>Problema principal\u0103 cu ConfigMaps este bine cunoscut\u0103 \u2014 ele sunt nesigure \u00een principiu, \u00een ele <strong>nu este posibil s\u0103 stochezi date sensibile<\/strong>. Este vorba despre tot ce nu ar trebui s\u0103 ias\u0103 din serviciu, de exemplu, parolele. Cea mai nativ\u0103 metod\u0103 pentru Helm acum este trecerea de la utilizarea ConfigMaps la secrete.<\/p>\n<p>Se face foarte simplu. Suprascrie\u021bi configura\u021bia Tiller \u0219i specifica\u021bi c\u0103 depozitul va fi secretele. Atunci, pentru fiecare desf\u0103\u0219urare ve\u021bi primi nu ConfigMap, ci un secret.<\/p>\n<p><img decoding=\"async\" alt=\"Securitatea Helm\" src=\"\/wp-content\/uploads\/2019\/08\/7fd12bfbed5c6c8111a5126c2ab9f853.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPute\u021bi obiecta c\u0103 secretele \u00een sine sunt o conceptie ciudat\u0103 \u0219i c\u0103 nu este foarte sigur. Totu\u0219i, trebuie s\u0103 \u00een\u021belege\u021bi c\u0103 acest lucru este gestionat de dezvoltatorii Kubernetes. \u00cencep\u00e2nd cu versiunea 1.10, adic\u0103 de ceva vreme, exist\u0103 posibilitatea, cel pu\u021bin \u00een cloudurile publice, de a conecta depozitul corect pentru stocarea secretelor. Acum, echipa lucreaz\u0103 pentru a distribui mai bine accesul la secrete, anumitor poduri sau alte entit\u0103\u021bi.<\/p>\n<blockquote><p>Storage Helm ar trebui s\u0103 treac\u0103 la secrete, iar acestea, la r\u00e2ndul lor, s\u0103 fie centralizate \u00een siguran\u021b\u0103.<\/p><\/blockquote>\n<p>\nDesigur, va r\u0103m\u00e2ne <strong>o limit\u0103 pentru stocarea datelor de 1 MB<\/strong>. Helm folose\u0219te etcd ca stocare distribuit\u0103 pentru ConfigMaps. Acolo s-a considerat c\u0103 acesta este un chunk de date potrivit pentru replicare \u0219i altele. Exist\u0103 o discu\u021bie interesant\u0103 pe Reddit despre acest subiect, recomand s\u0103 g\u0103si\u021bi aceast\u0103 lectur\u0103 amuzant\u0103 pentru weekend sau s\u0103 citi\u021bi un rezumat. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/helm\/helm\/issues\/1413\">aici<\/a><\/noindex>.<\/p>\n<h3>Repo-uri Chart<\/h3>\n<p>\nChardele sunt cele mai vulnerabile social \u0219i pot deveni surs\u0103 de 'Man in the middle', mai ales dac\u0103 se folose\u0219te o solu\u021bie standard. \u00cen primul r\u00e2nd, este vorba despre repozitoarele care sunt expuse prin HTTP.<\/p>\n<blockquote><p>Cu siguran\u021b\u0103, trebuie s\u0103 expune\u021bi Helm Repo prin HTTPS \u2014 aceasta este cea mai bun\u0103 op\u021biune \u0219i cost\u0103 pu\u021bin.<\/p><\/blockquote>\n<p>\nRe\u021bine\u021bi c\u0103 <strong>mecanismul de semn\u0103tur\u0103 pentru charturi<\/strong>. Tehnologia este incredibil de simpl\u0103. Este exact ceea ce folosi\u021bi pe GitHub, o ma\u0219in\u0103rie PGP obi\u0219nuit\u0103 cu chei publice \u0219i private. Configura\u021bi \u0219i ve\u021bi fi siguri, av\u00e2nd cheile necesare \u0219i semn\u00e2nd tot ceea ce este cu adev\u0103rat chartul vostru.<\/p>\n<p>\u00cen plus, <strong>Clientul Helm suport\u0103 TLS<\/strong> (nu \u00een sensul HTTP de pe server, ci TLS mutual). Pute\u021bi folosi cheile de server \u0219i client pentru a comunica. Voi fi sincer, nu folosesc acest mecanism din cauza nepl\u0103cerii mele fa\u021b\u0103 de certificatele mutuale. \u00cen principiu, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/helm\/chartmuseum\">chartmuseum<\/a><\/noindex> \u2014 instrumentul principal pentru expunerea Helm Repo pentru Helm 2 \u2014 suport\u0103 \u0219i autentificarea de baz\u0103. Poate fi folosit\u0103 autentificarea de baz\u0103, dac\u0103 este mai convenabil \u0219i mai lini\u0219titor.<\/p>\n<p>Mai este un plugin <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/hayorov\/helm-gcs\">helm-gcs<\/a><\/noindex>, care permite plasarea Repo-urilor Chart \u00een Google Cloud Storage. Este foarte convenabil, func\u021bioneaz\u0103 excelent \u0219i este suficient de sigur, deoarece sunt eliminate toate mecanismele descrise.<\/p>\n<p><img decoding=\"async\" alt=\"Securitatea Helm\" src=\"\/wp-content\/uploads\/2019\/08\/6a72bfd96c7eb0e2fdd7bcbf128e6433.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDac\u0103 activa\u021bi HTTPS sau TLS, folosi\u021bi mTLS, activa\u021bi autentificarea de baz\u0103 pentru a reduce riscurile, va rezulta un canal sigur de comunicare \u00eentre Helm CLI \u0219i Chart Repo.<\/p>\n<h3>API gRPC<\/h3>\n<p>\nUrm\u0103torul pas este foarte responsabil \u2014 securizarea Tiller, care se afl\u0103 \u00een cluster \u0219i care, pe de o parte, este server, iar pe de alt\u0103 parte \u2014 se adreseaz\u0103 altor componente \u0219i \u00eencearc\u0103 s\u0103 se prezinte ca altcineva.<\/p>\n<p>A\u0219a cum am spus, Tiller este un serviciu care expune gRPC, clientul Helm se conecteaz\u0103 la el prin gRPC. \u00cen mod implicit, evident, TLS este dezactivat. De ce este f\u0103cut acest lucru \u2014 este o \u00eentrebare de dezbatere, mi se pare c\u0103 este pentru a simplifica configurarea la \u00eenceput.<\/p>\n<blockquote><p>Pentru productie \u0219i chiar pentru staging, recomand activarea TLS pe gRPC.<\/p><\/blockquote>\n<p>\nDup\u0103 p\u0103rerea mea, spre deosebire de mTLS pentru grafice, aici este adecvat \u0219i se realizeaz\u0103 foarte simplu \u2014 genera\u021bi infrastructura PQI, crea\u021bi un certificat, porni\u021bi Tiller, transmite\u021bi certificatul \u00een timpul ini\u021bializ\u0103rii. Dup\u0103 aceasta, pute\u021bi executa toate comenzile Helm, prezent\u00e2ndu-v\u0103 cu certificatul generat \u0219i cheia privat\u0103.<\/p>\n<p><img decoding=\"async\" alt=\"Securitatea Helm\" src=\"\/wp-content\/uploads\/2019\/08\/ed55b9a465ed1278b272c52c90b2b345.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAstfel, v\u0103 ve\u021bi proteja de toate cererile c\u0103tre Tiller din afara cluster-ului.<\/p>\n<p>Deci, am securizat canalul de conectare la Tiller, am discutat deja despre RBAC \u0219i am ajustat permisiunile Kubernetes apiserver, reduc\u00e2nd domeniul cu care acesta poate interac\u021biona.<\/p>\n<h2>Helm securizat<\/h2>\n<p>\nS\u0103 ne uit\u0103m la schema final\u0103. Aceasta este aceea\u0219i arhitectur\u0103 cu acelea\u0219i s\u0103ge\u021bi.<\/p>\n<p><img decoding=\"async\" alt=\"Securitatea Helm\" src=\"\/wp-content\/uploads\/2019\/08\/6672e254ad93b917f57794e1619a572e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nToate conexiunile pot fi acum desenate \u00een verde:<\/p>\n<ul>\n<li>pentru Chart Repo folosim TLS sau mTLS \u0219i autentificare basic;<\/li>\n<li>mTLS pentru Tiller, care este expus ca serviciu gRPC cu TLS, folosim certificate;<\/li>\n<li>\u00een cluster se folose\u0219te un cont de serviciu special cu Rol \u0219i RoleBinding.\u00a0<\/li>\n<\/ul>\n<p>\nAm securizat considerabil cluster-ul, dar cineva de\u0219tept a spus:<\/p>\n<blockquote><p>\u201eSingura solu\u021bie complet sigur\u0103 poate fi unul \u2014 un computer oprit, care se afl\u0103 \u00eentr-o cutie de beton \u0219i este p\u0103zit de solda\u021bi\u201d.<\/p><\/blockquote>\n<p>\nExist\u0103 diferite metode de manipulare a datelor \u0219i g\u0103sirea de noi vectori de atac. Cu toate acestea, sunt sigur c\u0103 aceste recomand\u0103ri vor permite implementarea unui standard de baz\u0103 de securitate industrial\u0103.<\/p>\n<h2>Bonus<\/h2>\n<p>\nAceast\u0103 parte nu se refer\u0103 direct la securitate, dar va fi totu\u0219i util\u0103. Voi ar\u0103ta c\u00e2teva lucruri interesante despre care pu\u021bini \u0219tiu. De exemplu, cum s\u0103 c\u0103uta\u021bi grafice \u2014 oficiale \u0219i neoficiale.<\/p>\n<p>\u00cen repository <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/helm\/charts\">github.com\/helm\/charts<\/a><\/noindex> acum sunt aproximativ 300 de grafice \u0219i dou\u0103 fluxuri: stable \u0219i incubator. Cei care contribuie \u0219tiu foarte bine c\u00e2t de greu este s\u0103 treci din incubator \u00een stable \u0219i c\u00e2t de u\u0219or este s\u0103 ie\u0219i din stable. Cu toate acestea, acesta nu este cel mai bun instrument pentru a c\u0103uta grafice pentru Prometheus \u0219i tot ce v\u0103 place, dintr-un motiv simplu \u2014 nu este un portal unde s\u0103 c\u0103uta\u021bi comod pachete.<\/p>\n<p>Dar exist\u0103 un serviciu <noindex><a rel=\"nofollow\" href=\"https:\/\/hub.helm.sh\/\">hub.helm.sh<\/a><\/noindex>, cu ajutorul c\u0103ruia g\u0103sirea graficelor este mult mai comod\u0103. Cel mai important, acolo sunt mult mai multe repozitoare externe \u0219i sunt disponibile aproape 800 de grafice. \u00cen plus, pute\u021bi conecta propriul vostru repozitoriu, dac\u0103 din diverse motive nu dori\u021bi s\u0103 trimite\u021bi graficele voastre \u00een stable.<\/p>\n<p>\u00cencerca\u021bi hub.helm.sh \u0219i s\u0103-l dezvolt\u0103m \u00eempreun\u0103. Acest serviciu este sub proiectul Helm, \u0219i pute\u021bi contribui chiar \u0219i la UI-ul s\u0103u, dac\u0103 sunte\u021bi frontender \u0219i dori\u021bi doar s\u0103 \u00eembun\u0103t\u0103\u021bi\u021bi aspectul.<\/p>\n<p>Vreau s\u0103 v\u0103 atrag aten\u021bia asupra <strong>integrarea Open Service Broker API<\/strong>. Pare complicat \u0219i neclar, dar rezolv\u0103 problemele pe care to\u021bi le \u00eent\u00e2mpin\u0103. Voi explica cu un exemplu simplu.<\/p>\n<p><img decoding=\"async\" alt=\"Securitatea Helm\" src=\"\/wp-content\/uploads\/2019\/08\/3aeb7e0781e50a79b518f1056873f73a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nExist\u0103 un cluster Kubernetes \u00een care dorim s\u0103 lans\u0103m o aplica\u021bie clasic\u0103 \u2014 WordPress. De obicei, pentru o func\u021bionalitate complet\u0103, este nevoie de o baz\u0103 de date. Exist\u0103 multe solu\u021bii diferite, de exemplu, po\u021bi lansa propriul serviciu stateful. Nu este foarte convenabil, dar mul\u021bi fac a\u0219a.<\/p>\n<p>Al\u021bii, cum ar fi noi la Chainstack, folosesc baze de date gestionate, cum ar fi MySQL sau PostgreSQL, pentru servere. Prin urmare, baza noastr\u0103 de date se afl\u0103 undeva \u00een cloud.<\/p>\n<p>Dar apare problema: trebuie s\u0103 conect\u0103m serviciul nostru la baza de date, s\u0103 cre\u0103m flavorul bazei de date, s\u0103 transmitem credentialele \u0219i s\u0103 le gestion\u0103m. Toate acestea se fac de obicei manual de c\u0103tre un administrator de sistem sau un dezvoltator. Nu este nicio problem\u0103 c\u00e2nd sunt pu\u021bine aplica\u021bii. C\u00e2nd sunt multe, ai nevoie de un combinaator. Exist\u0103 un astfel de combinaator \u2014 acesta este Service Broker. Acesta permite utilizarea unui plugin special pentru clusterul cloud public \u0219i comanda resurselor de la provider prin Broker, de parc\u0103 ar fi un API. Pentru aceasta, se pot utiliza mijloacele native Kubernetes.<\/p>\n<p>Este foarte simplu. Po\u021bi solicita, de exemplu, Managed MySQL \u00een Azure cu un tier de baz\u0103 (acesta poate fi configurat). Folosind API Azure, baza va fi creat\u0103 \u0219i preg\u0103tit\u0103 pentru utilizare. Nu va trebui s\u0103 te implici, pluginul se ocup\u0103 de asta. De exemplu, OSBA (pluginul Azure) va returna credentialele \u00een serviciu \u0219i le va transmite prin Helm. Vei putea folosi WordPress cu MySQL \u00een cloud, f\u0103r\u0103 s\u0103 te ocupi de baze de date gestionate \u0219i f\u0103r\u0103 griji legate de serviciile stateful.<\/p>\n<blockquote><p>Se poate spune c\u0103 Helm este lipiciul care, pe de o parte, permite desf\u0103\u0219urarea serviciilor, iar pe de alt\u0103 parte, consumarea resurselor furnizorilor de cloud.<\/p><\/blockquote>\n<p>\nPo\u021bi scrie propriul plugin \u0219i folosi \u00eentreaga istorie on-premise. Atunci vei avea pur \u0219i simplu propriul plugin pentru providerul t\u0103u de Cloud corporativ. \u00ce\u021bi recomand s\u0103 \u00eencerci aceast\u0103 abordare, mai ales dac\u0103 ai o scala mare \u0219i vrei s\u0103 desf\u0103\u0219ori rapid dev, staging sau \u00eentreaga infrastructur\u0103 pentru o func\u021bionalitate. Asta va simplifica via\u021ba opera\u021biunilor tale sau DevOps.<\/p>\n<p>O alt\u0103 descoperire, pe care am men\u021bionat-o deja \u2014 este <strong>pluginul helm-gcs<\/strong>, care permite utilizarea Google-buckets (stocare obiect) pentru a stoca graficele Helm.<\/p>\n<p><img decoding=\"async\" alt=\"Securitatea Helm\" src=\"\/wp-content\/uploads\/2019\/08\/30888c4f9b5dba14b87ba1e29e0ebed7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00ce\u021bi trebuie doar patru comenzi pentru a \u00eencepe s\u0103-l folose\u0219ti:<\/p>\n<ol>\n<li>instaleaz\u0103 pluginul;<\/li>\n<li>ini\u021biaz\u0103-l;<\/li>\n<li>stabili\u021bi calea c\u0103tre bucket-ul aflat \u00een gcp;<\/li>\n<li>publica\u021bi graficele \u00een mod standard.<\/li>\n<\/ol>\n<p>\nFrumuse\u021bea este c\u0103 se va folosi metoda nativ\u0103 gcp pentru autorizare. Pute\u021bi utiliza un cont de serviciu, un cont de dezvoltator \u2014 orice dori\u021bi. Este foarte convenabil \u0219i nu are costuri de operare. Dac\u0103, la fel ca mine, promova\u021bi filosofia f\u0103r\u0103 opera\u021biuni, atunci va fi foarte convenabil, mai ales pentru echipe mici.<\/p>\n<h2>Alternative<\/h2>\n<p>\nHelm nu este singura solu\u021bie pentru gestionarea serviciilor. Exist\u0103 multe \u00eentreb\u0103ri legate de el, probabil de aceea a ap\u0103rut at\u00e2t de repede versiunea a treia. Desigur, exist\u0103 alternative.<\/p>\n<p>Acestea pot fi solu\u021bii specializate, cum ar fi Ksonnet sau Metaparticle. Pute\u021bi folosi instrumentele clasice de gestionare a infrastructurii (Ansible, Terraform, Chef etc.) pentru acelea\u0219i scopuri despre care am vorbit.<\/p>\n<p>\u00cen final, exist\u0103 o solu\u021bie <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/operator-framework\">Operator Framework<\/a><\/noindex>, popularitatea c\u0103reia este \u00een cre\u0219tere.<\/p>\n<blockquote><p>Operator Framework este principala alternativ\u0103 la Helm, la care ar trebui s\u0103 fi\u021bi aten\u021bi.<\/p><\/blockquote>\n<p>\nEste mai nativ pentru CNCF \u0219i Kubernetes, <strong>dar pragul de intrare este mult mai mare<\/strong>, trebuie s\u0103 programa\u021bi mai mult \u0219i s\u0103 descrie\u021bi mai pu\u021bin manifestele.<\/p>\n<p>Exist\u0103 diverse addon-uri, cum ar fi Draft, Scaffold. Acestea simplific\u0103 foarte mult via\u021ba, de exemplu, dezvoltatorilor, facilit\u00e2nd ciclul de trimitere \u0219i lansare a Helm pentru desf\u0103\u0219urarea unui mediu de testare. Le-a\u0219 numi extensii de capacitate.<\/p>\n<p>Iat\u0103 un grafic ilustrativ despre unde se afl\u0103 fiecare.<\/p>\n<p><img decoding=\"async\" alt=\"Securitatea Helm\" src=\"\/wp-content\/uploads\/2019\/08\/81a8236c975d5e1649acaaa7989c27ba.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPe axa orizontal\u0103 este nivelul controlului personal asupra a ceea ce se \u00eent\u00e2mpl\u0103, pe axa vertical\u0103 \u2014 nivelul de nativitate Kubernetes. Helm versiunea 2 se afl\u0103 undeva la mijloc. \u00cen versiunea 3, nu exist\u0103 o diferen\u021b\u0103 colosal\u0103, dar at\u00e2t controlul, c\u00e2t \u0219i nivelul de nativitate au fost \u00eembun\u0103t\u0103\u021bite. Solu\u021biile de nivel Ksonnet totu\u0219i nu se ridic\u0103 la nivelul Helm 2. Cu toate acestea, merit\u0103 s\u0103 arunca\u021bi o privire asupra lor pentru a \u0219ti ce mai exist\u0103 \u00een aceast\u0103 lume. Desigur, managerul dumneavoastr\u0103 de configura\u021bie va fi sub controlul dumneavoastr\u0103, dar nu este deloc nativ pentru Kubernetes.<\/p>\n<p>Operator Framework este complet nativ pentru Kubernetes \u0219i permite gestionarea acestuia mult mai elegant \u0219i meticulos (dar s\u0103 ne amintim de nivelul de intrare). Mai degrab\u0103, acesta este potrivit pentru aplica\u021bii specializate \u0219i crearea unei gestiuni pentru acestea, dec\u00e2t pentru o ma\u0219in\u0103 masiv\u0103 de ambalare a unui num\u0103r mare de aplica\u021bii cu ajutorul Helm.<\/p>\n<p>Extensiile pur \u0219i simplu \u00eembun\u0103t\u0103\u021besc pu\u021bin controlul, completeaz\u0103 fluxul de lucru sau scurteaz\u0103 col\u021burile pipeline-urilor CI\/CD.<\/p>\n<h2>Viitorul Helm<\/h2>\n<p>\nVestea bun\u0103 este c\u0103 Helm 3 este aici. A fost lansat\u0103 versiunea alfa a Helm 3.0.0-alpha.2, care poate fi \u00eencercat\u0103. Este destul de stabil, dar func\u021bionalitatea este \u00eenc\u0103 limitat\u0103.<\/p>\n<p>De ce este necesar Helm 3? \u00cen primul r\u00e2nd, este vorba despre <strong>dispari\u021bia Tiller<\/strong>, a\u0219a cum a\u021bi \u00een\u021beles, un pas uria\u0219 \u00eenainte, deoarece din punct de vedere al securit\u0103\u021bii arhitecturii, totul devine mai simplu.<\/p>\n<p>C\u00e2nd a fost creat Helm 2, iar asta s-a \u00eent\u00e2mplat pe vremea Kubernetes 1.8 sau chiar mai devreme, multe concepte erau imature. De exemplu, conceptul CRD este acum activ implementat, iar Helm va <strong>utiliza CRD<\/strong>, pentru a stoca structuri. Va fi posibil s\u0103 utiliza\u021bi doar clientul \u0219i s\u0103 nu mai ave\u021bi o component\u0103 server. \u00cen consecin\u021b\u0103, ve\u021bi putea utiliza comenzile native Kubernetes pentru a lucra cu structuri \u0219i resurse. Acesta este un pas uria\u0219 \u00eenainte.<\/p>\n<p>Va ap\u0103rea <strong>suport pentru repositoarele native OCI<\/strong> (Open Container Initiative). Aceasta este o ini\u021biativ\u0103 imens\u0103, iar Helm este interesat \u00een principal de a g\u0103zdui graficele sale. Se ajunge la situa\u021bia \u00een care, de exemplu, Docker Hub sus\u021bine multe standarde OCI. Nu vreau s\u0103 m\u0103 gr\u0103besc, dar este posibil ca furnizorii clasici de repositoare Docker s\u0103 \u00eenceap\u0103 s\u0103 ofere op\u021biunea de a g\u0103zdui grafice Helm.<\/p>\n<p>O poveste controversat\u0103 pentru mine este <strong>suportul pentru Lua<\/strong>, ca motor de \u0219ablonare pentru scrierea scripturilor. Nu sunt un mare fan al Lua, dar aceasta va fi o op\u021biune complet op\u021bional\u0103. Am verificat de trei ori \u2014 utilizarea Lua nu va fi obligatorie. A\u0219adar, cei care doresc pot folosi Lua, iar cei care prefer\u0103 Go \u2014 al\u0103tura\u021bi-v\u0103 taberei noastre mari \u0219i folosi\u021bi go-tmpl pentru asta.<\/p>\n<p>\u00cen sf\u00e2r\u0219it, ceea ce mi-a lipsit cu adev\u0103rat este <strong>apari\u021bia schemei \u0219i validarea tipurilor de date<\/strong>. Nu vor mai exista probleme cu int sau string, nu va mai fi nevoie s\u0103 \u00eenf\u0103\u0219ura\u021bi zero \u00een ghilimele duble. Va ap\u0103rea o schem\u0103 JSONS, care va permite explicit descrierea aceasta pentru values.<\/p>\n<p>Modelul <strong>event-driven va fi complet revizuit<\/strong>. A fost deja descris conceptual. Consulta\u021bi ramura Helm 3 \u0219i ve\u021bi vedea c\u00e2t de multe evenimente, hook-uri \u0219i altele au fost ad\u0103ugate, ceea ce va simplifica foarte mult \u0219i, pe de alt\u0103 parte, va oferi un control mai bun asupra proceselor de desf\u0103\u0219urare \u0219i reac\u021biile acestora.<\/p>\n<p>Helm 3 va fi mai simplu, mai sigur \u0219i mai interesant nu pentru c\u0103 nu ne place Helm 2, ci pentru c\u0103 Kubernetes devine din ce \u00een ce mai avansat. Prin urmare, Helm poate folosi dezvolt\u0103rile Kubernetes pentru a crea manageri excelen\u021bi pentru Kubernetes.<\/p>\n<blockquote><p>O alt\u0103 veste bun\u0103 este c\u0103 <noindex><a rel=\"nofollow\" href=\"https:\/\/devopsconf.io\/moscow\/2019\">DevOpsConf<\/a><\/noindex> Alexandr Ha\u00eforov va vorbi, <noindex><a rel=\"nofollow\" href=\"https:\/\/devopsconf.io\/moscow\/2019\/abstracts\/5564\">dac\u0103 containerele pot fi sigure?<\/a><\/noindex> Reamintim c\u0103 conferin\u021ba privind integrarea proceselor de dezvoltare, testare \u0219i exploatare va avea loc la Moscova <strong>pe 30 septembrie \u0219i 1 octombrie<\/strong>. P\u00e2n\u0103 pe 20 august mai pute\u021bi <noindex><a rel=\"nofollow\" href=\"https:\/\/conf.ontico.ru\/lectures\/propose\/?conference=dc2019-moscow\">trimite un raport<\/a><\/noindex> \u0219i povesti despre experien\u021ba dvs. \u00een rezolvarea <noindex><a rel=\"nofollow\" href=\"https:\/\/devopsconf.io\/moscow\/2019\/articles\/917\">uneia dintre numeroasele<\/a><\/noindex> provoc\u0103ri ale abord\u0103rii DevOps.<\/p>\n<p>Pentru actualiz\u0103ri despre conferin\u021b\u0103 \u0219i \u0219tiri, urm\u0103ri\u021bi-ne pe <noindex><a rel=\"nofollow\" href=\"http:\/\/eepurl.com\/bN_0E1\">newsletter<\/a><\/noindex> \u0219i <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/DevOpsConfChannel\">canalul de telegram<\/a><\/noindex>.<\/p><\/blockquote>\n<p>Sursa: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/oleg-bunin\/blog\/462665\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0421\u0443\u0442\u044c \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430 \u043e \u0441\u0430\u043c\u043e\u043c \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u043d\u043e\u043c \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0435 \u0434\u043b\u044f Kubernetes \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0438\u0437\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044d\u043c\u043e\u0434\u0436\u0438: \u043a\u043e\u0440\u043e\u0431\u043a\u0430 \u2014 \u044d\u0442\u043e Helm (\u044d\u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0435, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u0440\u0435\u043b\u0438\u0437\u0435 Emoji); \u0437\u0430\u043c\u043e\u043a \u2014 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c; \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u043a \u2014 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0436\u0435 \u0434\u0435\u043b\u0435, \u0432\u0441\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0436\u0435\u0447\u043a\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u043f\u043e\u043b\u043e\u043d \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0435\u0439 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c Helm \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u043c. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":27661,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-36918","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0421\u0443\u0442\u044c \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430 \u043e \u0441\u0430\u043c\u043e\u043c \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u043d\u043e\u043c \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0435 \u0434\u043b\u044f Kubernetes \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0438\u0437\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044d\u043c\u043e\u0434\u0436\u0438: \u043a\u043e\u0440\u043e\u0431\u043a\u0430 \u2014 \u044d\u0442\u043e Helm (\u044d\u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0435, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u0440\u0435\u043b\u0438\u0437\u0435 Emoji);.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/bezopasnost-helm\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c Helm | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0421\u0443\u0442\u044c \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430 \u043e \u0441\u0430\u043c\u043e\u043c \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u043d\u043e\u043c \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0435 \u0434\u043b\u044f Kubernetes \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0438\u0437\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044d\u043c\u043e\u0434\u0436\u0438: \u043a\u043e\u0440\u043e\u0431\u043a\u0430 \u2014 \u044d\u0442\u043e Helm (\u044d\u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0435, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u0440\u0435\u043b\u0438\u0437\u0435 Emoji);.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/bezopasnost-helm\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:14:43+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:14:43+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Securitatea Helm | ProHoster","description":"Esenta prezent\u0103rii celui mai popular manager de pachete pentru Kubernetes ar putea fi ilustrat\u0103 cu ajutorul emoji-urilor: cutia \u2013 este Helm (acesta este cel mai potrivit, ce exist\u0103 \u00een ultima versiune Emoji);","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/bezopasnost-helm","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c Helm | ProHoster","og:description":"\u0421\u0443\u0442\u044c \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430 \u043e \u0441\u0430\u043c\u043e\u043c \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u043d\u043e\u043c \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0435 \u0434\u043b\u044f Kubernetes \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0438\u0437\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044d\u043c\u043e\u0434\u0436\u0438: \u043a\u043e\u0440\u043e\u0431\u043a\u0430 \u2014 \u044d\u0442\u043e Helm (\u044d\u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0435, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u0440\u0435\u043b\u0438\u0437\u0435 Emoji);.","og:url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/bezopasnost-helm","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:14:43+00:00","article:modified_time":"2019-10-31T19:14:43+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"36918","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 05:19:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:36:25","updated":"2026-01-22 05:19:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/36918","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=36918"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/36918\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/27661"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=36918"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=36918"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=36918"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}