Истио ва Кубернетес дар истехсолот. Қисми 2. Пайгирӣ

Дар охир мақола Мо ҷузъҳои асосии Service Mesh Istio-ро дида баромадем, бо система шинос шудем ва ба саволҳои асосӣ, ки одатан ҳангоми оғоз кардани кор бо Истио пайдо мешаванд, ҷавоб додем. Дар ин қисм мо дар бораи чӣ гуна ташкили ҷамъоварии иттилооти пайгирӣ тавассути шабака дида мебароем.

Истио ва Кубернетес дар истехсолот. Қисми 2. Пайгирӣ

Аввалин чизе, ки барои бисёре аз таҳиягарон ва маъмурони система ҳангоми шунидани калимаҳои Service Mesh ба хотир меояд, пайгирӣ аст. Дар ҳақиқат, мо ба ҳар як гиреҳи шабака сервери махсуси прокси илова мекунем, ки тавассути он тамоми трафики TCP мегузарад. Чунин ба назар мерасад, ки ҳоло ба осонӣ фиристодани маълумот дар бораи ҳама робитаҳои шабакавӣ дар шабака имконпазир аст. Мутаассифона, дар асл нозукиҳои зиёде мавҷуданд, ки бояд ба назар гирифта шаванд. Биёед ба онҳо назар андозем.

Фаҳмиши нодурусти рақами XNUMX: мо метавонем маълумоти сайёҳии онлайнро ройгон ба даст орем.

Дар асл, барои нисбатан ройгон, мо метавонем танҳо гиреҳҳои системаи моро бо тирчаҳо пайвастшуда ва суръати маълумоте, ки байни хидматҳо мегузарад (дар асл, танҳо шумораи байтҳо дар як воҳиди вақт) ба даст орем. Аммо, дар аксари ҳолатҳо, хидматҳои мо тавассути як намуди протоколи қабати барномавӣ, ба монанди HTTP, gRPC, Redis ва ғайра муошират мекунанд. Ва, албатта, мо мехоҳем маълумоти пайгирии махсусро барои ин протоколҳо бубинем; мо мехоҳем суръати дархостро бубинем, на суръати маълумот. Мо мехоҳем бо истифода аз протоколи худ таъхири дархостҳоро фаҳмем. Ниҳоят, мо мехоҳем роҳи пурраеро бубинем, ки дархост аз ворид шудан ба системаи мо то гирифтани посух аз корбар мегирад. Ин масъаларо дигар хал кардан осон нест.

Аввалан, биёед бубинем, ки интиқоли фосилаҳои пайгирӣ аз нуқтаи назари меъморӣ дар Истио чӣ гуна аст. Тавре ки мо аз қисми аввал дар хотир дорем, Истио як ҷузъи алоҳида дорад, ки Mixer барои ҷамъоварии телеметрия ном дорад. Аммо, дар версияи кунунии 1.0.*, ирсол мустақиман аз серверҳои прокси, яъне аз прокси фиристодашуда анҷом дода мешавад. Прокси фиристодаи фиристодани фосилаҳои пайгирӣ бо истифода аз протоколи zipkin аз қуттӣ дастгирӣ мекунад. Протоколҳои дигарро пайваст кардан мумкин аст, аммо танҳо тавассути плагин. Бо Istio мо фавран прокси фиристодаи ҷамъшуда ва танзимшударо мегирем, ки танҳо протоколи зипкинро дастгирӣ мекунад. Агар мо хоҳем, ки масалан, протоколи Jaeger-ро истифода барем ва тавассути UDP фосилаҳои пайгирӣ фиристем, пас мо бояд симои истио-проксии худро созем. Дастгирии плагинҳои фармоишӣ барои istio-proxy мавҷуд аст, аммо он ҳоло ҳам дар версияи алфа аст. Аз ин рӯ, агар мо хоҳем, ки бидуни миқдори зиёди танзимоти фармоишӣ кор кунем, доираи технологияҳое, ки барои нигоҳдорӣ ва қабули фосилаҳои пайгирӣ истифода мешаванд, кам карда мешавад. Аз системаҳои асосӣ, дар асл, ҳоло шумо метавонед худи Zipkin ё Jaeger-ро истифода баред, аммо ҳама чизро бо истифода аз протоколи мувофиқи zipkin (ки хеле камсамар аст) фиристед. Худи протоколи zipkin фиристодани ҳама маълумоти пайгирӣро ба коллекторҳо тавассути протоколи HTTP дар бар мегирад, ки хеле гарон аст.

