በምርት ውስጥ Kubernetes ን በመጠቀም Istio ን እንዴት ማስኬድ እንደሚቻል። ክፍል 1

ምን Istio? ይህ ሰርቪስ ሜሽ እየተባለ የሚጠራው ቴክኖሎጂ በኔትወርኩ ላይ የአብስትራክሽን ሽፋንን ይጨምራል። በክላስተር ውስጥ ያለውን ትራፊክ በሙሉ ወይም በከፊል እናቋርጣለን እና የተወሰነ የአሠራር ስብስብ እንሰራለን. የትኛው? ለምሳሌ፣ ስማርት ራውቲንግን እንሰራለን፣ ወይም የሰርቢያ መግቻ ዘዴን እንተገብራለን፣ “የካናሪ ማሰማራት”ን ማደራጀት እንችላለን፣ ትራፊክን በከፊል ወደ አዲስ የአገልግሎቱ ስሪት መቀየር ወይም የውጭ ግንኙነቶችን መገደብ እና ሁሉንም ጉዞዎች ከክላስተር ወደ ውጫዊ አውታረ መረብ. በተለያዩ ጥቃቅን አገልግሎቶች መካከል የሚደረገውን ጉዞ ለመቆጣጠር የፖሊሲ ደንቦችን ማዘጋጀት ይቻላል. በመጨረሻም፣ ሙሉውን የአውታረ መረብ መስተጋብር ካርታ ማግኘት እና የተዋሃደውን የመለኪያዎች ስብስብ ሙሉ ለሙሉ ለመተግበሪያዎች ግልጽ ማድረግ እንችላለን።

ስለ ሥራው አሠራር ማንበብ ይችላሉ ኦፊሴላዊ ሰነዶች. ኢስቲዮ ብዙ ስራዎችን እና ችግሮችን ለመፍታት የሚያስችል በጣም ኃይለኛ መሳሪያ ነው. በዚህ ጽሑፍ ውስጥ ከኢስቲዮ ጋር ሲጀመር አብዛኛውን ጊዜ የሚነሱትን ዋና ጥያቄዎች መመለስ እፈልጋለሁ. ይህ በፍጥነት እንዲቋቋሙት ይረዳዎታል.

በምርት ውስጥ Kubernetes ን በመጠቀም Istio ን እንዴት ማስኬድ እንደሚቻል። ክፍል 1

እንዴት እንደሚሰራ

ኢስቲዮ ሁለት ዋና ቦታዎችን ያቀፈ ነው - የመቆጣጠሪያ አውሮፕላን እና የመረጃ አውሮፕላን. የመቆጣጠሪያው አውሮፕላኑ የቀረውን ትክክለኛ አሠራር የሚያረጋግጡ ዋና ዋና ክፍሎችን ይዟል. አሁን ባለው ስሪት (1.0) የመቆጣጠሪያው አውሮፕላኑ ሶስት ዋና ዋና ክፍሎች አሉት-አብራሪ, ቀላቃይ, Citadel. እኛ Citadelን አንመለከትም ፣ በአገልግሎቶች መካከል የጋራ TLS ለማረጋገጥ የምስክር ወረቀቶችን ማመንጨት ያስፈልጋል። የፓይሎት እና ሚክስከርን መሳሪያ እና አላማ ጠለቅ ብለን እንመርምር።

በምርት ውስጥ Kubernetes ን በመጠቀም Istio ን እንዴት ማስኬድ እንደሚቻል። ክፍል 1

አብራሪ በክላስተር ውስጥ ስላለን ነገር ሁሉንም መረጃ የሚያሰራጭ ዋና የቁጥጥር አካል ነው - አገልግሎቶች ፣ የመጨረሻ ነጥቦቻቸው እና የማዞሪያ ደንቦቹ (ለምሳሌ ለካናሪ ማሰማራት ወይም የወረዳ ተላላፊ ህጎች)።

