Istio bụ ngwa dị mma maka ijikọ, chekwaa na nyochaa ngwa ekesa. Istio na-eji teknụzụ dị iche iche iji na-agba ọsọ na jikwaa sọftụwia n'ọ̀tụ̀tụ̀, gụnyere arịa iji ngwugwu koodu ngwa na ndabere maka ibugharị, yana Kubernetes iji jikwaa akpa ndị ahụ. Yabụ, iji soro Istio rụọ ọrụ, ị ga-amarịrị ka ngwa nwere ọtụtụ ọrụ dabere na teknụzụ ndị a si arụ ọrụ enweghị Istio. Ọ bụrụ na ngwaọrụ na echiche ndị a amaralarị gị, nweere onwe gị ịhapụ nkuzi a wee gaa ozugbo na ngalaba Ịwụnye Istio na Google Kubernetes Engine (GKE) или установке расширения Istio na GKE.
Это пошаговое руководство, где мы рассмотрим весь процесс от исходного кода до контейнера на GKE, чтобы вы получили базовое представление об этих технологиях на примере. Также вы увидите, как Istio использует возможности этих технологий. Предполагается, что вы не знаете ничего о контейнерах, Kubernetes, service mesh или Istio.
ihe aga-eme
N'ime nkuzi a, ị ga-arụcha ọrụ ndị a:
Изучение простого приложения hello world с несколькими службами.
Gbaa ngwa ahụ site na koodu isi mmalite.
Nkwakọ ngwaahịa ahụ n'ime akpa.
Ịmepụta ụyọkọ Kubernetes.
Развертывание контейнеров в кластер.
Tupu ịmalite
Soro ntuziaka ndị a iji mee ka Kubernetes Engine API nwee ike:
N'ime nkuzi a, ị nwere ike iji Cloud Shell, nke na-akwado igwe mebere g1-small в Google Compute Engine ya na Linux dabeere na Debian, ma ọ bụ Linux ma ọ bụ kọmputa MacOS.
Nhọrọ A: Iji Cloud Shell
Uru nke iji Cloud Shell:
Python 2 na Python 3 gburugburu mmepe (gụnyere virtualenv) полностью настроены.
Ngwa Line Command gcloud, docker, gaa и kubectl, nke anyị ga-eji arụnyere.
С точки зрения сети, все приложение работает на одном хосте (локальном компьютере или виртуальной машине Cloud Shell). Поэтому можно использовать localhostiziga arịrịọ server.
10) Чтобы остановить ibu ibu и server, banye Ctrl-c в каждом окне терминала.
11) Na windo ọnụ ibu ibu gbanyụọ mebere gburugburu:
deactivate
Ịkwakọba ngwa n'ime akpa
Чтобы запустить приложение на GKE, нужно упаковать пример приложения — server и ibu ibu - na akpa. Контейнер — это способ упаковать приложение, чтобы изолировать его от среды.
Iji tinye ngwa n'ime akpa, ịchọrọ dockerfile. dockerfile bụ faịlụ ederede na-akọwa iwu maka iwulite koodu isi mmalite ngwa yana dabere na ya образ Docker. Ozugbo arụchara ya, ị bulite onyonyo a na ndekọ akpa dị ka Docker Hub ma ọ bụ Ndebanye aha akpa.
Ihe atụ enweela dockerfile n'ihi na server и ibu ibu na iwu niile dị mkpa iji nakọta onyonyo. N'okpuru - dockerfile n'ihi na 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" ]
otu SITE na Python: 3-slim dị ka isi велит Docker использовать последний Foto Python 3 dị ka ntọala.
otu Iṅomi. . detuo faịlụ isi mmalite na ndekọ ọrụ ugbu a (n'ọnọdụ anyị naanị ihe nkesa.py) в файловую систему контейнера.
ENTERRYPOINT na-akọwapụta iwu eji malite akpa ahụ. N'ọnọdụ anyị, iwu a fọrọ nke nta ka ọ bụrụ otu nke ị na-agbabu ihe nkesa.py site na koodu isi mmalite.
otu Ikpughe na-egosi na server na-eche data site n'ọdụ ụgbọ mmiri 8080. Otu a abụghị na-enye ọdụ ụgbọ mmiri. Nke a bụ ụfọdụ ụdị akwụkwọ achọrọ iji mepee ọdụ ụgbọ mmiri 8080 mgbe ịmalite akpa ahụ.
Подготовка к контейнеризации приложения
1) Tọọ mgbanwe gburugburu ebe obibi ndị a. Dochie PROJECT_ID na NJ ọrụ GCP gị.
export PROJECT_ID="PROJECT_ID"
export GCR_REPO="preparing-istio"
Iji ụkpụrụ PROJECT_ID и GCR_REPO вы помечаете образ Docker, когда собираете и отправляете его в частный Container Registry.
2) Tọọ ọrụ GCP ndabara maka ngwa ahịrị iwu gcloud.
gcloud config set project $PROJECT_ID
3) Tọọ mpaghara ndabara maka ngwá ọrụ ahịrị iwu gcloud.
Nyochaa ndepụta onyonyo dị na ebe nchekwa wee chọpụta na ebugoro foto ndị a:
gcloud container images list --repository gcr.io/$PROJECT_ID/preparing-istio
Iwu ahụ gosipụtara aha onyonyo ndị ebugoro ọhụrụ:
NAME
gcr.io/PROJECT_ID/preparing-istio/helloserver
gcr.io/PROJECT_ID/preparing-istio/loadgen
Создание кластера GKE.
Enwere ike ịgbanye akpa ndị a na igwe mebere igwe Cloud Shell ma ọ bụ na kọmpụta nwere iwu ahụ docker na-agba ọsọ. Ma n'ebe a na-emepụta ihe, ị ga-achọ ụzọ ị ga-esi na-ahazi arịa na etiti. Dịka ọmụmaatụ, ịchọrọ usoro nke na-eme ka arịa na-agba ọsọ mgbe niile, na ịchọrọ ụzọ iji bulie ma gbasaa ihe ndị ọzọ akpa ma ọ bụrụ na okporo ụzọ na-abawanye.
Iji mee ngwa nwere akpa, ị nwere ike iji G.K.E.. GKE — это платформа оркестрации контейнеров, которая объединяет виртуальные машины в кластер. Каждая виртуальная машина называется узлом. Кластеры GKE основаны на опенсорс-системе управления кластерами Kubernetes. Kubernetes предоставляет механизмы взаимодействия с кластером.
3) Теперь можно общаться с Kubernetes через kubectl. Dịka ọmụmaatụ, iwu na-esonụ nwere ike ịchọpụta ọnọdụ ọnụ:
kubectl get nodes
Iwu ahụ na-ewepụta ndepụta ọnụ:
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
Isi echiche Kubernetes
Eserese a na-egosi ngwa na GKE:
Tupu ibunye arịa na GKE, mụta isi echiche nke Kubernetes. Enwere njikọ na njedebe ma ọ bụrụ na ịchọrọ ịmụtakwu.
Ọnụ na ụyọkọ. В GKE узел — это виртуальная машина. На других платформах Kubernetes узлом может быть компьютер или виртуальная машина. Кластер — это набор узлов, которые можно считать единым целым и где вы развертываете контейнеризированное приложение.
Pọds. Na Kubernetes, arịa na-agba na pọd. Pod dị na Kubernetes bụ nkeji anaghị ekewa. Pod na-ejide otu akpa ma ọ bụ karịa. Ị na-ebunye arịa ihe nkesa na ibu ibu n'ụdị pods dị iche iche. Mgbe enwere ọtụtụ akpa na pọd (dịka ọmụmaatụ, ihe nkesa ngwa na ihe nkesa proxy), контейнеры управляются как единый объект и совместно используют ресурсы pod’а.
Nkwanye. Na Kubernetes, mbugharị bụ ihe bụ mkpokọta pọd ndị yiri ya. Nkwanye na-ebupụta ọtụtụ mkpụrụ pọd ndị ekesara gafee ọnụ ụyọkọ. Nbunye na-anọchi anya pọd ndị dara ada ma ọ bụ na-anabataghị.
Сервис Kubernetes. Mgbe ị na-agba koodu ngwa na GKE, njikọ dị n'etiti ibu ibu и server. Когда вы запустили сервисы на виртуальной машине Cloud Shell или на компьютере, вы отправляли запросы к server na localhost: 8080. Ozugbo ebugara na GKE, a na-egbu pọd n'ọnụ ọnụ dị. Site na ndabara, ị nweghị njikwa nke ọnụ nke pọd na-arụ ọrụ, yabụ ị pọd enweghị adreesị IP na-adịgide adịgide.
Iji nweta adreesị IP maka server, ịkwesịrị ịkọwapụta abstraction netwọk n'elu pọd. Nke ahụ bụ ihe ọ bụ Ọrụ Kubernetes. Ọrụ Kubernetes na-enye ebe njedebe na-adịgide adịgide maka otu pọd. Enwere ole na ole ụdị ọrụ. server na -eji LoadBalancer, nke na-enye adreesị IP mpụga iji kpọtụrụ server из-за пределов кластера.
Kubernetes nwekwara sistemụ DNS arụnyere n'ime nke na-ekenye aha DNS (dịka ọmụmaatụ, helloserver.default.cluster.local) сервисам. Благодаря этому pod’ы внутри кластера связываются с другими pod’ами в кластере по постоянному адресу. Имя DNS нельзя использовать за пределами кластера, например в Cloud Shell или на компьютере.
Kubernetes pụtara
Mgbe isi na isi mmalite mere ngwa a, i jiri iwu dị mkpa python3
ihe nkesa.py
Imperative pụtara ngwaa: "mee nke a."
Kubernetes na-eji ihe ngosi ngosi. Nke a pụtara na anyị anaghị agwa Kubernetes kpọmkwem ihe anyị ga-eme, kama na-akọwa ọnọdụ achọrọ. Dịka ọmụmaatụ, Kubernetes na-amalite ma kwụsị pods ka ọ dị mkpa iji dobe ọnọdụ nke usoro ahụ n'ezie na ọnọdụ achọrọ.
Желаемое состояние вы указываете в манифестах, или файлах UMUAKA. Faịlụ YAML nwere nkọwapụta maka otu ihe ma ọ bụ karịa Kubernetes.
Ihe atụ nwere faịlụ YAML maka server и ibu ibu. Faịlụ YAML ọ bụla na-akọwapụta ọnọdụ achọrọ nke ihe mbugharị yana ọrụ Kubernetes.
Первое поле spec содержит описание желаемого состояния.
spec.replicas na-egosi ọnụ ọgụgụ pọd ndị achọrọ.
Nkebi spec.template na-akọwapụta template pod. Enwere ubi na nkọwapụta pọd image, где указывается имя образа, который нужно извлечь из Container Registry.
LoadBalancer: Ndị ahịa na-eziga arịrịọ na adreesị IP nke onye na-ebu ibu, nke nwere adreesị IP na-adịgide adịgide ma na-enweta ya site na mpụga ụyọkọ ahụ.
targetPort: dị ka ị na-echeta, otu EXPOSE 8080 в dockerfile enyeghị ọdụ ụgbọ mmiri. Ị na-enye ọdụ ụgbọ mmiri 8080, чтобы можно было связаться с контейнером server снаружи кластера. В нашем случае hellosvc.default.cluster.local:80 (короткое имя: ndewovc) kwekọrọ na ọdụ ụgbọ mmiri 8080 Adreesị IP Pod helloserver.
n'ọdụ ụgbọ mmiri: Nke a bụ nọmba ọdụ ụgbọ mmiri ebe ọrụ ndị ọzọ na ụyọkọ ga-eziga arịrịọ.
loadgen.yaml
Ihe ebuga loadgen.yaml na adị ka sava.yaml. Разница в том, что объект развертывания содержит раздел ihe ruru. Ọ na-akọwapụta mgbanwe gburugburu ebe obibi achọrọ ibu ibu na nke ị rụnyere mgbe ị na-agba ọsọ site na isi mmalite.
Oge ibu ibu anaghị anabata arịrịọ mbata, maka ubi ụdị egosi ụyọkọ IP. Ụdị a na-enye adreesị IP na-adịgide adịgide nke ọrụ dị na ụyọkọ ahụ nwere ike iji, mana adreesị IP a adịghị ekpughe ndị ahịa mpụga.
Dochie PROJECT_ID na NJ ọrụ GCP gị.
9) Chekwa ma mechie loadgen.yaml, mechie editọ ederede.
10) Разверните файл YAML в Kubernetes:
kubectl apply -f loadgen.yaml
Mgbe emechara nke ọma, iwu ahụ na-ewepụta koodu a:
deployment.apps/loadgenerator created
service/loadgensvc created
11) Lelee ọkwa nke pọd ahụ:
kubectl get pods
Команда показывает статус:
NAME READY STATUS RESTARTS AGE
helloserver-69b9576d96-mwtcj 1/1 Running 0 58s
loadgenerator-774dbc46fb-gpbrz 1/1 Running 0 57s
12) Wepụ ndekọ ngwa na pọd ibu ibu. Dochie POD_ID na njirimara site na azịza gara aga.
kubectl logs loadgenerator-POD_ID
13) Nweta adreesị IP mpụga ndewovc:
kubectl get service
Nzaghachi iwu ahụ dị ka nke a:
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) Ziga arịrịọ ka ndewovc: dochie EXTERNAL_IP на внешний IP-адрес ndewovc.
curl http://EXTERNAL_IP
Ka anyị were Istio
У вас уже есть приложение, развернутое в GKE. ibu ibu может использовать Kubernetes DNS (helosvc:80), чтобы отправлять запросы к server, и вы можете отправлять запросы к server site na adreesị IP mpụga. Agbanyeghị na Kubernetes nwere ọtụtụ atụmatụ, enwere ụfọdụ ozi na-efu gbasara ọrụ ndị a:
Kedu ka ọrụ si emekọrịta? Kedu njikọ dị n'etiti ọrụ? Kedu ka okporo ụzọ si aga n'etiti ọrụ? Ị maara nke ahụ ibu ibu na-eziga arịrịọ server, mana were ya na ị maghị ihe ọ bụla gbasara ngwa ahụ. Iji zaa ajụjụ ndị a, ka anyị leba anya na ndepụta pọd na-agba ọsọ na GKE.
Metrics. Ogologo ole server zara arịrịọ mbata? Arịrịọ ole kwa nkeji nke sava na-enweta? Ọ na-enye ozi njehie?
Ozi nchekwa. Okporo ụzọ n'etiti ibu ibu и server dị nnọọ gafere Http ma ọ bụ site na mTLS?
Istio zara ajụjụ ndị a niile. Iji mee nke a, Istio na-edobe proxy sidecar Ụkọ n'akụkụ nke ọ bụla. Onye nnọchi anya onye ozi na-egbochi okporo ụzọ niile na-abata ma na-apụ na arịa ngwa. Ọ pụtara na server и ibu ibu nweta site sidecar proxy Envoy, na okporo ụzọ niile si ibu ibu к server проходит через прокси Envoy.
Njikọ dị n'etiti proxies ndị ozi na-etolite ntupu ọrụ. Ihe owuwu ntupu ọrụ na-enye njikwa njikwa n'elu Kubernetes.
Ebe ọ bụ na proxies ndị ozi na-agba n'ime akpa nke ha, enwere ike itinye Istio n'elu ụyọkọ GKE na-enweghị mgbanwe ọ bụla na koodu ngwa. Mana ịmeela ụfọdụ ọrụ iji kwado ngwa gị ka Istio ga-elekọta ya:
Ọrụ maka akpa niile. Iji mbugharị server и ibu ibu привязано по сервису Kubernetes. Даже у ibu ibu, к которому не поступают входящие запросы, есть сервис.
Ọdụ ụgbọ mmiri dị na ọrụ ga-enwerịrị aha. Ọ bụ ezie na enwere ike ịhapụ ọdụ ụgbọ mmiri na-enweghị aha na GKE, Istio chọrọ ka ị kọwapụta ya aha ọdụ ụgbọ mmiri dị ka ụkpụrụ ya siri dị. Na faịlụ YAML ọdụ ụgbọ mmiri maka server akpọ httpn'ihi na ihe nkesa na-eji protocol Http. Если бы ọrụ eji gRPC, ị ga-akpọ ọdụ ụgbọ mmiri ahụ grpc.
Развертывания помечаются. Поэтому вы можете использовать функции управления трафиком Istio, например разделять трафик между версиями одного сервиса.
Ịwụnye Istio
Enwere ụzọ abụọ iji wụnye Istio. Nwere ike mee Istio na ndọtị GKE ma ọ bụ установить опенсорс-версию Istio на кластере. С Istio on GKE можно легко управлять установкой и апгрейдом Istio в рамках жизненного цикла кластера GKE. Если вам нужна самая новая версия Istio или больше контроля над конфигурацией панели управления Istio, установите опенсорс-версию вместо расширения Istio on GKE. Чтобы определиться с подходом, читайте статью Achọrọ m Istio na GKE?.
Выберите вариант, изучите соответствующее руководство и следуйте инструкциям, чтобы установить Istio на кластере. Если вы хотите использовать Istio с только что развернутым приложением, включите внедрение sidecar’ов для пространства имен ndabara.
Nhicha
Iji zere ịbụ onye ebubo na akaụntụ Google Cloud Platform gị maka akụrụngwa ị jiri na nkuzi a, hichapụ ụyọkọ akpa ozugbo ị tinyechara Istio wee jiri ngwa nlele gwuo ya. Nke a ga-ewepụ akụrụngwa ụyọkọ niile, dị ka ịgbakọ oge, diski na akụrụngwa netwọkụ.