Istio minangka alat sing trep kanggo nyambungake, ngamanake lan ngawasi aplikasi sing disebarake. Istio nggunakake macem-macem teknologi kanggo mbukak lan ngatur piranti lunak ing skala, kalebu wadhah kanggo paket kode aplikasi lan dependensi kanggo penyebaran, lan Kubernetes kanggo ngatur wadhah kasebut. Mula, kanggo nggarap Istio, sampeyan kudu ngerti kepiye aplikasi kanthi macem-macem layanan adhedhasar teknologi kasebut tanpa Istio. Yen alat lan konsep iki wis kenal karo sampeyan, aja lali skip tutorial iki lan langsung menyang bagean kasebut Nginstal Istio ing Google Kubernetes Engine (GKE) utawa nginstal extension Istio ing GKE.
Iki minangka pandhuan langkah-langkah ing ngendi kita bakal ngliwati kabeh proses saka kode sumber menyang wadhah GKE supaya sampeyan entuk pangerten dhasar babagan teknologi kasebut kanthi conto. Sampeyan uga bakal weruh kepiye Istio nggunakake kekuwatan teknologi kasebut. Iki nganggep sampeyan ora ngerti apa-apa babagan wadhah, Kubernetes, jejaring layanan, utawa Istio.
tugas
Ing tutorial iki, sampeyan bakal ngrampungake tugas ing ngisor iki:
Sinau aplikasi hello world sing prasaja kanthi macem-macem layanan.
Jalanake aplikasi saka kode sumber.
Packaging aplikasi ing kontaner.
Nggawe kluster Kubernetes.
Nyebarake wadhah menyang kluster.
Sadurunge miwiti
Tindakake pandhuan kanggo ngaktifake Kubernetes Engine API:
Ing tutorial iki, sampeyan bisa nggunakake Cloud Shell, sing nyiapake mesin virtual g1-cilik ing Google Compute Engine karo Linux basis Debian, utawa komputer Linux utawa macOS.
Pilihan A: Nggunakake Cloud Shell
Keuntungan nggunakake Cloud Shell:
Lingkungan pangembangan Python 2 lan Python 3 (kalebu virtualenv) wis dikonfigurasi kanthi lengkap.
Piranti Command Line gcloud, docker, Go ΠΈ kubectl, sing bakal digunakake wis diinstal.
Sampeyan duwe sawetara kanggo milih saka editor teks:
Editor kode, sing mbukak nganggo lambang suntingan ing sisih ndhuwur jendhela Cloud Shell.
Emacs, Vim utawa Nano, sing mbukak saka baris printah ing Cloud Shell.
Saka perspektif jaringan, kabeh aplikasi mlaku ing host siji (komputer lokal utawa mesin virtual Cloud Shell). Mulane sampeyan bisa nggunakake localhostkanggo ngirim panjalukan kanggo server.
10) Kanggo mungkasi loadgen ΠΈ server, mlebu Ctrl-c ing saben jendhela terminal.
11) Ing jendhela terminal loadgen mateni lingkungan virtual:
deactivate
Packaging aplikasi ing kontaner
Kanggo mbukak aplikasi ing GKE, sampeyan kudu paket conto aplikasi β server ΠΈ loadgen - ing kontaner. Wadah minangka cara kanggo ngemas aplikasi kanggo ngisolasi saka lingkungane.
Kanggo paket aplikasi menyang wadhah, sampeyan kudu file docker. file docker minangka file teks sing nemtokake printah kanggo mbangun kode sumber aplikasi lan dependensi Gambar Docker. Sawise dibangun, sampeyan ngunggah gambar menyang registri wadhah kayata Docker Hub utawa Registry kontainer.
Tuladhane wis ana file docker kanggo server ΠΈ loadgen karo kabeh prentah sing perlu kanggo ngumpulake gambar. Ngisor - file docker kanggo server:
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" ]
tim Saka python: 3-slim minangka basa ngandhani Docker nggunakake paling anyar Gambar Python 3 minangka dhasar.
tim COPY. . nyalin file sumber menyang direktori kerja saiki (mung ing kasus kita server.py) menyang sistem file wadhah.
ENTRYPOINT nemtokake printah sing digunakake kanggo miwiti wadhah. Ing kasus kita, printah iki meh padha karo sing digunakake kanggo mbukak server.py saka kode sumber.
tim Mbabarake nuduhake yen server ngenteni data liwat port 8080. Tim iki ora menehi bandar. Iki minangka sawetara dokumentasi sing dibutuhake kanggo mbukak port kasebut 8080 nalika miwiti wadhah.
Nyiyapake kanggo containerize aplikasi sampeyan
1) Setel variabel lingkungan ing ngisor iki. Ganti PROJECT_ID menyang ID proyek GCP sampeyan.
export PROJECT_ID="PROJECT_ID"
export GCR_REPO="preparing-istio"
Nggunakake nilai PROJECT_ID ΠΈ GCR_REPO sampeyan menehi tag gambar Docker nalika sampeyan mbangun lan push menyang Registry Container pribadi.
2) Setel proyek GCP standar kanggo alat baris printah gcloud.
gcloud config set project $PROJECT_ID
3) Setel zona gawan kanggo alat baris printah gcloud.
gcloud config set compute/zone us-central1-b
4) Priksa manawa layanan Container Registry diaktifake ing proyek GCP.
Deleng dhaptar gambar ing repositori lan verifikasi manawa gambar kasebut wis diunggah:
gcloud container images list --repository gcr.io/$PROJECT_ID/preparing-istio
Printah kasebut nampilake jeneng gambar sing mentas diunggah:
NAME
gcr.io/PROJECT_ID/preparing-istio/helloserver
gcr.io/PROJECT_ID/preparing-istio/loadgen
Nggawe klompok GKE.
Wadah kasebut bisa ditindakake ing mesin virtual Cloud Shell utawa ing komputer kanthi prentah kasebut docker run. Nanging ing lingkungan produksi, sampeyan butuh cara kanggo ngatur kontainer kanthi pusat. Contone, sampeyan butuh sistem sing nggawe manawa kontaner tansah mlaku, lan sampeyan butuh cara kanggo nggedhekake lan muter kasus kontainer tambahan yen lalu lintas mundhak.
Kanggo mbukak aplikasi containerized sampeyan bisa nggunakake G.K.E.. GKE minangka platform orkestrasi wadah sing nggabungake mesin virtual dadi kluster. Saben mesin virtual diarani simpul. Kluster GKE adhedhasar sistem manajemen kluster Kubernetes open source. Kubernetes nyedhiyakake mekanisme kanggo sesambungan karo kluster.
tim gcloud nggawe kluster istioready ing proyek GCP lan zona gawan sing sampeyan nemtokake. Kanggo mbukak Istio, disaranake duwe paling ora 4 kelenjar lan mesin virtual n1-standar-2.
Tim nggawe kluster ing sawetara menit. Nalika kluster wis siyap, printah kasebut ngasilake kaya iki pesen.
2) Nyedhiyakake kredensial ing alat baris perintah kubectldigunakake kanggo ngatur kluster:
3) Saiki sampeyan bisa komunikasi karo Kubernetes liwat kubectl. Contone, prentah ing ngisor iki bisa ngerteni status simpul:
kubectl get nodes
Printah kasebut ngasilake dhaptar node:
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
Konsep Kunci Kubernetes
Diagram nuduhake aplikasi ing GKE:
Sadurunge masang wadhah ing GKE, sinau konsep kunci Kubernetes. Ana pranala ing pungkasan yen sampeyan pengin sinau luwih akeh.
Node lan kluster. Ing GKE, simpul minangka mesin virtual. Ing platform Kubernetes liyane, simpul bisa dadi komputer utawa mesin virtual. Kluster minangka kumpulan simpul sing bisa dianggep minangka unit siji ing ngendi sampeyan nyebarake aplikasi sing dikontainer.
Podho. Ing Kubernetes, wadhah mbukak ing pods. Pod ing Kubernetes minangka unit sing ora bisa dipisahake. A Pod ngemot siji utawa luwih wadhah. Sampeyan nyebarke kontaner server lan loadgen ing pods kapisah. Nalika ana sawetara kontaner ing pod (contone, server aplikasi lan server proxy), wadhah dikelola minangka entitas siji lan nuduhake sumber daya pod.
Penyebaran. Ing Kubernetes, panyebaran minangka obyek sing minangka kumpulan polong sing padha. Penyebaran ngluncurake pirang-pirang replika polong sing disebar ing node kluster. Panyebaran kanthi otomatis ngganti pods sing gagal utawa ora responsif.
layanan Kubernetes. Nalika mbukak kode aplikasi ing GKE, sambungan antarane loadgen ΠΈ server. Nalika sampeyan miwiti layanan ing mesin virtual Cloud Shell utawa desktop, sampeyan ngirim panjalukan kanggo server dening alamat localhost: 8080. Sawise disebarake menyang GKE, pods dieksekusi ing node sing kasedhiya. Kanthi gawan, sampeyan ora duwe kontrol liwat simpul sing polong mlaku, mula sampeyan polong ora ana alamat IP permanen.
Kanggo entuk alamat IP kanggo server, sampeyan kudu nemtokake abstraksi jaringan ing ndhuwur pods. Mekaten punika layanan Kubernetes. Layanan Kubernetes nyedhiyakake titik pungkasan sing terus-terusan kanggo sakumpulan pod. Ana sawetara jinis layanan. server nggunakake LoadBalancer, sing nyedhiyakake alamat IP eksternal kanggo dihubungi server saka njaba kluster.
Kubernetes uga duwe sistem DNS sing wis dibangun sing menehi jeneng DNS (contone, helloserver.default.cluster.local) layanan. Thanks kanggo iki, pods ing kluster komunikasi karo pods liyane ing kluster ing alamat permanen. Jeneng DNS ora bisa digunakake ing njaba kluster, kayata ing Cloud Shell utawa ing komputer.
Kubernetes manifests
Nalika sampeyan mbukak aplikasi saka sumber, sampeyan nggunakake printah imperatif python3
server.py
Imperatif tegese tembung kriya: "nglakoni iki."
Kubernetes migunakake model deklaratif. Iki tegese kita ora ngandhani Kubernetes persis apa sing kudu ditindakake, nanging nggambarake kahanan sing dikarepake. Contone, Kubernetes miwiti lan mungkasi pods yen perlu kanggo mesthekake yen kahanan nyata saka sistem cocog karo negara sing dikarepake.
Sampeyan nuduhake negara sing dikarepake ing manifests utawa file YAML. Berkas YAML ngemot spesifikasi kanggo siji utawa luwih obyek Kubernetes.
Conto ngemot file YAML kanggo server ΠΈ loadgen. Saben file YAML nemtokake kahanan sing dikarepake saka obyek penyebaran lan layanan Kubernetes.
Lapangan pisanan spec ngemot katrangan babagan kahanan sing dikarepake.
spec.replika nuduhake jumlah polong sing dikarepake.
Bagean spec.template nemtokake cithakan pod. Ana lapangan ing spesifikasi pod gambar, sing nemtokake jeneng gambar sing kudu diekstrak saka Registry Kontainer.
LoadBalancer: Klien ngirim panjalukan menyang alamat IP saka load balancer, sing nduweni alamat IP sing terus-terusan lan bisa diakses saka njaba kluster.
targetPort: sing elinga, tim PABRIK 8080 Π² file docker ora nyedhiyani bandar. Sampeyan nyedhiyani port 8080supaya sampeyan bisa hubungi wadhah server njaba kluster. Ing kasus kita hellosvc.default.cluster.local:80 (jeneng singkat: hellosvc) cocog karo port 8080 Alamat IP Pod helloserver.
port: Iki nomer port ngendi layanan liyane ing kluster bakal ngirim panjalukan.
loadgen.yaml
Panyebaran obyek kanggo loadgen.yaml katon kaya server.yaml. Bentenane yaiku obyek penyebaran ngemot bagean sugeng. Iki nemtokake variabel lingkungan sing dibutuhake loadgen lan sing diinstal nalika mbukak aplikasi saka sumber.
Wektu loadgen ora nampa panjalukan mlebu, kanggo lapangan jinis dituduhake KlusterIP. Jinis iki menehi alamat IP terus-terusan sing layanan ing kluster bisa digunakake, nanging alamat IP iki ora kapapar klien external.
Ganti PROJECT_ID menyang ID proyek GCP sampeyan.
9) Simpen lan nutup loadgen.yaml, tutup editor teks.
10) Pasang file YAML menyang Kubernetes:
kubectl apply -f loadgen.yaml
Sawise rampung, printah kasebut ngasilake kode ing ngisor iki:
deployment.apps/loadgenerator created
service/loadgensvc created
11) Priksa status pods:
kubectl get pods
Perintah kasebut nuduhake status:
NAME READY STATUS RESTARTS AGE
helloserver-69b9576d96-mwtcj 1/1 Running 0 58s
loadgenerator-774dbc46fb-gpbrz 1/1 Running 0 57s
12) Ekstrak log aplikasi saka pod loadgen. Ganti POD_ID menyang pengenal saka jawaban sadurunge.
kubectl logs loadgenerator-POD_ID
13) Entuk alamat IP eksternal hellosvc:
kubectl get service
Tanggapan perintah katon kaya iki:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hellosvc LoadBalancer 10.81.15.158 192.0.2.1 80:31127/TCP 33m
kubernetes ClusterIP 10.81.0.1 <none> 443/TCP 93m
loadgensvc ClusterIP 10.81.15.155 <none> 80/TCP 4m52s
14) Kirimi panjalukan menyang hellosvc: ngganti EXTERNAL_IP menyang alamat IP eksternal hellosvc.
curl http://EXTERNAL_IP
Ayo dadi njupuk Istio
Sampeyan wis duwe aplikasi sing disebarake menyang GKE. loadgen bisa nggunakake DNS Kubernetes (hellosvc:80) kanggo ngirim panjalukan kanggo serverlan sampeyan bisa ngirim panjalukan kanggo server dening alamat IP eksternal. Sanajan Kubernetes nduweni akeh fitur, ana sawetara informasi sing ilang babagan layanan kasebut:
Kepiye cara interaksi layanan? Apa hubungane antarane layanan? Kepiye arus lalu lintas ing antarane layanan? Apa sampeyan ngerti loadgen ngirim panjalukan kanggo server, nanging mbayangno sing ora ngerti apa-apa bab aplikasi. Kanggo mangsuli pitakon kasebut, deleng dhaptar polong sing mlaku ing GKE.
Metrik. Suwene server nanggapi panjalukan sing mlebu? Carane akeh panjalukan saben detik ditampa dening server? Apa menehi pesen kesalahan?
Informasi Keamanan. Lalu lintas antarane loadgen ΠΈ server mung liwat HTTP utawa dening mTLS?
Istio njawab kabeh pitakonan iki. Kanggo nindakake iki, Istio nyelehake proxy sidecar Envoy ing saben pod. Proksi Utusan nyegat kabeh lalu lintas mlebu lan metu menyang wadhah aplikasi. Iku tegese server ΠΈ loadgen nampa liwat sidecar proxy Utusan, lan kabeh lalu lintas saka loadgen ΠΊ server liwat proxy Utusan.
Sambungan antarane proksi Utusan mbentuk bolong layanan. Arsitektur bolong layanan nyedhiyakake lapisan kontrol ing ndhuwur Kubernetes.
Wiwit proxy Envoy mbukak ing wadhah dhewe, Istio bisa diinstal ing ndhuwur klompok GKE karo meh ora owah-owahan ing kode aplikasi. Nanging sampeyan wis nindakake sawetara karya kanggo nyiyapake aplikasi sampeyan supaya bisa dikelola dening Istio:
Layanan kanggo kabeh kontaner. Kanggo penyebaran server ΠΈ loadgen disambungake menyang layanan Kubernetes. Malah loadgen, sing ora nampa panjalukan mlebu, ana layanan.
Pelabuhan ing layanan kudu duwe jeneng. Sanajan port layanan bisa ditinggal tanpa jeneng ing GKE, Istio mbutuhake sampeyan nemtokake jeneng port miturut protokole. Ing file YAML port kanggo server disebut httpamarga server nggunakake protokol HTTP... Yen layanan digunakake gRPC, sampeyan bakal menehi jeneng port grpc.
Panyebaran diwenehi tandha. Mula, sampeyan bisa nggunakake fitur manajemen lalu lintas Istio, kayata pamisah lalu lintas antarane versi layanan sing padha.
Nginstal Istio
Ana rong cara kanggo nginstal Istio. Saget ngaktifake Istio ing ekstensi GKE utawa nginstal versi open source saka Istio ing kluster. Kanthi Istio ing GKE, sampeyan bisa kanthi gampang ngatur instalasi lan nganyarke Istio sajrone siklus urip kluster GKE. Yen sampeyan pengin versi paling anyar saka Istio utawa kontrol liyane liwat konfigurasi panel kontrol Istio, nginstal versi open source tinimbang ekstensi Istio ing GKE. Kanggo mutusake pendekatan kasebut, waca artikel kasebut Apa aku butuh Istio ing GKE?.
Pilih opsi, deleng pandhuan sing cocog, lan tindakake pandhuan kanggo nginstal Istio ing kluster sampeyan. Yen sampeyan pengin nggunakake Istio karo aplikasi sing mentas disebarake, ngaktifake implementasi sidecar kanggo namespace standar.
Reresik
Supaya ora dikenani biaya menyang akun Google Cloud Platform kanggo sumber daya sing digunakake ing tutorial iki, mbusak kluster wadhah yen sampeyan wis nginstal Istio lan muter karo aplikasi sampel. Iki bakal mbusak kabeh sumber daya kluster, kayata conto komputasi, disk, lan sumber daya jaringan.