Istio on kätevä työkalu hajautettujen sovellusten yhdistämiseen, turvaamiseen ja valvontaan. Istio käyttää erilaisia tekniikoita ohjelmistojen ajamiseen ja hallintaan mittakaavassa, mukaan lukien kontit sovelluskoodin ja riippuvuuksien pakkaamiseen käyttöönottoa varten ja Kubernetes näiden säiliöiden hallintaan. Siksi, jotta voit työskennellä Istion kanssa, sinun on tiedettävä, kuinka näihin teknologioihin perustuva sovellus, jossa on useita palveluita, toimii без Istio. Jos nämä työkalut ja käsitteet ovat sinulle jo tuttuja, ohita tämä opetusohjelma ja siirry suoraan osioon Istion asentaminen Google Kubernetes Engineen (GKE) tai laajennuksen asentaminen Istio GKE:ssä.
Tämä on vaiheittainen opas, jossa käymme läpi koko prosessin lähdekoodista GKE-säilöön, jotta saat perusymmärrystä näistä teknologioista esimerkin avulla. Näet myös, kuinka Istio hyödyntää näiden teknologioiden tehoa. Tämä olettaa, että et tiedä mitään konteista, Kubernetesistä, palveluverkoista tai Istiosta.
tehtävät
Tässä opetusohjelmassa suoritat seuraavat tehtävät:
Yksinkertaisen hello world -sovelluksen oppiminen useilla palveluilla.
Suorita sovellus lähdekoodista.
Sovelluksen pakkaaminen säiliöihin.
Kubernetes-klusterin luominen.
Konttien käyttöönotto klusteriksi.
Ennen aloittamista
Ota Kubernetes Engine API käyttöön seuraamalla ohjeita:
Tässä opetusohjelmassa voit käyttää Cloud Shelliä, joka valmistelee virtuaalikoneen g1-small Google Compute Enginessä Debian-pohjaisella Linuxilla tai Linux- tai macOS-tietokoneella.
Vaihtoehto A: Cloud Shellin käyttäminen
Cloud Shellin käytön edut:
Python 2- ja Python 3 -kehitysympäristöt (mukaan lukien virtualenv) on täysin määritetty.
Komentorivityökalut gpilvi, satamatyöläinen, mennä и kubectl, joita käytämme, on jo asennettu.
Useita palveluita sisältävän sovelluksen tutkiminen
Esimerkkisovellus on kirjoitettu Pythonilla ja koostuu kahdesta osasta, jotka ovat vuorovaikutuksessa keskenään REST:
palvelin: yksinkertainen palvelin yhdellä päätepisteellä SAADA, /, joka tulostaa konsoliin "hello world".
loadgen: komentosarja, joka lähettää liikennettä palvelin, jossa on konfiguroitava määrä pyyntöjä sekunnissa.
Sovelluksen suorittaminen lähdekoodista
Tutustu esimerkkisovellukseen suorittamalla se Cloud Shellissä tai tietokoneellasi.
1) Luettelossa istio-samples/sample-apps/helloserver juosta palvelin:
python3 server/server.py
Käynnistyksen yhteydessä palvelin seuraava näytetään:
INFO:root:Starting server...
2) Avaa toinen pääteikkuna lähettääksesi pyynnöt palvelin. Jos käytät Cloud Shelliä, avaa toinen istunto napsauttamalla lisäyskuvaketta.
3) Lähetä pyyntö osoitteeseen palvelin:
curl http://localhost:8080
palvelin vastaa:
Hello World!
4) Siirry hakemistosta, josta latasit mallikoodin, hakemistoon, joka sisältää loadgen:
cd YOUR_WORKING_DIRECTORY/istio-samples/sample-apps/helloserver/loadgen
Verkkonäkökulmasta katsottuna koko sovellus toimii yhdellä isännällä (paikallinen tietokone tai Cloud Shell -virtuaalikone). Siksi voit käyttää localhostpyyntöjen lähettämiseen palvelin.
10) lopettaa loadgen и palvelin, tulla sisään Ctrl-c jokaisessa pääteikkunassa.
11) Pääteikkunassa loadgen deaktivoi virtuaaliympäristö:
deactivate
Sovelluksen pakkaaminen säiliöihin
Jotta voit ajaa sovelluksen GKE:ssä, sinun on pakattava esimerkkisovellus − palvelin и loadgen - klo Kontit. Säiliö on tapa pakata sovellus eristämään se ympäristöstään.
Jos haluat pakata sovelluksen säiliöön, tarvitset Dockerfile. Dockerfile on tekstitiedosto, joka määrittelee komennot sovelluksen lähdekoodin ja sen riippuvuuksien rakentamiseksi Docker-kuva. Kun kuva on rakennettu, lataa se säilörekisteriin, kuten Docker Hubiin tai Konttirekisteri.
Esimerkki on jo Dockerfile varten palvelin и loadgen kaikki tarvittavat komennot kuvien keräämiseen. Alla - Dockerfile varten palvelin:
FROM python:3-slim as base
FROM base as builder
RUN apt-get -qq update
&& apt-get install -y --no-install-recommends
g++
&& rm -rf /var/lib/apt/lists/*
# Enable unbuffered logging
FROM base as final
ENV PYTHONUNBUFFERED=1
RUN apt-get -qq update
&& apt-get install -y --no-install-recommends
wget
WORKDIR /helloserver
# Grab packages from builder
COPY --from=builder /usr/local/lib/python3.7/ /usr/local/lib/python3.7/
# Add the application
COPY . .
EXPOSE 8080
ENTRYPOINT [ "python", "server.py" ]
Joukkue FROM python: 3-slim pohjana käskee Dockeria käyttämään uusinta Python 3 kuva pohjana.
Joukkue KOPIO. . kopioi lähdetiedostot nykyiseen työhakemistoon (vain tässä tapauksessa server.py) säilön tiedostojärjestelmään.
SISÄÄNTULOPISTE määrittää komennon, jota käytetään säilön käynnistämiseen. Meidän tapauksessamme tämä komento on melkein sama kuin se, jota käytit suorittamassa server.py lähdekoodista.
Joukkue ALTISTUMINEN osoittaa sen palvelin odottaa tietoja portin kautta 8080. Tämä joukkue ei ole tarjoaa portteja. Tämä on jonkinlainen dokumentaatio, jota tarvitaan portin avaamiseen 8080 säiliötä käynnistettäessä.
Valmistaudutaan hakemuksesi säilytykseen
1) Aseta seuraavat ympäristömuuttujat. Korvata PROJECT_ID GCP-projektitunnukseesi.
export PROJECT_ID="PROJECT_ID"
export GCR_REPO="preparing-istio"
Arvojen käyttäminen PROJECT_ID и GCR_REPO merkitset Docker-kuvan luodessasi sen ja työnnät sen yksityiseen säilörekisteriin.
Tarkista arkiston kuvien luettelo ja varmista, että kuvat on ladattu:
gcloud container images list --repository gcr.io/$PROJECT_ID/preparing-istio
Komento näyttää juuri ladattujen kuvien nimet:
NAME
gcr.io/PROJECT_ID/preparing-istio/helloserver
gcr.io/PROJECT_ID/preparing-istio/loadgen
GKE-klusterin luominen.
Näitä säilöjä voidaan käyttää Cloud Shell -virtuaalikoneessa tai tietokoneessa komennolla telakointi. Mutta tuotantoympäristössä tarvitset tavan ohjata kontit keskitetysti. Tarvitset esimerkiksi järjestelmän, joka varmistaa, että säilöt ovat aina käynnissä, ja tarvitset tavan skaalata ja kehittää lisää säilön esiintymiä, jos liikenne lisääntyy.
Voit käyttää säilöttyjä sovelluksia G.K.E.. GKE on kontin orkestrointialusta, joka kokoaa virtuaalikoneita klusteriksi. Jokaista virtuaalikonetta kutsutaan solmuksi. GKE-klusterit perustuvat avoimen lähdekoodin Kubernetes-klusterinhallintajärjestelmään. Kubernetes tarjoaa mekanismeja vuorovaikutukseen klusterin kanssa.
Joukkue gpilvi luo istioready-klusterin määrittämääsi GCP-projektiin ja oletusvyöhykkeeseen. Istion suorittamiseksi suosittelemme, että sinulla on vähintään 4 solmua ja virtuaalikone n1-standardi-2.
Tiimi luo klusterin muutamassa minuutissa. Kun klusteri on valmis, komento tulostaa jotain tällaista сообщение.
2) Anna käyttäjätiedot komentorivityökalussa kubectlkäyttääksesi sitä klusterin hallintaan:
3) Nyt voit olla yhteydessä Kubernetesiin kautta kubectl. Esimerkiksi seuraava komento voi selvittää solmujen tilan:
kubectl get nodes
Komento tuottaa luettelon solmuista:
NAME STATUS ROLES AGE VERSION
gke-istoready-default-pool-dbeb23dc-1vg0 Ready <none> 99s v1.13.6-gke.13
gke-istoready-default-pool-dbeb23dc-36z5 Ready <none> 100s v1.13.6-gke.13
gke-istoready-default-pool-dbeb23dc-fj7s Ready <none> 99s v1.13.6-gke.13
gke-istoready-default-pool-dbeb23dc-wbjw Ready <none> 99s v1.13.6-gke.13
Kubernetesin keskeiset käsitteet
Kaavio näyttää sovelluksen GKE:ssä:
Ennen kuin otat käyttöön säilöjä GKE:ssä, opi Kubernetesin keskeiset käsitteet. Aivan lopussa on linkkejä, jos haluat oppia lisää.
Solmut ja klusterit. GKE:ssä solmu on virtuaalikone. Muilla Kubernetes-alustoilla solmu voi olla tietokone tai virtuaalikone. Klusteri on joukko solmuja, joita voidaan pitää yhtenä yksikkönä, jossa otat käyttöön konttisovelluksen.
Palot. Kubernetesissa säiliöt kulkevat paloissa. Kubernetesin Pod on jakamaton yksikkö. Podissa on yksi tai useampi säiliö. Otat käyttöön palvelinsäilöjä ja loadgen erillisissä pusseissa. Kun podissa on useita säiliöitä (esimerkiksi sovelluspalvelin ja välityspalvelin), säilöjä hallitaan yhtenä kokonaisuutena ja ne jakavat pod-resursseja.
Käyttöönotot. Kubernetesissa käyttöönotto on objekti, joka on kokoelma identtisiä podeja. Käyttöönotto käynnistää useita klusterin solmuille hajautettuja pod-kopioita. Käyttöönotto korvaa automaattisesti kotelot, jotka ovat epäonnistuneet tai eivät vastaa.
Kubernetes palvelu. Kun käytät sovelluskoodia GKE:ssä, yhteys loadgen и palvelin. Kun aloitit palvelut Cloud Shell -virtuaalikoneella tai -työpöydällä, lähetit pyynnöt osoitteeseen palvelin at localhost: 8080. Kun podit on otettu käyttöön GKE:ssä, ne suoritetaan käytettävissä olevissa solmuissa. Oletuksena et voi hallita sitä, missä solmussa pod on käynnissä, joten sinä paloja ei pysyviä IP-osoitteita.
IP-osoitteen hankkimiseksi palvelin, sinun on määritettävä verkkoabstraktio podien päälle. Sitä se on Kubernetes palvelu. Kubernetes-palvelu tarjoaa pysyvän päätepisteen pod-joukolle. Niitä on muutama palvelutyyppejä. palvelin käyttää LoadBalancer, joka tarjoaa ulkoisen IP-osoitteen yhteydenottoa varten palvelin klusterin ulkopuolelta.
Kubernetesissa on myös sisäänrakennettu DNS-järjestelmä, joka määrittää DNS-nimiä (esim. helloserver.default.cluster.local) palvelut. Tämän ansiosta klusterin podit kommunikoivat muiden klusterin podien kanssa pysyvässä osoitteessa. DNS-nimeä ei voi käyttää klusterin ulkopuolella, kuten Cloud Shellissä tai tietokoneessa.
Kubernetes ilmenee
Kun suoritit sovelluksen lähteestä, käytit pakollista komentoa python3
server.py
Imperatiivi tarkoittaa verbiä: "tee tämä".
Kubernetes käyttää deklaratiivinen malli. Tämä tarkoittaa, että emme kerro Kubernetesille tarkalleen mitä tehdä, vaan kuvaamme haluttua tilaa. Esimerkiksi Kubernetes käynnistää ja pysäyttää podeja tarpeen mukaan pitääkseen järjestelmän todellisen tilan halutun tilan mukaisena.
Ilmoitat halutun tilan luetteloissa tai tiedostoissa YAML. YAML-tiedosto sisältää määritykset yhdelle tai useammalle Kubernetes-objektille.
Esimerkki sisältää YAML-tiedoston for palvelin и loadgen. Jokainen YAML-tiedosto määrittää käyttöönottoobjektin ja Kubernetes-palvelun halutun tilan.
LoadBalancer: Asiakkaat lähettävät pyyntöjä kuormituksen tasaajan IP-osoitteeseen, jolla on pysyvä IP-osoite ja johon pääsee käsiksi klusterin ulkopuolelta.
kohdeportti: kuten muistat, joukkue VALOTUS 8080 в Dockerfile ei tarjonnut portteja. Annat portin 8080jotta voit ottaa yhteyttä konttiin palvelin klusterin ulkopuolella. Meidän tapauksessamme hellosvc.default.cluster.local:80 (lyhyt nimi: hellosvc) vastaa porttia 8080 Pod IP-osoitteet helloserver.
portti: Tämä on portin numero, johon muut klusterin palvelut lähettävät pyyntöjä.
loadgen.yaml
Käyttöönoton kohde loadgen.yaml näyttää joltakin server.yaml. Erona on, että käyttöönottoobjekti sisältää osan env. Se määrittelee tarvittavat ympäristömuuttujat loadgen ja jonka asensit, kun suoritit sovelluksen lähteestä.
aika loadgen ei ota vastaan saapuvia pyyntöjä kentälle tyyppi tuntematon KlusteriIP. Tämä tyyppi tarjoaa pysyvän IP-osoitteen, jota klusterin palvelut voivat käyttää, mutta tämä IP-osoite ei ole alttiina ulkoisille asiakkaille.
Sinulla on jo sovellus otettu käyttöön GKE:ssä. loadgen voi käyttää Kubernetes DNS (hellosvc:80) lähettää pyyntöjä palvelinja voit lähettää pyyntöjä osoitteeseen palvelin ulkoisen IP-osoitteen perusteella. Vaikka Kubernetesilla on monia ominaisuuksia, palveluista puuttuu joitain tietoja:
Miten palvelut toimivat vuorovaikutuksessa? Mitkä ovat palveluiden väliset suhteet? Miten liikenne sujuu palveluiden välillä? Oletko tietoinen siitä loadgen lähettää pyyntöjä osoitteeseen palvelin, mutta kuvittele, että et tiedä sovelluksesta mitään. Näihin kysymyksiin vastaamiseksi katsotaanpa GKE:n juoksevien podien luetteloa.
Mittarit. Kuinka kauan palvelin vastaa saapuvaan pyyntöön? Kuinka monta pyyntöä sekunnissa palvelin vastaanottaa? Antaako se virheilmoituksia?
Turvallisuustiedot. Liikenne välillä loadgen и palvelin menee vain läpi HTTP tai mukaan mTLS?
Istio vastaa kaikkiin näihin kysymyksiin. Tätä varten Istio asettaa sivuvaunun välityspalvelimen Lähettiläs jokaisessa kotelossa. Envoy-välityspalvelin sieppaa kaiken saapuvan ja lähtevän liikenteen sovellussäiliöihin. Se tarkoittaa sitä palvelin и loadgen vastaanottaa sivuvaunun välityspalvelimen kautta Envoy, ja kaikki liikenne lähteestä loadgen к palvelin menee Envoy-välityspalvelimen kautta.
Envoy-välityspalvelinten väliset yhteydet muodostavat palveluverkon. Palveluverkkoarkkitehtuuri tarjoaa hallintakerroksen Kubernetesin päälle.
Koska Envoy-välityspalvelimet toimivat omissa säilöissään, Istio voidaan asentaa GKE-klusterin päälle lähes ilman muutoksia sovelluskoodiin. Mutta olet tehnyt jonkin verran työtä saadaksesi sovelluksesi valmiiksi Istion hallinnoitavaksi:
Palvelut kaikille konteille. Käyttöönottoihin palvelin и loadgen sidottu Kubernetes-palveluun. Jopa loadgen, joka ei vastaanota saapuvia pyyntöjä, on palvelu.
Palveluiden porteilla on oltava nimet. Vaikka palveluportit voidaan jättää nimeämättä GKE:ssä, Istio vaatii sinua määrittämään portin nimi protokollansa mukaisesti. YAML-tiedostossa portti palvelin kutsutaan httpkoska palvelin käyttää protokollaa HTTP... Jos palvelu käytetty gRPC, nimeät sataman grpc.
Käyttöönotot on merkitty. Siksi voit käyttää Istion liikenteenhallintaominaisuuksia, kuten liikenteen jakamista saman palvelun versioiden välillä.
Asennus
Istio voidaan asentaa kahdella tavalla. Voi ota Istio käyttöön GKE-laajennuksessa tai asenna Istion avoimen lähdekoodin versio klusterissa. GKE:n Istion avulla voit helposti hallita Istion asennuksia ja päivityksiä koko GKE-klusterin elinkaaren ajan. Jos haluat Istion uusimman version tai enemmän hallita Istio-ohjauspaneeliasi, asenna avoimen lähdekoodin versio Istio on GKE -laajennuksen sijaan. Päättääksesi lähestymistavasta, lue artikkeli Tarvitsenko Istiota GKE:ssä?.
Valitse vaihtoehto, lue sopiva opas ja asenna Istio klusteriisi ohjeiden mukaan. Jos haluat käyttää Istioa juuri käyttöön otetun sovelluksesi kanssa, mahdollistaa sivuvaunujen toteutuksen nimiavaruutta varten oletusarvo.
puhdistus
Jotta sinua ei veloitettaisi Google Cloud Platform -tililtäsi tässä opetusohjelmassa käyttämistäsi resursseista, poista säilöklusteri, kun olet asentanut Istion ja pelannut esimerkkisovelluksella. Tämä poistaa kaikki klusterin resurssit, kuten laskentaesiintymät, levyt ja verkkoresurssit.