Чӣ тавр Истио бо истифода аз Kubernetes дар истеҳсолот кор кардан мумкин аст. Қисми 1

чӣ Истио? Ин шабакаи хидматрасонӣ номида мешавад, технологияест, ки қабати абстраксияро дар шабака илова мекунад. Мо ҳама ё як қисми трафикро дар кластер боздошта, бо он маҷмӯи муайяни амалиётҳоро иҷро мекунем. Кадомаш? Масалан, мо масири оқилона мекунем ё равиши ноқилро амалӣ менамоем, мо метавонем "ҷойгиркунии canary" -ро ташкил карда, қисман интиқоли трафикро ба версияи нави хидмат гузаронем ё мо метавонем ҳамкориҳои берунаро маҳдуд кунем ва ҳама сафарҳоро аз кластер ба кластер назорат кунем. шабакаи беруна. Қоидаҳои сиёсатро барои назорати сафарҳо байни хидматрасониҳои гуногун муқаррар кардан мумкин аст. Ниҳоят, мо метавонем тамоми харитаи ҳамкории шабакаро ба даст орем ва маҷмӯи ягонаи метрикаро барои барномаҳо комилан шаффоф гардонем.

Шумо метавонед дар бораи механизми кор дар ҳуҷҷатҳои расмӣ. Истио як воситаи воқеан пурқувватест, ки ба шумо имкон медиҳад, ки бисёр вазифаҳо ва мушкилотро ҳал кунед. Дар ин мақола, ман мехоҳам ба саволҳои асосӣ, ки одатан ҳангоми оғози кор бо Истио пайдо мешаванд, ҷавоб диҳам. Ин ба шумо кӯмак мекунад, ки бо он зудтар мубориза баред.

Чӣ тавр Истио бо истифода аз Kubernetes дар истеҳсолот кор кардан мумкин аст. Қисми 1

Чӣ тавр он кор мекунад

Истио аз ду самти асосй — самолёти идоракунй ва самолёти маълумот иборат аст. Ҳавопаймои идоракунӣ ҷузъҳои асосиро дар бар мегирад, ки кори дурусти боқимондаро таъмин мекунанд. Дар версияи ҷорӣ (1.0) ҳавопаймои идоракунӣ се ҷузъи асосӣ дорад: Pilot, Mixer, Citadel. Мо Citadel-ро баррасӣ намекунем, барои тавлиди сертификатҳо барои таъмини TLS байни хидматҳо лозим аст. Биёед ба дастгоҳ ва ҳадафи Pilot and Mixer муфассалтар назар андозем.

Чӣ тавр Истио бо истифода аз Kubernetes дар истеҳсолот кор кардан мумкин аст. Қисми 1

Пилот ҷузъи асосии идоракунӣ мебошад, ки тамоми маълумотро дар бораи он чизе, ки мо дар кластер дорем - хидматҳо, нуқтаҳои ниҳоии онҳо ва қоидаҳои масир (масалан, қоидаҳои ҷойгиркунии Канария ё қоидаҳои вайронкуни) паҳн мекунад.

Миксер як ҷузъи ихтиёрии ҳавопаймо мебошад, ки қобилияти ҷамъоварии метрика, гузоришҳо ва ҳама гуна маълумотро дар бораи ҳамкории шабакаро таъмин мекунад. Вай инчунин риояи қоидаҳои Сиёсат ва риояи маҳдудиятҳои тарифиро назорат мекунад.

Ҳавопаймои маълумот бо истифода аз контейнерҳои проксии канорӣ амалӣ карда мешавад. Powerful бо нобаёнӣ истифода мешавад. намояндаи ваколатдор. Онро метавон бо татбиқи дигар иваз кард, ба монанди nginx (nginmesh).

Барои он ки Истио ба замимаҳо комилан шаффоф кор кунад, системаи автоматии сӯзандору мавҷуд аст. Татбиқи охирин барои версияҳои Kubernetes 1.9+ мувофиқ аст (вебхуки қабули мутатсия). Барои версияҳои Kubernetes 1.7, 1.8 мумкин аст Initializer истифода шавад.

Контейнерҳои паҳлӯӣ бо истифода аз протоколи GRPC ба Pilot пайваст карда мешаванд, ки ба шумо имкон медиҳад модели push-ро барои тағирот дар кластер оптимизатсия кунед. GRPC дар Envoy аз версияи 1.6 истифода мешавад, дар Истио он аз версияи 0.8 истифода мешавад ва як пилот-агент аст - як печи голанг бар фиристодан, ки имконоти оғозро танзим мекунад.