Тавре ки ман аллакай гуфтам, мо мехоҳем протоколҳои сатҳи барномаро пайгирӣ кунем. Ин маънои онро дорад, ки серверҳои прокси, ки дар паҳлӯи ҳар як хидмат қарор доранд, бояд фаҳманд, ки ҳоло чӣ гуна ҳамкорӣ рӯй дода истодааст. Бо нобаёнӣ, Istio ҳама бандарҳоро ба TCP оддӣ танзим мекунад, ки ин маънои онро дорад, ки ҳеҷ гуна пайраҳаҳо фиристода намешаванд. Барои фиристодани пайгирӣ, шумо бояд пеш аз ҳама, ин хосиятро дар конфигуратсияи асосии mesh фаъол созед ва муҳимтар аз ҳама, мувофиқи протоколе, ки дар хидмат истифода мешавад, ҳамаи портҳои объектҳои хидматрасонии kubernetes-ро номбар кунед. Яъне, масалан, чунин аст:

apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  ports:
  - port: 80
    targetPort: 80
    name: http
  selector:
    app: nginx

Шумо инчунин метавонед номҳои мураккабро ба монанди http-magic истифода баред (Istio http-ро мебинад ва он портро ҳамчун нуқтаи ниҳоии http эътироф мекунад). Формат ин аст: proto-extra.

Барои он ки шумораи зиёди конфигуратсияҳоро барои муайян кардани протокол часбонед, шумо метавонед як роҳи ҳалли ифлосро истифода баред: ҷузъи Пилотро дар лаҳзае, ки он танҳо аст, часпонед. мантиқи таърифи протоколро иҷро мекунад. Дар ниҳоят, албатта, ин мантиқро ба стандарт иваз кардан ва ба конвенсияи номгузорӣ барои ҳамаи портҳо гузаштан лозим меояд.

Барои фаҳмидани он, ки оё протокол воқеан дуруст муайян карда шудааст, шумо бояд ба ягон контейнери паҳлӯ бо прокси фиристодашуда ворид шавед ва ба порти администратори интерфейси фиристодашуда бо ҷойгиршавӣ /config_dump муроҷиат кунед. Дар конфигуратсияи натиҷавӣ, шумо бояд ба майдони амалиёти хидматрасонии дилхоҳ назар кунед. Он дар Istio ҳамчун идентификатор барои куҷо дархост карда мешавад, истифода мешавад. Барои танзим кардани арзиши ин параметр дар Istio (мо онро баъдан дар системаи пайгирии худ хоҳем дид), дар марҳилаи ба кор андохтани контейнери паҳлӯ парчами serviceCluster-ро муайян кардан лозим аст. Масалан, онро метавон аз рӯи тағирёбандаҳое, ки аз API-и поёни kubernetes гирифта шудаанд, ҳисоб кардан мумкин аст:

--serviceCluster ${POD_NAMESPACE}.$(echo ${POD_NAME} | sed -e 's/-[a-z0-9]*-[a-z0-9]*$//g')

Намунаи хуб барои фаҳмидани он, ки пайгирӣ дар фиристодашуда чӣ гуна кор мекунад дар ин ҷо.