ሚክስር መለኪያዎችን፣ ምዝግቦችን እና ስለ አውታረ መረብ መስተጋብር ማንኛውንም መረጃ የመሰብሰብ ችሎታ የሚሰጥ የአማራጭ መቆጣጠሪያ አውሮፕላን አካል ነው። እንዲሁም የፖሊሲ ደንቦችን እና የዋጋ ገደቦችን ማክበርን ይቆጣጠራል።

የመረጃው አውሮፕላኑ የሚተገበረው የጎን መኪና ፕሮክሲ ኮንቴይነሮችን በመጠቀም ነው። ኃይለኛ በነባሪነት ጥቅም ላይ ይውላል. መልእክተኛ ተኪ. እንደ nginx (nginmesh) ባሉ ሌላ ትግበራ ሊተካ ይችላል.

ኢስቲዮ ለመተግበሪያዎች ሙሉ በሙሉ ግልጽነት እንዲኖረው, አውቶማቲክ መርፌ ስርዓት አለ. የቅርብ ጊዜ ትግበራ ለ Kubernetes 1.9+ ስሪቶች (ሚውቴሽን የመግቢያ webhook) ተስማሚ ነው። ለ Kubernetes ስሪቶች 1.7, 1.8 ኢንቲየላይዘርን መጠቀም ይቻላል.

የሲዲካር ኮንቴይነሮች የ GRPC ፕሮቶኮልን በመጠቀም ከፓይለት ጋር የተገናኙ ናቸው፣ ይህም በክላስተር ውስጥ ለሚፈጠሩ ለውጦች የግፋ ሞዴሉን እንዲያሳድጉ ያስችልዎታል። GRPC ከስሪት 1.6 ጀምሮ በEnvoy ውስጥ ጥቅም ላይ ውሏል፣ በIstio ከስሪት 0.8 ጀምሮ ጥቅም ላይ ውሏል እና አብራሪ ወኪል ነው - የማስጀመሪያ አማራጮችን የሚያዋቅር የጎላንግ መጠቅለያ።

አብራሪ እና ቀላቃይ ሙሉ በሙሉ ሀገር አልባ አካላት ናቸው፣ ሁሉም ሁኔታ በማህደረ ትውስታ ውስጥ ተቀምጧል። ለእነሱ ያለው ውቅር በ Kubernetes ብጁ መርጃዎች መልክ ተቀምጧል, ወዘተ.
የኢስቲዮ ወኪል የአብራሪውን አድራሻ ያገኛል እና የ GRPC ዥረት ይከፍታል።