Пилот ва Миксер ҷузъҳои комилан бидуни шаҳрвандӣ мебошанд, ҳама ҳолат дар хотира нигоҳ дошта мешаванд. Конфигуратсия барои онҳо дар шакли Resources Custom Kubernetes муқаррар карда шудааст, ки дар ва ғайра нигоҳ дошта мешаванд.
Истио-агент суроғаи Пилотро мегирад ва ба он ҷараёни GRPC мекушояд.

Тавре ки ман гуфтам, Istio тамоми функсияҳоро барои барномаҳо комилан шаффоф татбиқ мекунад. Биёед бубинем, ки чӣ тавр. Алгоритм ин аст:

  1. Ҷойгир кардани версияи нави хидмат.
  2. Вобаста аз равиши сӯзандоруи контейнери паҳлӯӣ, контейнери istio-init ва контейнери истио-агент (фиристода) дар марҳилаи татбиқи конфигуратсия илова карда мешаванд ё онҳоро аллакай ба тавсифи объекти Kubernetes Pod дастӣ ворид кардан мумкин аст.
  3. Контейнери istio-init скриптест, ки қоидаҳои iptables-ро ба подк татбиқ мекунад. Ду вариант барои танзими трафик вуҷуд дорад, ки дар контейнери истио-агент печонида шавад: қоидаҳои масиркунии iptables-ро истифода баред ё TPROXY. Ҳангоми навиштан, равиши пешфарз бо қоидаҳои масир аст. Дар istio-init метавон танзим кард, ки кадом трафик бояд боздошта шавад ва ба istio-agent фиристода шавад. Масалан, барои боздоштани ҳама трафики воридотӣ ва содиротӣ, шумо бояд параметрҳоро муқаррар кунед -i и -b ба маъно *. Шумо метавонед портҳои мушаххасро барои боздоштани он муайян кунед. Барои он ки зершабакаи мушаххасро халалдор накунед, шумо метавонед онро бо истифода аз парчам муайян кунед -x.
  4. Пас аз иҷрои контейнерҳои ибтидоӣ, контейнерҳои асосӣ, аз ҷумла пилот-агент (фиристода) ба кор андохта мешаванд. Он ба Пилоти аллакай ҷойгиршуда тавассути GRPC пайваст мешавад ва дар бораи ҳама хидматҳои мавҷуда ва сиёсати масир дар кластер маълумот мегирад. Мувофиқи маълумоти гирифташуда, вай кластерҳоро танзим мекунад ва онҳоро мустақиман ба нуқтаҳои ниҳоии замимаҳои мо дар кластери Kubernetes таъин мекунад. Инчунин як нуктаи муҳимро қайд кардан лозим аст: фиристодашуда шунавандагонро (IP, ҷуфтҳои порт), ки гӯш карданро оғоз мекунад, ба таври динамикӣ танзим мекунад. Аз ин рӯ, вақте ки дархостҳо ба подкаст ворид мешаванд, бо истифода аз қоидаҳои масир iptables дар канори вагон равона карда мешаванд, фиристода метавонад аллакай ин пайвастҳоро бомуваффақият коркард кунад ва бифаҳмад, ки минбаъд трафикро дар куҷо прокси кардан лозим аст. Инчунин дар ин марҳила, маълумот ба Миксер фиристода мешавад, ки мо онро дертар баррасӣ хоҳем кард ва фосилаҳои пайгирӣ фиристода мешаванд.

Дар натиҷа, мо як шабакаи пурраи серверҳои прокси-фиристодаро ба даст меорем, ки онҳоро аз як нуқта танзим карда метавонем (Пилот). Ҳама дархостҳои воридотӣ ва содиротӣ тавассути фиристода мешаванд. Ғайр аз он, танҳо трафики TCP боздошта мешавад. Ин маънои онро дорад, ки IP хидмати Kubernetes бо истифода аз kube-dns тавассути UDP бидуни тағир ҳал карда мешавад. Сипас, пас аз ҳал, дархости содиротӣ аз ҷониби фиристода боздошт ва коркард карда мешавад, ки аллакай тасмим мегирад, ки дархост бояд ба кадом нуқтаи ниҳоӣ фиристода шавад (ё фиристода нашавад, дар ҳолати сиёсати дастрасӣ ё ноқилҳои алгоритм).