Худи нуқтаи ниҳоӣ барои фиристодани фосилаҳои пайгирӣ низ бояд дар парчамҳои оғозкунандаи прокси фиристодашуда нишон дода шавад, масалан: --zipkinAddress tracing-collector.tracing:9411

Фаҳмиши нодурусти рақами дуюм: мо метавонем пайгирии пурраи дархостҳоро тавассути система аз қуттӣ ба даст орем

Мутаассифона, ин тавр нест. Мушкилии татбиқ аз он вобаста аст, ки чӣ гуна шумо аллакай ҳамкории мутақобилаи хидматҳоро амалӣ кардаед. Барои чӣ ин?

Гап дар сари он аст, ки барои истио-прокси мутобиқати дархостҳои воридотӣ ба хадамотро бо онҳое, ки аз як хидмат тарк мекунанд, фаҳмида тавонанд, танҳо боздоштани тамоми трафик кофӣ нест. Шумо бояд як навъ муайянкунандаи муошират дошта бошед. Прокси фиристодаи HTTP сарлавҳаҳои махсусро истифода мебарад, ки тавассути онҳо фиристода мефаҳмад, ки кадом дархости мушаххас ба хадамот дархостҳои мушаххасро ба хидматҳои дигар тавлид мекунад. Рӯйхати чунин сарлавҳаҳо:

  • x-дархост-id,
  • x-b3-traceid,
  • x-b3-spanid,
  • x-b3-волидон,
  • x-b3-намуна гирифташуда,
  • x-b3-парчамҳо,
  • x-ot-span-контекст.

Агар шумо як нуқтаи ягона дошта бошед, масалан, муштарии асосӣ, ки дар он шумо метавонед чунин мантиқро илова кунед, пас ҳама чиз хуб аст, шумо бояд интизор шавед, ки ин китобхона барои ҳама муштариён нав карда шавад. Аммо агар шумо системаи хеле гетерогенӣ дошта бошед ва дар гузаштан аз хидмат ба хидмат тавассути шабака ягон муттаҳидшавӣ вуҷуд надошта бошад, пас ин эҳтимолияти мушкилоти бузург хоҳад буд. Бидуни илова кардани чунин мантиқ, ҳама маълумоти пайгирӣ танҳо "яксатҳи" хоҳанд буд. Яъне, мо ҳама муносибатҳои байнихизматрасониро мегирем, аммо онҳо ба занҷирҳои ягонаи гузариш тавассути шабака часпонида намешаванд.

хулоса

Istio як воситаи қулай барои ҷамъоварии иттилооти пайгирӣ тавассути шабака пешниҳод мекунад, аммо шумо бояд фаҳмед, ки барои татбиқ шумо бояд системаи худро мутобиқ кунед ва хусусиятҳои татбиқи Istio-ро ба назар гиред. Дар натиҷа, ду нуқтаи асосиро ҳал кардан лозим аст: муайян кардани протоколи сатҳи барнома (ки бояд аз ҷониби прокси фиристодашуда дастгирӣ карда шавад) ва танзими интиқоли маълумот дар бораи пайвастшавии дархостҳо ба хидмат аз дархостҳои хидмат (бо истифода аз сарлавҳаҳо) , дар мавриди протоколи HTTP). Вақте ки ин масъалаҳо ҳал мешаванд, мо як воситаи пурқувват дорем, ки ба мо имкон медиҳад, ки маълумотро аз шабака, ҳатто дар системаҳои хеле гетерогенӣ, ки бо забонҳо ва чаҳорчӯбаҳои гуногун навишта шудаанд, шаффоф ҷамъоварӣ кунем.

Дар мақолаи навбатӣ дар бораи Service Mesh, мо яке аз мушкилоти калонтарини Istio - истеъмоли зиёди RAM аз ҷониби ҳар як контейнери прокси-сервиро дида мебароем ва муҳокима мекунем, ки чӣ тавр шумо метавонед бо он мубориза баред.

Манбаъ: will.com

Илова Эзоҳ