{"id":90699,"date":"2020-08-05T01:42:12","date_gmt":"2020-08-04T23:42:12","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/canary-deployment-v-kubernetes-3-istio"},"modified":"2020-08-05T01:42:12","modified_gmt":"2020-08-04T23:42:12","slug":"canary-deployment-v-kubernetes-3-istio","status":"publish","type":"post","link":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/canary-deployment-v-kubernetes-3-istio","title":{"rendered":"Canary Deployment \u00een Kubernetes #3: Istio","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h3 id=\"ispolzovanie-istiokiali-dlya-zapuska-i-vizualizacii-canary-deploya\">Folosirea Istio+Kiali pentru lansarea \u0219i vizualizarea implement\u0103rii Canary<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment \u00een Kubernetes #3: Istio\" src=\"\/wp-content\/uploads\/2020\/08\/2eeaaaeaa565700d7a8f6f72c5638d4e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h4 id=\"stati-etogo-cikla\">Articolele acestui ciclu<\/h4>\n<p><\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/company\/nixys\/blog\/512766\/\">Canary Deployment \u00een Kubernetes #1: Gitlab CI<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/company\/nixys\/blog\/513118\/\">Canary Deployment \u00een Kubernetes #2: Argo Rollouts<\/a><\/noindex><\/li>\n<li>(acest articol)<\/li>\n<li>Implementarea Canary folosind Jenkins-X Istio Flagger<\/li>\n<\/ol>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3 id=\"canary-deployment\">Canary Deployment<\/h3>\n<p><\/p>\n<p>Sper\u0103m c\u0103 a\u021bi citit <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/company\/nixys\/blog\/512766\/\">prima parte<\/a><\/noindex>, unde am explicat pe scurt ce sunt implement\u0103rile Canary \u0219i am ar\u0103tat cum s\u0103 le realiz\u0103m folosind resurse standard Kubernetes.<\/p>\n<p><\/p>\n<h3 id=\"istio\">Istio<\/h3>\n<p><\/p>\n<p>\u0218i presupunem c\u0103 citind acest articol, \u0219ti\u021bi deja ce este Istio. Dac\u0103 nu, pute\u021bi citi despre el <noindex><a rel=\"nofollow\" href=\"https:\/\/itnext.io\/kubernetes-istio-simply-visually-explained-58a7d158b83f?source=friends_link&amp;sk=378ed718d2d6cfd09e6d23c7616cba81\">aici<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h3 id=\"prilozhenie-dlya-testov\">Aplica\u021bie pentru teste<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment \u00een Kubernetes #3: Istio\" src=\"\/wp-content\/uploads\/2020\/08\/4c1e7d1644411cecaf52433b98219bb4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Fiecare pod con\u021bine dou\u0103 containere: aplica\u021bia noastr\u0103 \u0219i istio-proxy.<\/p>\n<p><\/p>\n<p>Vom folosi o aplica\u021bie de testare simpl\u0103 cu poduri frontend-nginx \u0219i backend pe python. Podul cu nginx va redirec\u021biona fiecare cerere c\u0103tre podul cu backend \u0219i va func\u021biona ca un proxy. Detaliile pot fi v\u0103zute mai \u00een detaliu \u00een urm\u0103toarele fi\u0219iere yaml:<\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/wuestkamp\/k8s-deployment-example-istio-canary-infrastructure\/blob\/master\/i\/k8s\/frontend.yaml\">frontend.yaml<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/wuestkamp\/k8s-deployment-example-istio-canary-infrastructure\/blob\/master\/i\/k8s\/backend.yaml\">backend.yaml<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/wuestkamp\/k8s-deployment-example-istio-canary-infrastructure\/blob\/master\/i\/k8s\/istio.yaml\">istio.yaml<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h4 id=\"zapusk-testovogo-prilozheniya-samostoyatelno\">Lansarea aplica\u021biei de testare pe cont propriu<\/h4>\n<p><\/p>\n<p>Dac\u0103 dori\u021bi s\u0103 urma\u021bi exemplul meu \u0219i s\u0103 utiliza\u021bi aceast\u0103 aplica\u021bie de testare pe cont propriu, consulta\u021bi <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/wuestkamp\/k8s-deployment-example-istio-canary-infrastructure\/blob\/master\/README.md\">readme-ul proiectului<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h3 id=\"nachalnyy-deployment\">Implementarea ini\u021bial\u0103<\/h3>\n<p><\/p>\n<p>C\u00e2nd lans\u0103m prima implementare, vedem c\u0103 podurile aplica\u021biei noastre au c\u00e2te dou\u0103 containere, ceea ce \u00eenseamn\u0103 c\u0103 Istio sidecar urmeaz\u0103 s\u0103 fie introdus:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment \u00een Kubernetes #3: Istio\" src=\"\/wp-content\/uploads\/2020\/08\/5e1340c271845973cf932cc291d98972.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>\u0218i de asemenea vedem Istio Gateway Loadbalancer \u00een namespace <code>istio-system<\/code>:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment \u00een Kubernetes #3: Istio\" src=\"\/wp-content\/uploads\/2020\/08\/24549496f038bd61d1288b122c66e6ea.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h4 id=\"sozdanie-trafika\">Crearea traficului<\/h4>\n<p><\/p>\n<p>Vom folosi urm\u0103toarea adres\u0103 IP pentru a genera trafic, care va fi primit de podurile frontend \u0219i redirec\u021bionat c\u0103tre podurile backend:<\/p>\n<p><\/p>\n<p><code>while true; do curl -s --resolve 'frontend.istio-test:80:35.242.202.152' frontend.istio-test; sleep 0.1; done<\/code><\/p>\n<p><\/p>\n<p>De asemenea, vom ad\u0103uga <code>frontend.istio-test<\/code> \u00een fi\u0219ierul nostru hosts.<\/p>\n<p><\/p>\n<h4 id=\"prosmotr-mesh-cherez-kiali\">Vizualizarea Mesh prin Kiali<\/h4>\n<p><\/p>\n<p>Am instalat aplica\u021bia de testare \u0219i Istio \u00eempreun\u0103 cu Tracing, Grafana, Prometheus \u0219i Kiali (detalii mai jos). A\u0219adar, putem folosi Kiali prin: <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/wuestkamp\/k8s-deployment-example-istio-canary-infrastructure\/blob\/master\/README.md\">readme-ul proiectului<\/a><\/noindex>). Prin urmare, putem folosi Kiali prin:<\/p>\n<p><\/p>\n<p><code>istioctl dashboard kiali # admin:admin<\/code><\/p>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment \u00een Kubernetes #3: Istio\" src=\"\/wp-content\/uploads\/2020\/08\/3e925a977aedcde3912d46dcc1f47713.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Kiali vizualizeaz\u0103 traficul actual prin Mesh<\/p>\n<p><\/p>\n<p>A\u0219a cum vedem, 100% din trafic ajunge pe serviciul frontend, apoi pe podul frontend cu eticheta v1, deoarece folosim un nginx-proxy simplu, care redirec\u021bioneaz\u0103 cererile c\u0103tre serviciul backend, care la r\u00e2ndul s\u0103u le redirec\u021bioneaz\u0103 c\u0103tre podurile backend cu eticheta v1.<\/p>\n<p><\/p>\n<p>Kiali func\u021bioneaz\u0103 perfect \u00eempreun\u0103 cu Istio \u0219i ofer\u0103 o solu\u021bie integrat\u0103 pentru vizualizarea Mesh-ului. Pur \u0219i simplu minunat.<\/p>\n<p><\/p>\n<h3 id=\"canary-deployment-1\">Canary Deployment<\/h3>\n<p><\/p>\n<p>Backend-ul nostru are deja dou\u0103 implement\u0103ri k8s, una pentru v1 \u0219i una pentru v2. Acum trebuie s\u0103-i spunem doar lui Istio s\u0103 redirec\u021bioneze un anumit procent din cereri c\u0103tre v2. <\/p>\n<p><\/p>\n<h3 id=\"shag-1-10\">Pasul 1: 10%<\/h3>\n<p><\/p>\n<p>\u0218i tot ce trebuie s\u0103 facem este s\u0103 ajust\u0103m greutatea VirtualService \u00een <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/wuestkamp\/k8s-deployment-example-istio-canary-infrastructure\/blob\/master\/i\/k8s\/istio.yaml\">istio.yaml<\/a><\/noindex>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">apiVersion: networking.istio.io\/v1alpha3\nkind: VirtualService\nmetadata:\n  name: backend\n  namespace: default\nspec:\n  gateways: []\n  hosts:\n  - \"backend.default.svc.cluster.local\"\n  http:\n  - match:\n    - {}\n    route:\n    - destination:\n        host: backend.default.svc.cluster.local\n        subset: v1\n        port:\n          number: 80\n      weight: 90\n    - destination:\n        host: backend.default.svc.cluster.local\n        subset: v2\n        port:\n          number: 80\n      weight: 10<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment \u00een Kubernetes #3: Istio\" src=\"\/wp-content\/uploads\/2020\/08\/5cf97856676873f5f3cba08b15964c18.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>Observ\u0103m c\u0103 10% din cereri sunt redirec\u021bionate c\u0103tre v2.<\/p>\n<p><\/p>\n<h4 id=\"shag-2-50\">Pasul 2: 50%<\/h4>\n<p><\/p>\n<p>\u0218i acum este suficient s\u0103-l cre\u0219tem la 50:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">apiVersion: networking.istio.io\/v1alpha3\nkind: VirtualService\nmetadata:\n  name: backend\n  namespace: default\nspec:\n...\n    - destination:\n        host: backend.default.svc.cluster.local\n        subset: v1\n        port:\n          number: 80\n      weight: 50\n    - destination:\n        host: backend.default.svc.cluster.local\n        subset: v2\n        port:\n          number: 80\n      weight: 50<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment \u00een Kubernetes #3: Istio\" src=\"\/wp-content\/uploads\/2020\/08\/c6b425b935e756a8b7ed72051db78763.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3 id=\"shag-3-100\">Pasul 3: 100%<\/h3>\n<p><\/p>\n<p>Acum implementarea Canary se poate considera complet\u0103 \u0219i tot traficul este redirec\u021bionat c\u0103tre v2:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment \u00een Kubernetes #3: Istio\" src=\"\/wp-content\/uploads\/2020\/08\/bb028dc47f0799dc9371ce89ae64f805.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3 id=\"testirovanie-canary-vruchnuyu\">Testarea manual\u0103 a Canary<\/h3>\n<p><\/p>\n<p>S\u0103 presupunem c\u0103 \u00een prezent trimitem c\u0103tre backend v2 10% din toate cererile. Ce se \u00eent\u00e2mpl\u0103 dac\u0103 dorim s\u0103 test\u0103m manual v2 pentru a ne asigura c\u0103 totul func\u021bioneaz\u0103 a\u0219a cum ne a\u0219tept\u0103m?<\/p>\n<p><\/p>\n<p>Putem ad\u0103uga o regul\u0103 de potrivire special\u0103, bazat\u0103 pe antetele HTTP:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">apiVersion: networking.istio.io\/v1alpha3\nkind: VirtualService\nmetadata:\n  name: backend\n  namespace: default\nspec:\n  gateways: []\n  hosts:\n  - \"backend.default.svc.cluster.local\"\n  http:\n  - match:\n    - headers:\n        canary:\n          exact: \"canary-tester\"\n    route:\n    - destination:\n        host: backend.default.svc.cluster.local\n        subset: v2\n        port:\n          number: 80\n      weight: 100\n  - match:\n    - {}\n    route:\n    - destination:\n        host: backend.default.svc.cluster.local\n        subset: v1\n        port:\n          number: 80\n      weight: 90\n    - destination:\n        host: backend.default.svc.cluster.local\n        subset: v2\n        port:\n          number: 80\n      weight: 10<\/code><\/pre>\n<p><\/p>\n<p>Acum folosind curl, putem solicita for\u021bat v2 trimi\u021b\u00e2nd antetul:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment \u00een Kubernetes #3: Istio\" src=\"\/wp-content\/uploads\/2020\/08\/eaf26cae21c403944110b5d7705e1ebc.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>Cereri f\u0103r\u0103 antet vor fi \u00een continuare gestionate \u00een raportul 1\/10:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment \u00een Kubernetes #3: Istio\" src=\"\/wp-content\/uploads\/2020\/08\/8cb0cf5832dd935ba5c4649856ac9005.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h4 id=\"canary-dlya-dvuh-zavisimyh-versiy\">Canary pentru dou\u0103 versiuni dependente<\/h4>\n<p><\/p>\n<p>Acum vom lua \u00een considerare un caz \u00een care avem versiunea v2 at\u00e2t pentru frontend c\u00e2t \u0219i pentru backend. Pentru ambele am specificat c\u0103 10% din trafic ar trebui s\u0103 mearg\u0103 la v2:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment \u00een Kubernetes #3: Istio\" src=\"\/wp-content\/uploads\/2020\/08\/4b5de3f82cb960102164034b7b6b100a.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>Observ\u0103m c\u0103 frontend v1 \u0219i v2 ambele redirec\u021bioneaz\u0103 traficul \u00een raportul 1\/10 c\u0103tre backend v1 \u0219i v2.<\/p>\n<p><\/p>\n<p>\u0218i ce s-ar \u00eent\u00e2mpla dac\u0103 am avea nevoie s\u0103 redirec\u021bion\u0103m traficul de la frontend-v2 doar c\u0103tre backend-v2, deoarece acesta nu este compatibil cu v1? Pentru aceasta, vom stabili un raport 1\/10 pentru frontend, care controleaz\u0103 ce trafic ajunge la backend-v2 utiliz\u00e2nd potrivirea dup\u0103 <code>sourceLabels<\/code> :<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">apiVersion: networking.istio.io\/v1alpha3\nkind: VirtualService\nmetadata:\n  name: backend\n  namespace: default\nspec:\n  gateways: []\n  hosts:\n  - \"backend.default.svc.cluster.local\"\n  http:\n...\n  - match:\n    - sourceLabels:\n        app: frontend\n        version: v2\n    route:\n    - destination:\n        host: backend.default.svc.cluster.local\n        subset: v2\n        port:\n          number: 80\n      weight: 100<\/code><\/pre>\n<p><\/p>\n<p>\u00cen rezultat, ob\u021binem ceea ce avem nevoie:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment \u00een Kubernetes #3: Istio\" src=\"\/wp-content\/uploads\/2020\/08\/43739627279a9af11885e602a3e96390.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3 id=\"otlichiya-ot-ruchnogo-canary-podhoda\">Diferente fa\u021b\u0103 de abordarea manual\u0103 a Canary<\/h3>\n<p><\/p>\n<p>\u00cen <em>prima parte<\/em> Am efectuat desf\u0103\u0219urarea Canary manual, folosind, de asemenea, dou\u0103 desf\u0103\u0219ur\u0103ri k8s. Acolo am gestionat raportul solicit\u0103rilor, modific\u00e2nd num\u0103rul de replici. Aceast\u0103 abordare func\u021bioneaz\u0103, dar are dezavantaje semnificative.<\/p>\n<p><\/p>\n<p>Istio ofer\u0103 posibilitatea de a defini raportul solicit\u0103rilor f\u0103r\u0103 a depinde de num\u0103rul de replici. Asta \u00eenseamn\u0103, de exemplu, c\u0103 putem folosi HPAs (Horizontal Pod Autoscalers \u2014 scalare orizontal\u0103 a podurilor) \u0219i nu este necesar s\u0103-l configur\u0103m \u00een conformitate cu starea actual\u0103 a desf\u0103\u0219ur\u0103rii Canary.<\/p>\n<p><\/p>\n<h3 id=\"itog\">Rezultatul<\/h3>\n<p><\/p>\n<p>Istio func\u021bioneaz\u0103 excelent, iar utilizarea sa \u00eempreun\u0103 cu Kiali ne ofer\u0103 o combina\u021bie foarte puternic\u0103. Urm\u0103toarea combina\u021bie de interes pe lista mea este combina\u021bia Spinnaker cu Istio pentru automatizare \u0219i analiz\u0103 Canary.<\/p>\n<p>Sursa: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/513578\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 Istio+Kiali \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Canary \u0434\u0435\u043f\u043b\u043e\u044f \u0421\u0442\u0430\u0442\u044c\u0438 \u044d\u0442\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 Canary Deployment \u0432 Kubernetes #1: Gitlab CI Canary Deployment \u0432 Kubernetes #2: Argo Rollouts (\u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f) Canary Deployment \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f Jenkins-X Istio Flagger Canary Deployment \u041d\u0430\u0434\u0435\u0435\u043c\u0441\u044f, \u0447\u0442\u043e \u0432\u044b \u0447\u0438\u0442\u0430\u043b\u0438 \u043f\u0435\u0440\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u044c, \u0433\u0434\u0435 \u043c\u044b \u043a\u0440\u0430\u0442\u043a\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u043b\u0438 \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Canary deployments \u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0438 \u043a\u0430\u043a \u0435\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":90700,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-90699","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.2.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 Istio+Kiali \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Canary \u0434\u0435\u043f\u043b\u043e\u044f\" \/>\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\/ro\/blog\/administrirovanie\/canary-deployment-v-kubernetes-3-istio\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\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\udd47Canary Deployment \u0432 Kubernetes #3: Istio | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 Istio+Kiali \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Canary \u0434\u0435\u043f\u043b\u043e\u044f\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/canary-deployment-v-kubernetes-3-istio\" \/>\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=\"2020-08-04T23:42:12+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-08-04T23:42:12+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\udd47Desf\u0103\u0219urarea Canary \u00een Kubernetes #3: Istio | ProHoster","description":"Folosirea Istio+Kiali pentru lansarea \u0219i vizualizarea implement\u0103rii Canary","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/canary-deployment-v-kubernetes-3-istio","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","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\udd47Canary Deployment \u0432 Kubernetes #3: Istio | ProHoster","og:description":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 Istio+Kiali \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Canary \u0434\u0435\u043f\u043b\u043e\u044f","og:url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/canary-deployment-v-kubernetes-3-istio","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":"2020-08-04T23:42:12+00:00","article:modified_time":"2020-08-04T23:42:12+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"90699","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":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 12:44:41","updated":"2022-09-28 14:34:54","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/90699","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=90699"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/90699\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/90700"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=90699"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=90699"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=90699"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}