Huomautus. käännös: Alkuperäisen artikkelin kirjoittaja on Théo Chamley, Google Cloud Solutions -arkkitehti. Tässä Google Cloud -blogin viestissä hän tarjoaa yhteenvedon yrityksensä yksityiskohtaisemmasta oppaasta nimeltä "Parhaat käytännöt säiliöiden käyttöön" Siihen Googlen asiantuntijat keräsivät parhaita käytäntöjä säilöjen käyttämisestä Google Kubernetes Enginen ja muiden toimintojen yhteydessä, ja ne käsittelivät monenlaisia aiheita: turvallisuudesta valvontaan ja kirjaamiseen. Mitkä ovat Googlen tärkeimmät konttikäytännöt?
Kubernetes -moottori(Kubernetes-pohjainen palvelu konttisovellusten suorittamiseen Google Cloudissa - noin käännös) on yksi parhaista tavoista suorittaa skaalautuvia työkuormia. Kubernetes varmistaa useimpien sovellusten moitteettoman toiminnan, jos ne on säiliöissä. Mutta jos haluat, että sovelluksesi on helppo hallita ja haluat saada täyden hyödyn Kubernetesista, sinun on noudatettava parhaita käytäntöjä. Ne yksinkertaistavat sovelluksen toimintaa, sen valvontaa ja virheenkorjausta sekä lisäävät turvallisuutta.
Tässä artikkelissa käymme läpi luettelon asioista, jotka sinun pitäisi tietää ja tehdä, jotta voit käyttää säilöjä tehokkaasti Kubernetesissa. Niiden, jotka haluavat mennä syvemmälle yksityiskohtiin, kannattaa lukea materiaali Parhaat käytännöt säiliöiden käyttöön, ja kiinnitä myös huomiota meidän aikaisempi postaus konttien kokoamisesta.
1. Käytä alkuperäisiä säilön kirjausmekanismeja
Jos sovellus on käynnissä Kubernetes-klusterissa, lokeja ei tarvita paljon. Keskitetty lokijärjestelmä on todennäköisesti jo sisäänrakennettu käyttämääsi klusteriin. Kubernetes Enginen käytön tapauksessa tämä on vastuussa Stackdriver-kirjaus. (Huomautus. käännös: Ja jos käytät omaa Kubernetes-asennustasi, suosittelemme tutustumaan tarkemmin avoimen lähdekoodin ratkaisuumme - hirsimökki.) Pidä elämäsi yksinkertaisena ja käytä alkuperäisiä kontin kirjausmekanismeja. Kirjoita lokit stdout- ja stderr-tiedostoihin - ne vastaanotetaan, tallennetaan ja indeksoidaan automaattisesti.
Halutessasi voit myös kirjoittaa lokeja JSON-muoto. Tämä lähestymistapa helpottaa metatietojen lisäämistä niihin. Ja niiden avulla Stackdriver Logging pystyy hakemaan lokeista näiden metatietojen avulla.
2. Varmista, että säiliöt ovat valtiottomia ja muuttumattomia
Jotta säilöt toimivat oikein Kubernetes-klusterissa, niiden on oltava tilattomia ja muuttumattomia. Kun nämä ehdot täyttyvät, Kubernetes voi tehdä työnsä ja luoda ja tuhota sovelluskokonaisuuksia milloin ja missä sitä tarvitaan.
Muuttumaton tarkoittaa, että säilöä ei muokata sen käyttöiän aikana: ei päivityksiä, korjauksia, konfiguraatiomuutoksia. Jos sinun on päivitettävä sovelluskoodi tai asennettava korjaustiedosto, luo uusi näköistiedosto ja ota se käyttöön. On suositeltavaa siirtää säilön kokoonpano (kuunteluportti, ajonaikaisen ympäristön asetukset jne.) ulkoisesti - kohteeseen Secrets и ConfigMaps. Ne voidaan päivittää ilman, että tarvitsee rakentaa uutta säilökuvaa. Voit helposti luoda liukuhihnat kuvakokoonpanolla käyttämällä Pilvirakennus. (Huomautus. käännös: Käytämme avoimen lähdekoodin työkalua näihin tarkoituksiin DAPP.)
Esimerkki käyttöönottomäärityksen päivittämisestä Kubernetesissa käyttämällä kokoonpanona poddeihin asennettua ConfigMapia
3. Vältä etuoikeutettuja säiliöitä
Et käytä sovelluksia pääkäyttäjänä palvelimillasi, vai mitä? Jos hyökkääjä pääsee sovellukseen, hän saa pääkäyttäjän oikeudet. Samat seikat koskevat etuoikeutettujen säilöjen käyttämättä jättämistä. Jos sinun on muutettava isännän asetuksia, voit määrittää säilökohtaisen kyvyt käyttämällä vaihtoehtoa securityContext Kubernetesissa. Jos sinun on vaihdettava sysctls, Kubernetes on erillinen abstrakti tätä varten. Yleensä yritä saada kaikki irti sen sisällä- ja sivuvaunukontteja vastaavien etuoikeutettujen toimintojen suorittamiseen. Niiden ei tarvitse olla sisäisen tai ulkoisen liikenteen ulottuvilla.
Jos hallinnoit klusteria, voit käyttää Pod-turvakäytäntö etuoikeutettujen säiliöiden käytön rajoituksista.
4. Vältä ajamista pääkäyttäjänä
Etuoikeutetuista säilöistä on jo keskusteltu, mutta on vielä parempi, jos et tämän lisäksi suorita sovelluksia kontin sisällä pääkäyttäjänä. Jos hyökkääjä löytää etähaavoittuvuuden sovelluksesta, jolla on pääkäyttäjän oikeudet ja joka sallii koodin suorittamisen, minkä jälkeen hän voi poistua säilöstä vielä tuntemattoman haavoittuvuuden kautta, hän saa pääkäyttäjän oikeudet isäntään.
Paras tapa välttää tämä on olla suorittamatta mitään pääkäyttäjänä. Voit tehdä tämän käyttämällä direktiiviä USER в Dockerfile tai runAsUser Kubernetesissa. Klusterin järjestelmänvalvoja voi myös määrittää valvontakäyttäytymisen käyttämällä Pod-turvakäytäntö.
5. Tee sovelluksesta helppo seurata
Kuten kirjaaminen, seuranta on olennainen osa sovellusten hallintaa. Suosittu seurantaratkaisu Kubernetes-yhteisössä on Prometheus - järjestelmä, joka tunnistaa automaattisesti valvontaa vaativat podit ja palvelut. (Huomautus. käännös: Katso myös meidän yksityiskohtainen raportti Aiheesta seuranta Prometheuksen ja Kubernetesin avulla.)Stackdriver pystyy valvomaan Kubernetes-klustereita ja sisältää oman versionsa Prometheuksesta sovellusten valvontaa varten.
Kubernetes Dashboard Stackdriverissä
Prometheus odottaa sovelluksen välittävän mittareita HTTP-päätepisteeseen. Saatavilla tähän Prometheus-asiakaskirjastot. Samaa muotoa käyttävät muut työkalut, kuten OpenCensus и Sama.
6. Aseta sovelluksen terveydentila saataville
Sovellusten hallintaa tuotannossa auttaa sen kyky viestiä tilastaan koko järjestelmälle. Onko sovellus käynnissä? Onko se ok? Oletko valmis vastaanottamaan liikennettä? Kuinka hän käyttäytyy? Yleisin tapa ratkaista tämä ongelma on suorittaa terveystarkastukset (terveystarkastukset). Kubernetesilla on kaksi tyyppiä: elävyyttä ja valmiutta mittaavat.
Elävyyden mittaamiseen (elinvoimatarkastukset) sovelluksella on oltava HTTP-päätepiste, joka palauttaa "200 OK" -vastauksen, jos se toimii ja sen perusriippuvuudet täyttyvät. Valmiusmittaukseen (huoltovalmiustarkastukset) sovelluksella on oltava toinen HTTP-päätepiste, joka palauttaa "200 OK" -vastauksen, jos sovellus on kunnossa, alustusvaiheet on suoritettu ja mikään kelvollinen pyyntö ei aiheuta virhettä. Kubernetes reitittää liikenteen säilöön vain, jos sovellus on valmis näiden tarkistusten mukaan. Kaksi päätepistettä voidaan yhdistää, jos elävyys- ja valmiustilojen välillä ei ole eroa.
Useimmissa julkisissa ja yksityisissä kuvissa käytetään samanlaista merkintäjärjestelmää kuin kohdassa kuvattu Parhaat käytännöt konttien rakentamiseen. Jos kuva käyttää järjestelmää lähellä semanttinen versiointi, on tarpeen ottaa huomioon merkitsemisen erityispiirteet. Esimerkiksi tag latest voi liikkua usein kuvasta toiseen - siihen ei voi luottaa, jos tarvitset ennakoitavia ja toistettavia rakennelmia ja asennuksia.
Voit käyttää tunnistetta X.Y.Z (ne ovat melkein aina ennallaan), mutta tässä tapauksessa pidä kirjaa kaikista kuvan korjauksista ja päivityksistä. Jos käyttämässäsi kuvassa on tunniste X.Y, tämä on hyvä vaihtoehto kultaiselle keskiviivalle. Valitsemalla sen saat automaattisesti korjaustiedostoja ja luotat samalla sovelluksen vakaaseen versioon.