እንደተናገርኩት ኢስቲዮ ሁሉንም ተግባራት ሙሉ ለሙሉ ለመተግበሪያዎች ግልጽነት ይሰጣል። እንዴት እንደሆነ እንይ። አልጎሪዝም የሚከተለው ነው-

  1. አዲስ የአገልግሎቱን ስሪት በማሰማራት ላይ።
  2. እንደ የጎን መኪና ኮንቴይነር መርፌ አቀራረብ ላይ በመመርኮዝ የኢስቲዮ-ኢኒት ኮንቴይነር እና የኢስቲዮ-ኤጀንት ኮንቴይነር (መልእክተኛ) አወቃቀሩን በሚተገበርበት ደረጃ ላይ ይጨምራሉ ወይም ቀድሞውኑ በ Kubernetes Pod አካል መግለጫ ውስጥ በእጅ ሊገቡ ይችላሉ።
  3. የኢስቲዮ-ኢኒት ኮንቴይነር የ iptables ደንቦችን በፖድ ላይ የሚተገበር ስክሪፕት ነው። በኢስቲዮ ወኪል ኮንቴይነር ውስጥ የሚታሸገውን ትራፊክ ለማዋቀር ሁለት አማራጮች አሉ፡ የ iptables ማዘዋወር ደንቦችን ይጠቀሙ ወይም TPRoxy. በሚጽፉበት ጊዜ፣ ነባሪው አካሄድ ከማዘዋወር ደንቦች ጋር ነው። በኢስቲዮ-ኢኒት ውስጥ የትኛው ትራፊክ መቆራረጥ እና ወደ ኢቲዮ-ኤጀንት መላክ እንዳለበት ማዋቀር ይቻላል። ለምሳሌ, ሁሉንም ገቢ እና ወጪ ትራፊክ ለመጥለፍ, መለኪያዎችን ማዘጋጀት ያስፈልግዎታል -i и -b ወደ ትርጉም *. ለመጥለፍ የተወሰኑ ወደቦችን መግለጽ ይችላሉ። አንድን የተወሰነ ንዑስ መረብ ላለመጥለፍ ባንዲራውን ተጠቅመው መግለጽ ይችላሉ። -x.
  4. የኢንቴት ኮንቴይነሮች ከተፈጸሙ በኋላ ዋና ዋናዎቹ ተጀምረዋል, አብራሪው-ወኪሉን ጨምሮ. በጂአርፒሲ በኩል ቀድሞ ከተዘረጋው ፓይለት ጋር ይገናኛል እና በክላስተር ውስጥ ስላሉት ነባር አገልግሎቶች እና መመሪያዎች መመሪያ ይቀበላል። በተቀበለው መረጃ መሰረት, ስብስቦችን ያዋቅራል እና በቀጥታ በኩበርኔትስ ክላስተር ውስጥ ወደ ትግበራዎቻችን የመጨረሻ ነጥብ ይመድባል. እንዲሁም አንድ አስፈላጊ ነጥብ ልብ ማለት ያስፈልጋል፡ መልእክተኛው ማዳመጥ የሚጀምርበትን አድማጮችን (IP፣ port pairs) በተለዋዋጭ ያዋቅራል። ስለዚህ ፣ጥያቄዎች ወደ ፖድው ውስጥ ሲገቡ ፣በጎን መኪናው ውስጥ ያለውን የአይፓብሌስ መመሪያዎችን በመጠቀም አቅጣጫቸውን ሲቀይሩ መልእክተኛው እነዚህን ግንኙነቶች በተሳካ ሁኔታ ማካሄድ እና የትራፊኩን ተጨማሪ ወኪል ማድረግ እንዳለበት ሊረዳ ይችላል። በተጨማሪም በዚህ ደረጃ, መረጃ ወደ ሚክስር ይላካል, በኋላ ላይ እንመለከታለን, እና የመከታተያ ስፔኖች ይላካሉ.

በውጤቱም, ከአንድ ነጥብ (ፓይለት) ልናዋቅረው የምንችለውን አጠቃላይ የመልዕክት ፕሮክሲ ሰርቨሮችን እናገኛለን. ሁሉም የገቢ እና የወጪ ጥያቄዎች በመልእክተኛ በኩል ያልፋሉ። ከዚህም በላይ የTCP ትራፊክ ብቻ ነው የሚስተጓጎለው። ይህ ማለት የ Kubernetes አገልግሎት አይፒ ሳይለወጥ kube-dns በ UDP ላይ በመጠቀም ተፈትቷል ማለት ነው። ከዚያም ከውሳኔው በኋላ የወጪው ጥያቄ በመልእክተኛ ተጠልፎ ይስተናገዳል ፣ ይህም ጥያቄው በየትኛው የመጨረሻ ነጥብ ላይ መላክ እንዳለበት አስቀድሞ ይወስናል (ወይም አይላክም ፣ የመዳረሻ ፖሊሲዎች ወይም የአልጎሪዝም ወረዳ ተላላፊ)።

ፓይሎትን አውቀናል፣ አሁን ሚክስየር እንዴት እንደሚሰራ እና ለምን እንደሚያስፈልግ መረዳት አለብን። ለእሱ ኦፊሴላዊ ሰነዶችን ማንበብ ይችላሉ እዚህ.