Мо Пилотро фаҳмидем, ҳоло мо бояд фаҳмем, ки Mixer чӣ гуна кор мекунад ва чаро он лозим аст. Шумо метавонед ҳуҷҷатҳои расмии онро хонед дар ин ҷо.

Миксер дар шакли ҳозираи худ аз ду ҷузъ иборат аст: истио-телеметрия, истио-полисия (пеш аз версияи 0.8 он як ҷузъи истио-миксер буд). Ҳардуи онҳо миксер мебошанд, ки ҳар яки онҳо барои вазифаи худ масъуланд. Телеметрии Истио маълумотро дар бораи он, ки кӣ ба куҷо ва бо кадом параметрҳо аз контейнерҳои ҳисоботӣ тавассути GRPC меравад, мегирад. Istio-policy дархостҳои Санҷиширо қабул мекунад, то тасдиқ кунад, ки қоидаҳои Сиёсат қонеъанд. Санҷишҳои сиёсат, албатта, на барои ҳар як дархост анҷом дода мешаванд, балки дар муштарӣ (дар паҳлӯи паҳлӯ) барои як муддати муайян кэш карда мешаванд. Санҷишҳои гузориш ҳамчун дархости дастаҷамъӣ фиристода мешаванд. Биёед бубинем, ки чӣ тавр ба танзим дароред ва кадом параметрҳо бояд каме дертар фиристода шаванд.

Миксер бояд як ҷузъи хеле дастрас бошад, ки кори бефосиларо дар ҷамъоварӣ ва коркарди маълумоти телеметрӣ таъмин мекунад. Система дар натиҷа ҳамчун буфери бисёрсатҳа ба даст оварда мешавад. Дар аввал, маълумот дар тарафи паҳлӯи контейнерҳо буфер карда мешавад, баъд дар тарафи миксер ва сипас ба ақибҳои ба истилоҳ миксер фиристода мешавад. Дар натиҷа, агар яке аз ҷузъҳои система ноком шавад, буфер калон мешавад ва пас аз барқарор шудани система тоза мешавад. Пойгоҳҳои миксер нуқтаҳои ниҳоӣ барои фиристодани маълумоти телеметрӣ мебошанд: statsd, newrelic ва ғайра. Шумо метавонед пуштибони худро нависед, ин хеле содда аст ва мо мебинем, ки чӣ тавр ин корро кардан мумкин аст.

Чӣ тавр Истио бо истифода аз Kubernetes дар истеҳсолот кор кардан мумкин аст. Қисми 1

Хулоса, схемаи кор бо истио-телеметрия чунин аст.

  1. Хидмати 1 ба хидмати 2 дархост мефиристад.
  2. Ҳангоми баромадан аз хидмати 1, дархост дар канори худ печонида мешавад.
  3. Намояндаи Sidecar назорат мекунад, ки чӣ гуна дархост ба хидмати 2 меравад ва маълумоти заруриро омода мекунад.
  4. Сипас онро бо истифода аз дархости Ҳисобот ба истио-телеметрия мефиристад.
  5. Истио-телеметрия муайян мекунад, ки оё ин Ҳисобот бояд ба пуштибонҳо фиристода шавад, ба кадом ва кадом маълумот фиристода шавад.
  6. Истио-телеметрия агар лозим бошад, маълумоти Ҳисоботро ба пуштибонӣ мефиристад.

Акнун биёед бубинем, ки чӣ тавр Istio -ро дар система ҷойгир кардан мумкин аст, ки танҳо аз ҷузъҳои асосӣ иборат аст (пилот ва фиристодаи паҳлӯ).

Аввалан, биёед конфигуратсияи асосиро (меш), ки Пилот мехонад, бубинем:

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

Ҳама ҷузъҳои асосии идоракунӣ (ҳавопаймои идоракунӣ) дар системаи истио-фазои ном дар Кубернетес ҷойгир хоҳанд шуд.

Ҳадди ақал ба мо лозим аст, ки Пилотро ҷойгир кунем. Барои ин мо истифода мебарем чунин конфигуратсия.

Ва мо канори сӯзандоруи контейнерро дастӣ танзим мекунем.

Контейнери ибтидоӣ:

