Kif tmexxi Istio billi tuża Kubernetes fil-produzzjoni. Parti 1
X'inhu Istio? Din hija l-hekk imsejħa Service mesh, teknoloġija li żżid saff ta 'estrazzjoni fuq in-netwerk. Aħna ninterċettaw it-traffiku kollu jew parti minnu fil-cluster u nwettqu ċertu sett ta 'operazzjonijiet miegħu. Liema? Pereżempju, nagħmlu routing intelliġenti, jew nimplimentaw l-approċċ ta 'circuit breaker, nistgħu norganizzaw "skjerament tal-kanarji", naqleb parzjalment it-traffiku għal verżjoni ġdida tas-servizz, jew nistgħu nillimitaw l-interazzjonijiet esterni u nikkontrollaw il-vjaġġi kollha mill-cluster sal- netwerk estern. Huwa possibbli li jiġu stabbiliti regoli ta' politika biex jiġu kkontrollati l-vjaġġi bejn mikroservizzi differenti. Fl-aħħarnett, nistgħu niksbu l-mappa kollha tal-interazzjoni tan-netwerk u nagħmlu l-ġbir unifikat ta 'metriċi kompletament trasparenti għall-applikazzjonijiet.
Tista 'taqra dwar il-mekkaniżmu tax-xogħol fi dokumentazzjoni uffiċjali. Istio hija għodda tassew qawwija li tippermettilek issolvi ħafna kompiti u problemi. F'dan l-artikolu, nixtieq inwieġeb il-mistoqsijiet ewlenin li normalment iqumu meta nibda b'Istio. Dan jgħinek tittrattaha aktar malajr.
Prinċipju ta 'operazzjoni
Istio jikkonsisti f'żewġ oqsma ewlenin - il-pjan ta 'kontroll u l-pjan tad-dejta. Il-pjan ta 'kontroll fih il-komponenti ewlenin li jiżguraw it-tħaddim korrett tal-bqija. Fil-verżjoni attwali (1.0) il-pjan ta 'kontroll għandu tliet komponenti ewlenin: Pilota, Mixer, Ċittadella. Aħna mhux se nikkunsidraw iċ-Ċittadella, huwa meħtieġ li niġġeneraw ċertifikati biex niżguraw TLS reċiproku bejn is-servizzi. Ejja nagħtu ħarsa aktar mill-qrib lejn l-apparat u l-iskop ta 'Pilot u Mixer.
Il-pilota huwa l-komponent ewlieni tal-kontroll li jqassam l-informazzjoni kollha dwar dak li għandna fil-cluster - is-servizzi, l-endpoints tagħhom u r-regoli tar-rotot (pereżempju, regoli għall-iskjerament tal-Kanarji jew regoli dwar circuit breaker).
Mixer huwa komponent fakultattiv tal-pjan ta 'kontroll li jipprovdi l-abbiltà li jiġbor metriċi, zkuk, u kwalunkwe informazzjoni dwar l-interazzjoni tan-netwerk. Huwa jissorvelja wkoll il-konformità mar-regoli tal-Politika u l-konformità mal-limiti tar-rati.
Il-pjan tad-dejta huwa implimentat bl-użu ta 'kontenituri ta' prokura sidecar. Qawwija tintuża awtomatikament. prokura mibgħuta. Jista 'jiġi sostitwit b'implimentazzjoni oħra, bħal nginx (nginmesh).
Sabiex Istio jaħdem kompletament trasparenti għall-applikazzjonijiet, hemm sistema ta 'injezzjoni awtomatika. L-aħħar implimentazzjoni hija adattata għall-verżjonijiet ta 'Kubernetes 1.9+ (webhook ta' ammissjoni mutazzjonali). Għall-verżjonijiet Kubernetes 1.7, 1.8 huwa possibbli li tuża l-Initializer.
Il-kontenituri sidecar huma konnessi mal-Pilot bl-użu tal-protokoll GRPC, li jippermettilek li tottimizza l-mudell push għal bidliet li jseħħu fil-cluster. GRPC ilu jintuża f'Envoy mill-verżjoni 1.6, f'Istio ilu jintuża mill-verżjoni 0.8 u huwa pilota-aġent - tgeżwir ta 'golang fuq mibgħut li jikkonfigura l-għażliet ta' tnedija.
Pilot u Mixer huma komponenti kompletament mingħajr stat, l-istat kollu jinżamm fil-memorja. Il-konfigurazzjoni għalihom hija stabbilita fil-forma ta 'Kubernetes Custom Resources, li huma maħżuna f'etcd.
Istio-agent jikseb l-indirizz tal-Pilota u jiftaħ fluss GRPC għalih.
Kif għedt, Istio jimplimenta l-funzjonalità kollha kompletament trasparenti għall-applikazzjonijiet. Ejja naraw kif. L-algoritmu huwa dan:
L-iskjerament ta' verżjoni ġdida tas-servizz.
Skont l-approċċ tal-injezzjoni tal-kontenitur sidecar, il-kontenitur istio-init u l-kontenitur istio-aġent (mibgħut) huma miżjuda fl-istadju tal-applikazzjoni tal-konfigurazzjoni, jew diġà jistgħu jiddaħħlu manwalment fid-deskrizzjoni tal-entità Kubernetes Pod.
Il-kontenitur istio-init huwa skript li japplika r-regoli iptables għall-pod. Hemm żewġ għażliet għall-konfigurazzjoni tat-traffiku biex ikun imgeżwer f'kontenitur istio-agent: uża r-regoli ta' redirect iptables, jew TPROXY. Fiż-żmien tal-kitba, l-approċċ default huwa b'regoli ta 'ridirezzjoni. F'istio-init, huwa possibbli li jiġi kkonfigurat liema traffiku għandu jiġi interċettat u mibgħut lil istio-agent. Pereżempju, sabiex tinterċetta t-traffiku kollu deħlin u ħerġin kollu, għandek bżonn tissettja l-parametri -i и -b fis-sens *. Tista 'tispeċifika portijiet speċifiċi biex jinterċettaw. Sabiex ma tinterċettax subnet speċifiku, tista' tispeċifikaha billi tuża l-bandiera -x.
Wara li jiġu esegwiti l-kontenituri init, jitnedew dawk ewlenin, inkluż il-pilota-aġent (mibgħut). Hija tikkonnettja mal-Pilota diġà skjerata permezz tal-GRPC u tirċievi informazzjoni dwar is-servizzi eżistenti kollha u l-politiki tar-rotot fil-cluster. Skont id-dejta riċevuta, huwa jikkonfigura l-clusters u jassenjahom direttament lill-endpoints tal-applikazzjonijiet tagħna fil-cluster Kubernetes. Huwa wkoll meħtieġ li wieħed jinnota punt importanti: l-envoy jikkonfigura s-semmiegħa b'mod dinamiku (IP, pari ta 'port) li jibda jisma'. Għalhekk, meta t-talbiet jidħlu fil-pod, huma ridiretti bl-użu tar-regoli iptables redirect fis-sidecar, l-envoy diġà jista 'jipproċessa b'suċċess dawn il-konnessjonijiet u jifhem fejn ikompli jipprokura t-traffiku. F'dan l-istadju wkoll, l-informazzjoni tintbagħat lill-Mixer, li se nħarsu lejh aktar tard, u jintbagħtu spans ta 'traċċar.
Bħala riżultat, ikollna netwerk sħiħ ta 'servers prokura tal-mibgħut li nistgħu kkonfiguraw minn punt wieħed (Pilot). It-talbiet kollha deħlin u ħerġin jgħaddu minn mibgħut. Barra minn hekk, it-traffiku TCP biss huwa interċettat. Dan ifisser li l-IP tas-servizz Kubernetes jiġi solvut bl-użu ta 'kube-dns fuq UDP mingħajr ma jinbidel. Imbagħad, wara r-riżoluzzjoni, it-talba ħerġin tiġi interċettata u pproċessata mill-mibgħut, li diġà jiddeċiedi lil liema endpoint għandha tintbagħat it-talba (jew ma tintbagħatx, fil-każ ta 'politiki ta' aċċess jew is-circuit breaker tal-algoritmu).
Aħna dehret Pilot, issa rridu nifhmu kif jaħdem Mixer u għaliex huwa meħtieġ. Tista' taqra d-dokumentazzjoni uffiċjali għaliha hawn.
Mixer fil-forma attwali tiegħu jikkonsisti f'żewġ komponenti: istio-telemetrija, istio-politika (qabel il-verżjoni 0.8 kien komponent wieħed istio-mixer). It-tnejn huma miksers, li kull wieħed minnhom huwa responsabbli għall-kompitu tiegħu stess. Istio telemetry tirċievi informazzjoni dwar min imur fejn u b'liema parametri minn sidecar Report containers permezz tal-GRPC. Istio-policy taċċetta talbiet Iċċekkja biex tivverifika li r-regoli tal-Politika huma sodisfatti. Il-verifiki poilicy, ovvjament, mhumiex imwettqa għal kull talba, iżda huma miżmuma fil-cache fuq il-klijent (fis-sidecar) għal ċertu żmien. Il-kontrolli tar-rapporti jintbagħtu bħala talbiet tal-lott. Ejja naraw kif tikkonfigura u liema parametri għandhom jintbagħtu ftit aktar tard.
Il-Mixer suppost huwa komponent disponibbli ħafna li jiżgura xogħol bla interruzzjoni fuq l-assemblaġġ u l-ipproċessar tad-dejta tat-telemetrija. Is-sistema tinkiseb bħala riżultat bħala buffer f'diversi livelli. Inizjalment, id-data hija buffered fuq in-naħa sidecar tal-kontenituri, imbagħad fuq in-naħa tal-mixer, u mbagħad mibgħuta lill-hekk imsejħa mixer backends. Bħala riżultat, jekk xi wieħed mill-komponenti tas-sistema jfalli, il-buffer jikber u jitlaħlaħ wara li s-sistema tiġi restawrata. Il-backends tal-mixer huma endpoints biex tintbagħat dejta tat-telemetrija: statsd, newrelic, eċċ. Tista 'tikteb backend tiegħek, huwa pjuttost sempliċi, u naraw kif tagħmel dan.
Fil-qosor, l-iskema biex taħdem bl-istio-telemetrija hija kif ġej.
Is-servizz 1 jibgħat talba lis-servizz 2.
Meta titlaq mis-servizz 1, it-talba hija mgeżwra fis-sidecar tagħha stess.
Il-mibgħut tas-sidecar jimmonitorja kif it-talba tmur għas-servizz 2 u jipprepara l-informazzjoni meħtieġa.
Imbagħad tibgħatha lil istio-telemetry billi tuża talba għal Rapport.
Istio-telemetrija tiddetermina jekk dan ir-Rapport għandux jintbagħat lill-backends, lil liema u liema data għandha tintbagħat.
Istio-telemetrija tibgħat id-dejta tar-Rapport lill-backend jekk meħtieġ.
Issa ejja naraw kif tuża Istio fis-sistema, li tikkonsisti biss mill-komponenti ewlenin (pilota u mibgħut sidecar).
L-ewwel, ejja nħarsu lejn il-konfigurazzjoni prinċipali (malji) li Pilot jaqra:
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
Il-komponenti ta 'kontroll prinċipali kollha (pjan ta' kontroll) se jkunu jinsabu fis-sistema istio-istio tal-ispazju tal-isem f'Kubernetes.
Sabiex kollox jibda b'suċċess, għandek bżonn toħloq ServiceAccount, ClusterRole, ClusterRoleBinding, CRD for Pilot, li d-deskrizzjonijiet tiegħu jistgħu jinstabu. hawn.
Bħala riżultat, is-servizz li fih ninjettaw sidecar mal-mibgħut għandu jibda b'suċċess, jirċievi l-iskoperta kollha mill-pilota u jipproċessa t-talbiet.
Huwa importanti li wieħed jifhem li l-komponenti kollha tal-pjan ta 'kontroll huma applikazzjonijiet mingħajr stat u jistgħu jiġu skalati orizzontalment mingħajr problemi. Id-dejta kollha hija maħżuna f'etcd fil-forma ta 'deskrizzjonijiet personalizzati tar-riżorsi Kubernetes.
Ukoll, Istio (għadu sperimentali) għandu l-abbiltà li jimxi barra l-cluster u l-abbiltà li jara u skoperta servizz bejn diversi clusters Kubernetes. Tista' taqra aktar dwar dan hawn.
Għal installazzjoni multi-cluster, kun konxju mil-limitazzjonijiet li ġejjin:
Pod CIDR u Service CIDR għandhom ikunu uniċi fil-clusters kollha u m'għandhomx jikkoinċidu.
Il-CIDR Pods kollha għandhom ikunu aċċessibbli minn kwalunkwe CIDR Pods bejn il-clusters.
Is-servers kollha tal-API Kubernetes għandhom ikunu aċċessibbli għal xulxin.
Din hija l-informazzjoni inizjali biex tgħinek tibda b'Istio. Madankollu, għad hemm ħafna nases. Pereżempju, karatteristiċi ta 'routing tat-traffiku estern (barra l-cluster), approċċi għad-debugging sidecars, profiling, twaqqif ta' mixer u kitba ta 'backend ta' mixer personalizzat, twaqqif ta 'mekkaniżmu ta' traċċar u t-tħaddim tiegħu bl-użu ta 'envoy.
Dan kollu se nikkunsidraw fil-pubblikazzjonijiet li ġejjin. Staqsi l-mistoqsijiet tiegħek, ser nipprova nkoprihom.