ቀላቃይ አሁን ባለው መልኩ ሁለት አካላትን ያቀፈ ነው፡- istio-telemetry፣ istio-policy (ከሥሪት 0.8 በፊት አንድ istio-mixer component)። ሁለቱም ድብልቅ ናቸው, እያንዳንዱም ለራሱ ተግባር ተጠያቂ ነው. ኢስቲዮ ቴሌሜትሪ ማን የት እንደሚሄድ እና በምን አይነት መመዘኛዎች ከጎን መኪና ሪፓርት ኮንቴይነሮችን በGRPC በኩል መረጃ ይቀበላል። Istio-policy የመመሪያ ደንቦች መሟላታቸውን ለማረጋገጥ የቼክ ጥያቄዎችን ይቀበላል። የፖሊሲ ፍተሻዎች በእርግጥ ለእያንዳንዱ ጥያቄ አይደረጉም, ነገር ግን በደንበኛው (በጎን መኪና ውስጥ) ለተወሰነ ጊዜ ተደብቀዋል. የሪፖርት ቼኮች እንደ ባች ጥያቄዎች ይላካሉ። እንዴት ማዋቀር እንደሚቻል እና ምን መለኪያዎች ትንሽ ቆይተው መላክ እንዳለባቸው እንይ.

ሚክሰተሩ በቴሌሜትሪ መረጃን በማሰባሰብ እና በማቀናበር ላይ ያልተቋረጠ ስራን የሚያረጋግጥ በጣም የሚገኝ አካል መሆን አለበት። ስርዓቱ በበርካታ ደረጃ ቋት ምክንያት የተገኘ ነው. መጀመሪያ ላይ መረጃ በመያዣው የጎን መኪና ጎን ፣ ከዚያም በቀላቃይ በኩል ፣ ከዚያም ወደ ሚጠራው ቀላቃይ ጀርባ ይላካል። በውጤቱም, የትኛውም የስርዓተ-ፆታ አካላት ካልተሳካ, ቋቱ ያድጋል እና ስርዓቱ ከተመለሰ በኋላ ይታጠባል. የቀላቃይ ጀርባዎች የቴሌሜትሪ መረጃን ለመላክ የመጨረሻ ነጥቦች ናቸው፡ ስታቲስቲክስ፣ ኒውሬሊክ፣ ወዘተ የእራስዎን ጀርባ መጻፍ ይችላሉ, በጣም ቀላል ነው, እና እንዴት ማድረግ እንዳለብዎት እናያለን.

በምርት ውስጥ Kubernetes ን በመጠቀም Istio ን እንዴት ማስኬድ እንደሚቻል። ክፍል 1

ለማጠቃለል, ከኢስቲዮ-ቴሌሜትሪ ጋር የመሥራት እቅድ እንደሚከተለው ነው.

  1. አገልግሎት 1 ለአገልግሎት ጥያቄ ይልካል 2.
  2. ከአገልግሎት 1 ሲወጡ, ጥያቄው በራሱ የጎን መኪና ውስጥ ይጠቀለላል.
  3. የሲዴካር ተወካይ ጥያቄው ወደ አገልግሎት 2 እንዴት እንደሚሄድ ይከታተላል እና አስፈላጊውን መረጃ ያዘጋጃል.
  4. ከዚያም የሪፖርት ጥያቄን በመጠቀም ወደ istio-telemetry ይልካል።
  5. ኢስቲዮ-ቴሌሜትሪ ይህ ሪፖርት ወደ ጀርባዎች መላክ እንዳለበት፣ ለየትኛው እና ምን ውሂብ መላክ እንዳለበት ይወስናል።
  6. Istio-telemetry አስፈላጊ ከሆነ የሪፖርት መረጃን ወደ ኋላ ይልካል።

