Kodi Istio? Izi ndizomwe zimatchedwa Service mesh, ukadaulo womwe umawonjezera kusanja pamaneti. Timaletsa zonse kapena gawo la kuchuluka kwa magalimoto mgululi ndikuchita nawo ntchito zina. Chiti? Mwachitsanzo, timayendetsa njira zanzeru, kapena timagwiritsa ntchito njira yodutsa dera, titha kukonza "kutumiza kwa canary", kusintha pang'ono magalimoto kupita ku mtundu watsopano wautumiki, kapena titha kuchepetsa kuyanjana kwakunja ndikuwongolera maulendo onse kuchokera pagulu kupita ku maukonde akunja. Ndizotheka kukhazikitsa malamulo oyendetsera maulendo pakati pa ma microservices osiyanasiyana. Pomaliza, titha kupeza mapu onse olumikizana ndi netiweki ndikupanga zophatikiza zofananira kuti ziwonekere pamapulogalamu.
Mukhoza kuwerenga za ndondomeko ya ntchito mu zolemba zovomerezeka. Istio ndi chida champhamvu kwambiri chomwe chimakulolani kuthetsa ntchito ndi mavuto ambiri. M'nkhaniyi, ndikufuna kuyankha mafunso akuluakulu omwe nthawi zambiri amakhalapo akayamba ndi Istio. Izi zikuthandizani kuthana nazo mwachangu.
Momwe ntchito
Istio ili ndi madera awiri akuluakulu - ndege yolamulira ndi ndege ya data. Ndege yolamulira imakhala ndi zigawo zikuluzikulu zomwe zimatsimikizira kuti zotsalazo zikuyenda bwino. M'mawonekedwe amakono (1.0) ndege yolamulira ili ndi zigawo zitatu zazikulu: Woyendetsa, Wosakaniza, Citadel. Sitingaganizire za Citadel, ikufunika kuti ipange ziphaso kuti zitsimikizire kuti pali mgwirizano wa TLS pakati pa mautumiki. Tiyeni tiwone bwinobwino chipangizo ndi cholinga cha Pilot ndi Mixer.
Mixer ndi gawo la ndege losasankha lomwe limakupatsani mwayi wotolera ma metric, logi, ndi chidziwitso chilichonse chokhudza kulumikizana kwa netiweki. Amayang'aniranso kutsatiridwa kwa malamulo a Policy komanso kutsata malire a mitengo.
Ndege ya data imayendetsedwa pogwiritsa ntchito zotengera zam'mbali. Mphamvu imagwiritsidwa ntchito ndi kusakhazikika. nthumwi ya nthumwi. Itha kusinthidwa ndi kukhazikitsa kwina, monga nginx (nginmesh).
Zotengera za Sidecar zimalumikizidwa ndi Pilot pogwiritsa ntchito protocol ya GRPC, yomwe imakulolani kukhathamiritsa mtundu wokankhira pazosintha zomwe zimachitika pagulu. GRPC yakhala ikugwiritsidwa ntchito mu Envoy kuyambira mtundu 1.6, ku Istio yakhala ikugwiritsidwa ntchito kuyambira mtundu wa 0.8 ndipo ndi woyendetsa ndege - chomangira cha golang pa nthumwi chomwe chimakonza zosankha zoyambitsa.
Pilot ndi Mixer ndizinthu zopanda malire, mayiko onse amakumbukiridwa. Kukonzekera kwawo kumayikidwa mu mawonekedwe a Kubernetes Custom Resources, omwe amasungidwa etcd.
Wothandizira Istio amalandira adilesi ya Woyendetsa ndegeyo ndikutsegula mtsinje wa GRPC.
Kutengera njira yojambulira chidebe cha sidecar, chidebe cha istio-init ndi chidebe cha istio-agent (mthumwi) amawonjezedwa pamlingo wogwiritsa ntchito kasinthidwe, kapena akhoza kuyikidwa kale pamanja pofotokozera za Kubernetes Pod.
Chidebe cha istio-init ndi script yomwe imagwiritsa ntchito malamulo a iptables pa pod. Pali njira ziwiri zosinthira magalimoto kuti azikulungidwa mu chidebe cha istio-agent: gwiritsani ntchito malamulo owongolera a iptables, kapena Chithunzi cha TPROXY. Panthawi yolemba, njira yosasinthika imakhala ndi malamulo owongolera. Mu istio-init, ndizotheka kukonza magalimoto omwe ayenera kulumikizidwa ndikutumizidwa kwa istio-agent. Mwachitsanzo, kuti muchepetse magalimoto onse omwe akubwera komanso otuluka, muyenera kukhazikitsa magawo -i и -b mu mtengo *. Mutha kutchula madoko ena kuti mutseke. Kuti musasokoneze subnet inayake, mutha kufotokozera pogwiritsa ntchito mbendera -x.
Zotengera za init zikatha, zazikulu zimayambitsidwa, kuphatikiza woyendetsa ndege (mtumiki). Imalumikizana ndi Woyendetsa ndege yemwe watumizidwa kale kudzera pa GRPC ndipo imalandira chidziwitso cha mautumiki onse omwe alipo komanso ndondomeko zamayendetsedwe mgululi. Malinga ndi zomwe adalandira, amakonza maguluwo ndikuwapatsa mwachindunji kumapeto kwa ntchito zathu mgulu la Kubernetes. M'pofunikanso kuzindikira mfundo yofunika: nthumwi imakonza omvera (IP, ma port pairs) omwe amayamba kumvetsera. Chifukwa chake, zopempha zikalowa mu pod, zimatumizidwanso pogwiritsa ntchito malamulo a redirect iptables mu sidecar, nthumwi imatha kukonza bwino maulumikizidwewa ndikumvetsetsa komwe angapititse patsogolo magalimoto. Komanso panthawiyi, zambiri zimatumizidwa kwa Mixer, zomwe tidzayang'ana pambuyo pake, ndipo maulendo otsata amatumizidwa.
Zotsatira zake, timapeza maukonde onse a ma seva oyimira nthumwi omwe titha kuwakonza kuchokera ku mfundo imodzi (Pilot). Zopempha zonse zolowa ndi zotuluka zimadutsa mwa nthumwi. Kuphatikiza apo, magalimoto a TCP okha ndi omwe amalumikizidwa. Izi zikutanthauza kuti Kubernetes service IP imathetsedwa pogwiritsa ntchito kube-dns pa UDP osasintha. Kenako, chigamulocho chitatha, pempho lomwe likutuluka limalandidwa ndikukonzedwa ndi nthumwi, yomwe imasankha kale kuti pempholo liyenera kutumizidwa kwa (kapena osatumizidwa, pankhani ya mfundo zopezera kapena wophwanya algorithm).
Tidalingalira Pilot, tsopano tikuyenera kumvetsetsa momwe Mixer imagwirira ntchito komanso chifukwa chake ikufunika. Mutha kuwerenga zolemba zovomerezeka za izo apa.
Chosakaniza mu mawonekedwe ake amakono chimakhala ndi zigawo ziwiri: istio-telemetry, istio-policy (pambuyo pa 0.8 inali gawo limodzi la istio-mixer). Onsewa ndi osakaniza, omwe ali ndi udindo pa ntchito yake. Istio telemetry imalandira zambiri za yemwe amapita kuti ndi magawo ati kuchokera m'matumba a sidecar Report kudzera pa GRPC. Ndondomeko ya Istio imavomereza Chongani zopempha kuti zitsimikizire kuti malamulo a Policy akwaniritsidwa. Macheke a ndondomeko, ndithudi, samachitidwa pa pempho lililonse, koma amasungidwa pa kasitomala (m'galimoto yam'mbali) kwa nthawi inayake. Macheke amalipoti amatumizidwa ngati zopempha zamagulu. Tiyeni tiwone momwe tingakhazikitsire komanso magawo omwe ayenera kutumizidwa pambuyo pake.
The Mixer ikuyenera kukhala gawo lopezeka kwambiri lomwe limatsimikizira ntchito yosasokoneza pakusonkhanitsa ndi kukonza deta ya telemetry. Dongosololi limapezedwa chifukwa chachitetezo chamitundu yambiri. Poyamba, deta ndi buffered pa sidecar mbali ya muli, ndiye pa chosakanizira mbali, ndiyeno anatumiza kwa otchedwa osakaniza backends. Zotsatira zake, ngati gawo lililonse ladongosolo likulephera, buffer imakula ndikuthamangitsidwa dongosolo likabwezeretsedwa. Mixer backends ndi malekezero otumizira deta ya telemetry: statsd, newrelic, etc. Mutha kulemba zanu zakumbuyo, ndizosavuta, ndipo tiwona momwe tingachitire.
Mwachidule, chiwembu chogwirira ntchito ndi istio-telemetry ndi motere.
Istio-telemetry imatumiza lipoti la data ku backend ngati pakufunika.
Tsopano tiyeni tiwone momwe tingagwiritsire ntchito Istio mu dongosolo, lopangidwa ndi zigawo zikuluzikulu zokha (woyendetsa ndege ndi nthumwi ya sidecar).
Choyamba, tiyeni tiwone masinthidwe akulu (ma mesh) omwe Pilot amawerenga:
apiVersion: v1
kind: ConfigMap
metadata:
name: istio
namespace: istio-system
labels:
app: istio
service: istio
data:
mesh: |-
# пока что не включаем отправку tracing информации (pilot настроит envoy’и таким образом, что отправка не будет происходить)
enableTracing: false
# пока что не указываем mixer endpoint’ы, чтобы sidecar контейнеры не отправляли информацию туда
#mixerCheckServer: istio-policy.istio-system:15004
#mixerReportServer: istio-telemetry.istio-system:15004
# ставим временной промежуток, с которым будет envoy переспрашивать Pilot (это для старой версии envoy proxy)
rdsRefreshDelay: 5s
# default конфигурация для envoy sidecar
defaultConfig:
# аналогично как rdsRefreshDelay
discoveryRefreshDelay: 5s
# оставляем по умолчанию (путь к конфигурации и бинарю envoy)
configPath: "/etc/istio/proxy"
binaryPath: "/usr/local/bin/envoy"
# дефолтное имя запущенного sidecar контейнера (используется, например, в именах сервиса при отправке tracing span’ов)
serviceCluster: istio-proxy
# время, которое будет ждать envoy до того, как он принудительно завершит все установленные соединения
drainDuration: 45s
parentShutdownDuration: 1m0s
# по умолчанию используются REDIRECT правила iptables. Можно изменить на TPROXY.
#interceptionMode: REDIRECT
# Порт, на котором будет запущена admin панель каждого sidecar контейнера (envoy)
proxyAdminPort: 15000
# адрес, по которому будут отправляться trace’ы по zipkin протоколу (в начале мы отключили саму отправку, поэтому это поле сейчас не будет использоваться)
zipkinAddress: tracing-collector.tracing:9411
# statsd адрес для отправки метрик envoy контейнеров (отключаем)
# statsdUdpAddress: aggregator:8126
# выключаем поддержку опции Mutual TLS
controlPlaneAuthPolicy: NONE
# адрес, на котором будет слушать istio-pilot для того, чтобы сообщать информацию о service discovery всем sidecar контейнерам
discoveryAddress: istio-pilot.istio-system:15007
Zigawo zonse zazikulu zowongolera (ndege yowongolera) zizipezeka mu namespace istio-system ku Kubernetes.
Pang'ono ndi pang'ono, timangofunika kutumiza Pilot. Kwa izi tidzagwiritsa ntchito kasinthidwe kotere.
Ndipo tidzakonza pamanja jekeseni wam'mbali mwa chidebecho.