{"id":32766,"date":"2019-10-31T21:48:48","date_gmt":"2019-10-31T18:48:48","guid":{"rendered":"https:\/\/prohoster.info\/blog\/kak-zapustit-istio-ispolzuya-kubernetes-v-production-chast-1\/"},"modified":"2019-10-31T21:48:48","modified_gmt":"2019-10-31T18:48:48","slug":"kak-zapustit-istio-ispolzuya-kubernetes-v-production-chast-1","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/kak-zapustit-istio-ispolzuya-kubernetes-v-production-chast-1","title":{"rendered":"Jak uruchomi\u0107 Istio, u\u017cywaj\u0105c Kubernetes w produkcji. Cz\u0119\u015b\u0107 1","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Czym jest <noindex><a rel=\"nofollow\" href=\"https:\/\/istio.io\">Istio<\/a><\/noindex>? \u042d\u0442\u043e \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 Service mesh, \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u043d\u0430\u0434 \u0441\u0435\u0442\u044c\u044e. \u041c\u044b \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0432\u0435\u0441\u044c \u0438\u043b\u0438 \u0447\u0430\u0441\u0442\u044c \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441 \u043d\u0438\u043c. \u041a\u0430\u043a\u043e\u0439 \u0438\u043c\u0435\u043d\u043d\u043e? \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u0435\u043b\u0430\u0435\u043c \u0443\u043c\u043d\u044b\u0439 \u0440\u043e\u0443\u0442\u0438\u043d\u0433, \u0438\u043b\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043f\u043e\u0434\u0445\u043e\u0434 circuit breaker, \u043c\u043e\u0436\u0435\u043c \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u00abcanary deployment\u00bb, \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u044f \u0442\u0440\u0430\u0444\u0438\u043a \u043d\u0430 \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u0430 \u043c\u043e\u0436\u0435\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u043e\u0445\u043e\u0434\u044b \u0438\u0437 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u044e\u044e \u0441\u0435\u0442\u044c. \u0415\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c policy \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u043f\u043e\u0445\u043e\u0434\u043e\u0432 \u043c\u0435\u0436\u0434\u0443 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c\u0438. \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u0441\u044e \u043a\u0430\u0440\u0442\u0443 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u043e \u0441\u0435\u0442\u0438 \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0443\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u0431\u043e\u0440 \u043c\u0435\u0442\u0440\u0438\u043a \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e \u0434\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.<\/p>\n<p>Mo\u017cna przeczyta\u0107 o mechanizmie dzia\u0142ania w <noindex><a rel=\"nofollow\" href=\"https:\/\/istio.io\/docs\/concepts\/\">oficjalnej dokumentacji<\/a><\/noindex>. Istio to naprawd\u0119 pot\u0119\u017cne narz\u0119dzie, kt\u00f3re pozwala rozwi\u0105za\u0107 wiele problem\u00f3w i zada\u0144. W tym artykule chcia\u0142bym odpowiedzie\u0107 na podstawowe pytania, kt\u00f3re zazwyczaj pojawiaj\u0105 si\u0119 na pocz\u0105tku pracy z Istio. To pomo\u017ce Ci szybciej si\u0119 z nim oswoi\u0107.<\/p>\n<p><img decoding=\"async\" alt=\"Jak uruchomi\u0107 Istio, u\u017cywaj\u0105c Kubernetes w produkcji. Cz\u0119\u015b\u0107 1\" src=\"\/wp-content\/uploads\/2019\/04\/7ab676ec42cacafc97099d5af9f6332a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Zasada dzia\u0142ania<\/h3>\n<p>\nIstio sk\u0142ada si\u0119 z dw\u00f3ch g\u0142\u00f3wnych obszar\u00f3w \u2014 control plane i data plane. Control plane zawiera podstawowe komponenty, kt\u00f3re zapewniaj\u0105 prawid\u0142owe dzia\u0142anie pozosta\u0142ych. W obecnej wersji (1.0) control plane ma trzy g\u0142\u00f3wne komponenty: Pilot, Mixer, Citadel. Nie b\u0119dziemy omawia\u0107 Citadel, poniewa\u017c s\u0142u\u017cy on do generacji certyfikat\u00f3w zapewniaj\u0105cych dzia\u0142anie mutual TLS mi\u0119dzy us\u0142ugami. Przyjrzyjmy si\u0119 bli\u017cej konstrukcji i przeznaczeniu Pilot i Mixer.<\/p>\n<p><img decoding=\"async\" alt=\"Jak uruchomi\u0107 Istio, u\u017cywaj\u0105c Kubernetes w produkcji. Cz\u0119\u015b\u0107 1\" src=\"\/wp-content\/uploads\/2019\/04\/1e2b76b5ec12343dee7728e505321908.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPilot to g\u0142\u00f3wny komponent zarz\u0105dzaj\u0105cy, kt\u00f3ry rozprowadza wszystkie informacje o tym, co mamy w klastrze \u2013 us\u0142ugi, ich endpointy i zasady routingu (na przyk\u0142ad zasady dla Canary deployment lub zasady circuit breaker).<\/p>\n<p>Mixer to opcjonalny komponent control plane, kt\u00f3ry umo\u017cliwia zbieranie metryk, log\u00f3w i wszelkich informacji o interakcjach sieciowych. Monitoruje r\u00f3wnie\u017c przestrzeganie zasad polityki i limity pr\u0119dko\u015bci.<\/p>\n<p>Data plane realizowane jest za pomoc\u0105 kontener\u00f3w-proxy sidecar. Domy\u015blnie u\u017cywany jest pot\u0119\u017cny <noindex><a rel=\"nofollow\" href=\"https:\/\/www.envoyproxy.io\/\">proxy server envoy<\/a><\/noindex>. Mo\u017ce by\u0107 zast\u0105piony inn\u0105 implementacj\u0105, na przyk\u0142ad nginx (nginmesh).<\/p>\n<p>Aby Istio dzia\u0142a\u0142o ca\u0142kowicie przejrzy\u015bcie dla aplikacji, istnieje system automatycznego injectingu. Ostatnia implementacja jest odpowiednia dla wersji Kubernetes 1.9+ (mutational admission webhook). Dla wersji Kubernetes 1.7, 1.8 istnieje mo\u017cliwo\u015b\u0107 u\u017cycia Initializer.<\/p>\n<p>Kontenery sidecar \u0142\u0105cz\u0105 si\u0119 z Pilotem za pomoc\u0105 protoko\u0142u GRPC, kt\u00f3ry pozwala zoptymalizowa\u0107 model wprowadzania zmian zachodz\u0105cych w klastrze. GRPC zacz\u0105\u0142 by\u0107 u\u017cywany w Envoy od wersji 1.6, w Istio jest u\u017cywany od wersji 0.8 i stanowi pilot-agent \u2014 nak\u0142adk\u0119 w golang nad envoyem, kt\u00f3ra konfiguruje parametry uruchomienia.<\/p>\n<p>Pilot i Mixer s\u0105 ca\u0142kowicie komponentami stateless, wszystkie informacje przechowywane s\u0105 w pami\u0119ci. Konfiguracja dla nich okre\u015blana jest w postaci niestandardowych zasob\u00f3w Kubernetes, kt\u00f3re s\u0105 zapisywane w etcd. <br \/>\nIstio-agent otrzymuje adres Pilota i otwiera strumie\u0144 GRPC do niego. <\/p>\n<p>Jak ju\u017c wspomnia\u0142em, Istio implementuje ca\u0142\u0105 funkcjonalno\u015b\u0107 ca\u0142kowicie przejrzy\u015bcie dla aplikacji. Zobaczmy, jak to dzia\u0142a. Algorytm jest nast\u0119puj\u0105cy:<\/p>\n<ol>\n<li>Wdra\u017camy now\u0105 wersj\u0119 us\u0142ugi.<\/li>\n<li>W zale\u017cno\u015bci od podej\u015bcia do wstrzykiwania kontenera sidecar, kontener istio-init i kontener istio-agent (envoy) s\u0105 dodawane na etapie stosowania konfiguracji, lub mog\u0105 by\u0107 ju\u017c r\u0119cznie wstawione w opisie podu Kubernetes.<\/li>\n<li>Kontener istio-init to skrypt, kt\u00f3ry stosuje zasady iptables dla podu. Istniej\u0105 dwie opcje konfiguracji przekierowywania ruchu do kontenera istio-agent: u\u017cy\u0107 zasad przekierowania iptables, albo <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kristrev\/tproxy-example\/blob\/master\/tproxy_example.c\">TPROXY<\/a><\/noindex>. W momencie pisania tego artyku\u0142u domy\u015blnie stosuje si\u0119 podej\u015bcie z zasadami przekierowa\u0144. W istio-init mo\u017cna skonfigurowa\u0107, jaki ruch nale\u017cy przechwytywa\u0107 i kierowa\u0107 do istio-agent. Na przyk\u0142ad, aby przechwytywa\u0107 ca\u0142y ruch przychodz\u0105cy i wychodz\u0105cy, nale\u017cy ustawi\u0107 parametry <code>-i<\/code> i <code>-b<\/code> na warto\u015b\u0107 <code>*<\/code>. Mo\u017cna wskaza\u0107 konkretne porty, kt\u00f3re nale\u017cy przechwytywa\u0107. Aby nie przechwytywa\u0107 okre\u015blonej podsieci, mo\u017cna j\u0105 wskaza\u0107 za pomoc\u0105 flagi <code>-x<\/code>.<\/li>\n<li>Po wykonaniu kontener\u00f3w init uruchamiane s\u0105 kontenery g\u0142\u00f3wne, w tym pilot-agent (envoy). \u0141\u0105czy si\u0119 on z ju\u017c wdro\u017conym Pilotem przez GRPC i otrzymuje informacje o wszystkich istniej\u0105cych us\u0142ugach i politykach routingu w klastrze. Na podstawie uzyskanych danych konfiguruje klastry i przypisuje im bezpo\u015brednie punkty ko\u0144cowe naszych aplikacji w klastrze Kubernetes. Nale\u017cy r\u00f3wnie\u017c zauwa\u017cy\u0107 wa\u017cny wska\u017anik: envoy dynamicznie konfiguruje listeners (pary IP, port), kt\u00f3re zaczyna nas\u0142uchiwa\u0107. Dlatego, gdy \u017c\u0105dania docieraj\u0105 do podu, s\u0105 przekierowywane za pomoc\u0105 zasad przekierowania iptables do sidecara, envoy mo\u017ce ju\u017c skutecznie obs\u0142ugiwa\u0107 te po\u0142\u0105czenia i rozumie, dok\u0105d dalej przekierowa\u0107 ruch. Na tym etapie dochodzi r\u00f3wnie\u017c do wysy\u0142ania informacji do Mixera, kt\u00f3ry om\u00f3wimy p\u00f3\u017aniej, oraz wysy\u0142ania spen\u00f3w \u015bledzenia.<\/li>\n<\/ol>\n<p>\nW rezultacie otrzymujemy ca\u0142\u0105 sie\u0107 serwer\u00f3w proxy envoy, kt\u00f3re mo\u017cemy konfigurowa\u0107 z jednego punktu (Pilot). Wszystkie \u017c\u0105dania inbound i outbound przechodz\u0105 przez envoy. Ponadto, przechwytywany jest tylko ruch TCP. Oznacza to, \u017ce IP us\u0142ugi Kubernetes jest rozwi\u0105zywane za pomoc\u0105 kube-dns przez UDP bez zmian. Nast\u0119pnie po rozwi\u0105zaniu nast\u0119puje przechwytywanie wychodz\u0105cego \u017c\u0105dania i jego przetwarzanie przez envoy, kt\u00f3ry decyduje, do kt\u00f3rego punktu ko\u0144cowego nale\u017cy wys\u0142a\u0107 \u017c\u0105danie (lub nie wys\u0142a\u0107, w przypadku polityk dost\u0119pu lub dzia\u0142ania algorytmu circuit breaker).<\/p>\n<p>Zrozumieli\u015bmy Pilota, teraz nale\u017cy zrozumie\u0107, jak dzia\u0142a Mixer i po co jest potrzebny. Oficjaln\u0105 dokumentacj\u0119 na jego temat mo\u017cna przeczyta\u0107 <noindex><a rel=\"nofollow\" href=\"https:\/\/istio.io\/docs\/concepts\/policies-and-telemetry\/overview\/\">tutaj<\/a><\/noindex>.<\/p>\n<p>Mixer w obecnej postaci sk\u0142ada si\u0119 z dw\u00f3ch komponent\u00f3w: istio-telemetry oraz istio-policy (do wersji 0.8 by\u0142 to jeden komponent istio-mixer). Ka\u017cdy z nich pe\u0142ni swoj\u0105 rol\u0119. Istio telemetry odbiera za pomoc\u0105 GRPC od kontener\u00f3w sidecar informacje o tym, kto gdzie idzie i z jakimi parametrami. Istio-policy odbiera zapytania Check, aby zweryfikowa\u0107 spe\u0142nienie zasad polityki. Sprawdzanie polityki nie odbywa si\u0119 przy ka\u017cdym \u017c\u0105daniu, lecz jest buforowane po stronie klienta (w sidecar) na okre\u015blony czas. Raporty s\u0105 wysy\u0142ane w partiach. Jak skonfigurowa\u0107 i jakie dok\u0142adnie parametry nale\u017cy wysy\u0142a\u0107, zobaczymy nieco p\u00f3\u017aniej. <\/p>\n<p>Mixer jest projektowany jako komponent o wysokiej dost\u0119pno\u015bci, kt\u00f3ry zapewnia nieprzerwan\u0105 prac\u0119 przy zbieraniu i przetwarzaniu danych telemetrycznych. Ostatecznie system dzia\u0142a jak wielopoziomowy bufor. Pocz\u0105tkowo dane s\u0105 buforowane po stronie kontener\u00f3w sidecar, nast\u0119pnie po stronie mixer, a p\u00f3\u017aniej wysy\u0142ane do tzw. backend\u00f3w mixer. W efekcie, je\u015bli jaki\u015b komponent systemu zawiedzie, bufor ro\u015bnie, a po przywr\u00f3ceniu systemu dane s\u0105 opr\u00f3\u017cniane. Backend mixer to punkty ko\u0144cowe do wysy\u0142ania danych telemetrii: statsd, newrelic itd. Mo\u017cna stworzy\u0107 w\u0142asny backend, jest to do\u015b\u0107 proste, a my zobaczymy, jak to zrobi\u0107.<\/p>\n<p><img decoding=\"async\" alt=\"Jak uruchomi\u0107 Istio, u\u017cywaj\u0105c Kubernetes w produkcji. Cz\u0119\u015b\u0107 1\" src=\"\/wp-content\/uploads\/2019\/04\/e7dd11d5ee26a692e1cd213578d47700.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPodsumowuj\u0105c, schemat dzia\u0142ania z istio-telemetry wygl\u0105da nast\u0119puj\u0105co.<\/p>\n<ol>\n<li>Serwis 1 wysy\u0142a zapytanie do serwisu 2.<\/li>\n<li>Podczas wychodzenia z serwisu 1 zapytanie jest opakowywane w jego w\u0142asny sidecar.<\/li>\n<li>Sidecar envoy monitoruje, jak przebiega zapytanie do serwisu 2 i przygotowuje niezb\u0119dne informacje.<\/li>\n<li>Nast\u0119pnie wysy\u0142a je do istio-telemetry za pomoc\u0105 zapytania Report.<\/li>\n<li>Istio-telemetry decyduje, czy nale\u017cy wys\u0142a\u0107 ten raport do backend\u00f3w, do kt\u00f3rych dok\u0142adnie i jakie dane nale\u017cy przes\u0142a\u0107.<\/li>\n<li>Istio-telemetry wysy\u0142a dane Raport w backendzie, je\u015bli to konieczne.<\/li>\n<\/ol>\n<p>\nTeraz zobaczmy, jak wdro\u017cy\u0107 w systemie Istio sk\u0142adaj\u0105cym si\u0119 tylko z podstawowych komponent\u00f3w (Pilot i sidecar envoy).<\/p>\n<p>Na pocz\u0105tek przyjrzymy si\u0119 g\u0142\u00f3wnej konfiguracji (mesh), kt\u00f3r\u0105 odczytuje Pilot:<\/p>\n<pre><code class=\"plaintext\">apiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: istio\n  namespace: istio-system\n  labels:\n    app: istio\n    service: istio\ndata:\n  mesh: |-\n\n    # Na razie nie w\u0142\u0105czamy wysy\u0142ania informacji o \u015bledzeniu (pilot skonfiguruje envoy\u2019e w taki spos\u00f3b, \u017ce wysy\u0142ka nie b\u0119dzie mia\u0142a miejsca)\n    enableTracing: false\n\n    # Na razie nie podajemy punkt\u00f3w ko\u0144cowych mixer\u2019a, aby kontenery sidecar nie wysy\u0142a\u0142y tam informacji\n    #mixerCheckServer: istio-policy.istio-system:15004\n    #mixerReportServer: istio-telemetry.istio-system:15004\n\n    # Ustawiamy op\u00f3\u017anienie, z jakim envoy b\u0119dzie ponownie pyta\u0142 Pilota (dotyczy to starszej wersji proxy envoy)\n    rdsRefreshDelay: 5s\n\n    # Domy\u015blna konfiguracja dla sidecara envoy\n    defaultConfig:\n      # Analogicznie jak rdsRefreshDelay\n      discoveryRefreshDelay: 5s\n\n      # Pozostawiamy domy\u015blnie (\u015bcie\u017cka do konfiguracji i binarki envoy)\n      configPath: \"\/etc\/istio\/proxy\"\n      binaryPath: \"\/usr\/local\/bin\/envoy\"\n\n      # Domy\u015blna nazwa uruchomionego kontenera sidecar (u\u017cywana np. w nazwach us\u0142ug przy wysy\u0142aniu span\u2019\u00f3w \u015bledzenia)\n      serviceCluster: istio-proxy\n\n      # Czas, kt\u00f3ry b\u0119dzie czeka\u0142 envoy, zanim wymusi zako\u0144czenie wszystkich nawi\u0105zanych po\u0142\u0105cze\u0144\n      drainDuration: 45s\n      parentShutdownDuration: 1m0s\n\n      # Domy\u015blnie u\u017cywane s\u0105 zasady REDIRECT iptables. Mo\u017cna to zmieni\u0107 na TPROXY.\n      #interceptionMode: REDIRECT\n\n      # Port, na kt\u00f3rym b\u0119dzie uruchamiana panel administracyjny ka\u017cdego kontenera sidecar (envoy)\n      proxyAdminPort: 15000\n\n      # Adres, na kt\u00f3ry b\u0119d\u0105 wysy\u0142ane trace\u2019y w protokole zipkin (na pocz\u0105tku wy\u0142\u0105czyli\u015bmy sam\u0105 wysy\u0142k\u0119, wi\u0119c to pole obecnie nie b\u0119dzie u\u017cywane)\n      zipkinAddress: tracing-collector.tracing:9411\n\n      # Adres statsd do wysy\u0142ania metryk kontener\u00f3w envoy (wy\u0142\u0105czamy)\n      # statsdUdpAddress: aggregator:8126\n\n      # Wy\u0142\u0105czamy wsparcie dla opcji Mutual TLS\n      controlPlaneAuthPolicy: NONE\n\n      # Adres, na kt\u00f3rym b\u0119dzie nas\u0142uchiwa\u0107 istio-pilot, aby przekazywa\u0107 informacje o odkrywaniu us\u0142ug wszystkim kontenerom sidecar\n      discoveryAddress: istio-pilot.istio-system:15007\n<\/code><\/pre>\n<p>\nWszystkie g\u0142\u00f3wne komponenty zarz\u0105dzania (control plane) umie\u015bcimy w namespace istio-system w Kubernetes.<\/p>\n<p>Minimalnie musimy wdro\u017cy\u0107 tylko Pilota. W tym celu skorzystamy z <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/istio\/istio\/blob\/release-1.0\/install\/kubernetes\/helm\/istio\/charts\/pilot\/templates\/deployment.yaml\">takiej konfiguracji.<\/a><\/noindex><\/p>\n<p>I r\u0119cznie skonfigurujemy wstrzykiwanie kontenera sidecar.<\/p>\n<p>Kontener inicjuj\u0105cy:<\/p>\n<pre><code class=\"plaintext\">initContainers:\n - name: istio-init\n   args:\n   - -p\n   - \"15001\"\n   - -u\n   - \"1337\"\n   - -m\n   - REDIRECT\n   - -i\n   - '*'\n   - -b\n   - '*'\n   - -d\n   - \"\"\n   image: istio\/proxy_init:1.0.0\n   imagePullPolicy: IfNotPresent\n   resources:\n     limits:\n       memory: 128Mi\n   securityContext:\n     capabilities:\n       add:\n       - NET_ADMIN\n<\/code><\/pre>\n<p>\nI sidecar:<\/p>\n<pre><code class=\"plaintext\">       nazwa: istio-proxy\n       args:\n         - \"bash\"\n         - \"-c\"\n         - |\n           exec \/usr\/local\/bin\/pilot-agent proxy sidecar \n           --configPath \n           \/etc\/istio\/proxy \n           --binaryPath \n           \/usr\/local\/bin\/envoy \n           --serviceCluster \n           service-name \n           --drainDuration \n           45s \n           --parentShutdownDuration \n           1m0s \n           --discoveryAddress \n           istio-pilot.istio-system:15007 \n           --discoveryRefreshDelay \n           1s \n           --connectTimeout \n           10s \n           --proxyAdminPort \n           \"15000\" \n           --controlPlaneAuthPolicy \n           NONE\n         env:\n         - name: POD_NAME\n           valueFrom:\n             fieldRef:\n               fieldPath: metadata.name\n         - name: POD_NAMESPACE\n           valueFrom:\n             fieldRef:\n               fieldPath: metadata.namespace\n         - name: INSTANCE_IP\n           valueFrom:\n             fieldRef:\n               fieldPath: status.podIP\n         - name: ISTIO_META_POD_NAME\n           valueFrom:\n             fieldRef:\n               fieldPath: metadata.name\n         - name: ISTIO_META_INTERCEPTION_MODE\n           value: REDIRECT\n         image: istio\/proxyv2:1.0.0\n         imagePullPolicy: IfNotPresent\n         resources:\n           requests:\n             cpu: 100m\n             memory: 128Mi\n           limits:\n             memory: 2048Mi\n         securityContext:\n           privileged: false\n           readOnlyRootFilesystem: true\n           runAsUser: 1337\n         volumeMounts:\n         - mountPath: \/etc\/istio\/proxy\n           name: istio-envoy\n<\/code><\/pre>\n<p>\nAby wszystko dzia\u0142a\u0142o poprawnie, nale\u017cy utworzy\u0107 ServiceAccount, ClusterRole, ClusterRoleBinding oraz CRD dla Pilota, kt\u00f3rych opisy mo\u017cna znale\u017a\u0107 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/istio\/istio\/tree\/release-1.0\/install\/kubernetes\/helm\/istio\/charts\/pilot\/templates\">tutaj<\/a><\/noindex>. <\/p>\n<p>W rezultacie us\u0142uga, do kt\u00f3rej wstrzykujemy sidecar z envoy, powinna uruchomi\u0107 si\u0119 pomy\u015blnie, uzyska\u0107 wszystkie dane discovery z pilota i obs\u0142ugiwa\u0107 \u017c\u0105dania.<\/p>\n<p>Warto zrozumie\u0107, \u017ce wszystkie komponenty kontrolnej warstwy s\u0105 aplikacjami bezstanowymi i mog\u0105 by\u0107 \u0142atwo skalowane poziomo. Wszystkie dane przechowywane s\u0105 w etcd w postaci dostosowanych opis\u00f3w zasob\u00f3w Kubernetes.<\/p>\n<p>Istio (na razie eksperymentalnie) oferuje tak\u017ce mo\u017cliwo\u015b\u0107 uruchamiania poza klastrem oraz funkcj\u0119 przegl\u0105dania i dzielenia si\u0119 odkrywaniem us\u0142ug mi\u0119dzy wieloma klastrami Kubernetes. Wi\u0119cej na ten temat mo\u017cna przeczyta\u0107 <noindex><a rel=\"nofollow\" href=\"https:\/\/istio.io\/docs\/setup\/kubernetes\/multicluster-install\/\">tutaj<\/a><\/noindex>.<\/p>\n<p>Przy instalacji wieloklasowej nale\u017cy wzi\u0105\u0107 pod uwag\u0119 nast\u0119puj\u0105ce ograniczenia:<\/p>\n<ol>\n<li>Pod CIDR i Service CIDR musz\u0105 by\u0107 unikalne w\u015br\u00f3d wszystkich klastr\u00f3w i nie mog\u0105 si\u0119 nak\u0142ada\u0107.<\/li>\n<li>Wszystkie Pod CIDR powinny by\u0107 dost\u0119pne ze wszystkich Pod CIDR mi\u0119dzy klastrami.<\/li>\n<li>Wszystkie serwery API Kubernetes musz\u0105 by\u0107 dost\u0119pne nawzajem.<\/li>\n<\/ol>\n<p>\nTo wst\u0119pne informacje, kt\u00f3re pomog\u0105 Ci rozpocz\u0105\u0107 prac\u0119 z Istio. Jednak istnieje wiele pu\u0142apek, takich jak szczeg\u00f3\u0142y routingu ruchu zewn\u0119trznego (na zewn\u0105trz klastra), podej\u015bcia do debugowania sidecar\u00f3w, profilowanie, konfiguracja mikser\u00f3w oraz pisanie dostosowanego backendu miksera, konfiguracja mechanizmu \u015bledzenia i jego wykorzystanie z envoy.<br \/>\nOm\u00f3wimy to w nast\u0119pnych publikacjach. Zadawaj swoje pytania, postaram si\u0119 je wyja\u015bni\u0107.<br \/>\n<br \/>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/avito\/blog\/419319\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Istio? \u042d\u0442\u043e \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 Service mesh, \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u043d\u0430\u0434 \u0441\u0435\u0442\u044c\u044e. \u041c\u044b \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0432\u0435\u0441\u044c \u0438\u043b\u0438 \u0447\u0430\u0441\u0442\u044c \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441 \u043d\u0438\u043c. \u041a\u0430\u043a\u043e\u0439 \u0438\u043c\u0435\u043d\u043d\u043e? \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u0435\u043b\u0430\u0435\u043c \u0443\u043c\u043d\u044b\u0439 \u0440\u043e\u0443\u0442\u0438\u043d\u0433, \u0438\u043b\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043f\u043e\u0434\u0445\u043e\u0434 circuit breaker, \u043c\u043e\u0436\u0435\u043c \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u00abcanary deployment\u00bb, \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u044f \u0442\u0440\u0430\u0444\u0438\u043a \u043d\u0430 \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u0430 \u043c\u043e\u0436\u0435\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0442\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":24545,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-32766","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Istio? \u042d\u0442\u043e \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 Service mesh, \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u043d\u0430\u0434 \u0441\u0435\u0442\u044c\u044e.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/kak-zapustit-istio-ispolzuya-kubernetes-v-production-chast-1\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c Istio, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f Kubernetes \u0432 production. \u0427\u0430\u0441\u0442\u044c 1 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Istio? \u042d\u0442\u043e \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 Service mesh, \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u043d\u0430\u0434 \u0441\u0435\u0442\u044c\u044e.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/kak-zapustit-istio-ispolzuya-kubernetes-v-production-chast-1\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:48:48+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:48:48+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Jak uruchomi\u0107 Istio przy u\u017cyciu Kubernetes w produkcji. Cz\u0119\u015b\u0107 1 | ProHoster","description":"Czym jest Istio? To tzw. Service mesh, technologia, kt\u00f3ra dodaje warstw\u0119 abstrakcji nad sieci\u0105.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/kak-zapustit-istio-ispolzuya-kubernetes-v-production-chast-1","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c Istio, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f Kubernetes \u0432 production. \u0427\u0430\u0441\u0442\u044c 1 | ProHoster","og:description":"\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Istio? \u042d\u0442\u043e \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 Service mesh, \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u043d\u0430\u0434 \u0441\u0435\u0442\u044c\u044e.","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/kak-zapustit-istio-ispolzuya-kubernetes-v-production-chast-1","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:48:48+00:00","article:modified_time":"2019-10-31T18:48:48+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"32766","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 12:27:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:53:24","updated":"2026-01-21 12:27:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/32766","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=32766"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/32766\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/24545"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=32766"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=32766"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=32766"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}