አሁን ኢስቲዮ በስርዓቱ ውስጥ እንዴት ማሰማራት እንደሚቻል እንይ, ዋና ዋና አካላትን (አብራሪ እና የጎን መኪና ተወካይ) ብቻ ያቀፈ.

በመጀመሪያ፣ አብራሪ ያነበበውን ዋና ውቅር (መረብ) እንመልከት፡-

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

ሁሉም ዋና የመቆጣጠሪያ አካላት (የመቆጣጠሪያ አውሮፕላን) በኩበርኔትስ ውስጥ በስም ቦታ istio-system ውስጥ ይገኛሉ.

ቢያንስ ፓይሎትን ማሰማራት ብቻ አለብን። ለዚህ እንጠቀማለን እንደዚህ ያለ ውቅር.

እና የእቃውን መርፌ የጎን መኪናን በእጅ እናዋቅራለን።

ማስገቢያ መያዣ;

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

ሁሉም ነገር በተሳካ ሁኔታ እንዲጀምር የአገልግሎት አካውንት፣ ክላስተርሮል፣ ክላስተር ሮሌቢንዲንግ፣ ሲአርዲ ለፓይለት መፍጠር አለቦት፣ መግለጫዎቹ ሊገኙ ይችላሉ። እዚህ.

በውጤቱም, የጎን መኪናን ከልዑካን ጋር የምንወጋበት አገልግሎት በተሳካ ሁኔታ መጀመር አለበት, ሁሉንም ግኝቶች ከአብራሪው መቀበል እና ጥያቄዎችን ማካሄድ.

ሁሉም የቁጥጥር አውሮፕላኖች አካላት ሀገር አልባ አፕሊኬሽኖች መሆናቸውን እና ያለችግር በአግድም ሊመዘኑ እንደሚችሉ መረዳት ያስፈልጋል። ሁሉም ውሂብ በ etcd ውስጥ በ Kubernetes ሀብቶች ብጁ መግለጫዎች ውስጥ ተከማችቷል።

እንዲሁም ኢስቲዮ (አሁንም በሙከራ ላይ ያለ) ከክላስተር ውጭ የመሮጥ ችሎታ እና በበርካታ የኩበርኔትስ ስብስቦች መካከል ያለውን የአገልግሎት ግኝት የመመልከት እና የማጭበርበር ችሎታ አለው። ስለዚህ ጉዳይ የበለጠ ማንበብ ይችላሉ እዚህ.

ለባለብዙ ክላስተር ጭነት የሚከተሉትን ገደቦች ልብ ይበሉ።

  1. Pod CIDR እና የአገልግሎት ሲዲአር በሁሉም ዘለላዎች ልዩ መሆን አለባቸው እና መደራረብ የለባቸውም።
  2. ሁሉም CIDR Pods ከየትኛውም የCIDR Pods በክላስተር መካከል ተደራሽ መሆን አለባቸው።
  3. ሁሉም የኩበርኔትስ ኤፒአይ አገልጋዮች እርስበርስ ተደራሽ መሆን አለባቸው።

ይህ በኢስቲዮ እንዲጀምሩ የሚረዳዎት የመጀመሪያ መረጃ ነው። ይሁን እንጂ አሁንም ብዙ ወጥመዶች አሉ. ለምሳሌ የውጭ ትራፊክን የማዘዋወር ባህሪያት (ከክላስተር ውጪ)፣ የጎን መኪናዎችን የማረም አቀራረቦች፣ ፕሮፋይል ማድረግ፣ ቀላቃይ ማቀናበር እና ብጁ ቀላቃይ ጀርባን መፃፍ፣ የመከታተያ ዘዴን ማዘጋጀት እና መልዕክተኛውን በመጠቀም አሰራሩ።
ይህንን ሁሉ በቀጣይ ጽሁፎች ውስጥ እንሸፍናለን. ጥያቄዎችዎን ይጠይቁ, እነሱን ለመሸፈን እሞክራለሁ.

ምንጭ: hab.com

አስተያየት ያክሉ