initContainers:
 - name: istio-init
   args:
   - -p
   - "15001"
   - -u
   - "1337"
   - -m
   - REDIRECT
   - -i
   - '*'
   - -b
   - '*'
   - -d
   - ""
   image: istio/proxy_init:1.0.0
   imagePullPolicy: IfNotPresent
   resources:
     limits:
       memory: 128Mi
   securityContext:
     capabilities:
       add:
       - NET_ADMIN

Ва вагонча:

       name: istio-proxy
       args:
         - "bash"
         - "-c"
         - |
           exec /usr/local/bin/pilot-agent proxy sidecar 
           --configPath 
           /etc/istio/proxy 
           --binaryPath 
           /usr/local/bin/envoy 
           --serviceCluster 
           service-name 
           --drainDuration 
           45s 
           --parentShutdownDuration 
           1m0s 
           --discoveryAddress 
           istio-pilot.istio-system:15007 
           --discoveryRefreshDelay 
           1s 
           --connectTimeout 
           10s 
           --proxyAdminPort 
           "15000" 
           --controlPlaneAuthPolicy 
           NONE
         env:
         - name: POD_NAME
           valueFrom:
             fieldRef:
               fieldPath: metadata.name
         - name: POD_NAMESPACE
           valueFrom:
             fieldRef:
               fieldPath: metadata.namespace
         - name: INSTANCE_IP
           valueFrom:
             fieldRef:
               fieldPath: status.podIP
         - name: ISTIO_META_POD_NAME
           valueFrom:
             fieldRef:
               fieldPath: metadata.name
         - name: ISTIO_META_INTERCEPTION_MODE
           value: REDIRECT
         image: istio/proxyv2:1.0.0
         imagePullPolicy: IfNotPresent
         resources:
           requests:
             cpu: 100m
             memory: 128Mi
           limits:
             memory: 2048Mi
         securityContext:
           privileged: false
           readOnlyRootFilesystem: true
           runAsUser: 1337
         volumeMounts:
         - mountPath: /etc/istio/proxy
           name: istio-envoy

Барои он ки ҳама чиз бомуваффақият оғоз шавад, шумо бояд ServiceAccount, ClusterRole, ClusterRoleBinding, CRD for Pilot эҷод кунед, ки тавсифи онҳоро метавон пайдо кард. дар ин ҷо.

Дар натиҷа, хидмате, ки мо ба он варақаи ёрирасон ворид мекунем, бояд бомуваффақият оғоз шавад, ҳама кашфиётҳоро аз пилот қабул кунад ва дархостҳоро коркард кунад.

Фаҳмидани он муҳим аст, ки ҳамаи ҷузъҳои ҳавопаймои идоракунӣ барномаҳои бидуни шаҳрвандӣ мебошанд ва онҳоро бе мушкилот ба таври уфуқӣ миқёс кардан мумкин аст. Ҳама маълумотҳо дар etcd дар шакли тавсифи фармоишии захираҳои Kubernetes нигоҳ дошта мешаванд.

Инчунин, Истио (ҳанӯз таҷрибавӣ аст) қобилияти кор кардан дар берун аз кластер ва қобилияти тамошо ва кашфи хидматро дар байни якчанд кластерҳои Kubernetes дорад. Шумо метавонед дар ин бора бештар хонед дар ин ҷо.

Барои насби бисёр кластер, аз маҳдудиятҳои зерин огоҳ бошед:

  1. Pod CIDR ва Service CIDR бояд дар тамоми кластерҳо беназир бошанд ва набояд такрор шаванд.
  2. Ҳама CIDR Pods бояд аз ҳама гуна CIDR Pods байни кластерҳо дастрас бошанд.
  3. Ҳама серверҳои API Kubernetes бояд ба ҳамдигар дастрас бошанд.

Ин маълумоти аввалаест, ки ба шумо дар оғоз кардани Истио кӯмак мекунад. Бо вуҷуди ин, ҳанӯз ҳам камбудиҳо зиёданд. Масалан, хусусиятҳои масири трафики беруна (берун аз кластер), равишҳо барои ислоҳи хатогиҳо, профилсозӣ, насб кардани миксер ва навиштани пуштибонии миксер, танзими механизми пайгирӣ ва кори он бо истифода аз фиристодан.
Ҳамаи инро мо дар нашрияҳои минбаъда баррасӣ хоҳем кард. Саволҳои худро пурсед, ман кӯшиш мекунам, ки онҳоро фаро гирам.

Манбаъ: will.com

Илова Эзоҳ