{"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\/sv\/blog\/administrirovanie\/canary-deployment-v-kubernetes-3-istio","title":{"rendered":"Canary Deployment i Kubernetes #3: Istio","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h3 id=\"ispolzovanie-istiokiali-dlya-zapuska-i-vizualizacii-canary-deploya\">Anv\u00e4nda Istio+Kiali f\u00f6r att initiera och visualisera Canary-deployments<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment i 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\">Artiklar i denna cykel<\/h4>\n<p><\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/company\/nixys\/blog\/512766\/\">Canary Deployment i Kubernetes #1: Gitlab CI<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/company\/nixys\/blog\/513118\/\">Canary Deployment i Kubernetes #2: Argo Rollouts<\/a><\/noindex><\/li>\n<li>(denna artikel)<\/li>\n<li>Canary-deployment med 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>Vi hoppas att du har l\u00e4st <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/company\/nixys\/blog\/512766\/\">den f\u00f6rsta delen<\/a><\/noindex>, d\u00e4r vi kort f\u00f6rklarade vad Canary-deployments \u00e4r och visade hur man genomf\u00f6r dem med standardresurser i Kubernetes.<\/p>\n<p><\/p>\n<h3 id=\"istio\">Istio<\/h3>\n<p><\/p>\n<p>Och vi f\u00f6ruts\u00e4tter att n\u00e4r du l\u00e4ser denna artikel vet du redan vad Istio \u00e4r. Om inte, kan du l\u00e4sa om det <noindex><a rel=\"nofollow\" href=\"https:\/\/itnext.io\/kubernetes-istio-simply-visually-explained-58a7d158b83f?source=friends_link&amp;sk=378ed718d2d6cfd09e6d23c7616cba81\">h\u00e4r<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h3 id=\"prilozhenie-dlya-testov\">App f\u00f6r tester<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment i Kubernetes #3: Istio\" src=\"\/wp-content\/uploads\/2020\/08\/4c1e7d1644411cecaf52433b98219bb4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Varje pod inneh\u00e5ller tv\u00e5 containrar: v\u00e5r applikation och istio-proxy.<\/p>\n<p><\/p>\n<p>Vi kommer att anv\u00e4nda en enkel testapplikation med pods frontend-nginx och backend i Python. Podden med nginx kommer bara att omdirigera varje beg\u00e4ran till podden med backend och fungera som en proxy. Detaljer kan ses mer i de f\u00f6ljande yaml-filerna:<\/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\">K\u00f6ra testapplikationen sj\u00e4lv<\/h4>\n<p><\/p>\n<p>Om du vill f\u00f6lja mitt exempel och anv\u00e4nda denna testapplikation sj\u00e4lv, se <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/wuestkamp\/k8s-deployment-example-istio-canary-infrastructure\/blob\/master\/README.md\">readme-filen f\u00f6r projektet<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h3 id=\"nachalnyy-deployment\">Initial Deployment<\/h3>\n<p><\/p>\n<p>Vid starten av den f\u00f6rsta deploymenten ser vi att pods i v\u00e5r applikation har endast tv\u00e5 containrar, vilket inneb\u00e4r att Istio-sidecar f\u00f6r n\u00e4rvarande bara implementeras:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment i Kubernetes #3: Istio\" src=\"\/wp-content\/uploads\/2020\/08\/5e1340c271845973cf932cc291d98972.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>Och vi ser ocks\u00e5 Istio Gateway Loadbalancer i namnomr\u00e5det <code>istio-system<\/code>:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment i Kubernetes #3: Istio\" src=\"\/wp-content\/uploads\/2020\/08\/24549496f038bd61d1288b122c66e6ea.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h4 id=\"sozdanie-trafika\">Skapa trafik<\/h4>\n<p><\/p>\n<p>Vi kommer att anv\u00e4nda f\u00f6ljande IP f\u00f6r att generera trafik som kommer att tas emot av frontend-pods och omdirigeras till backend-pods:<\/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>Vi kommer ocks\u00e5 att l\u00e4gga till <code>frontend.istio-test<\/code> i v\u00e5r hosts-fil.<\/p>\n<p><\/p>\n<h4 id=\"prosmotr-mesh-cherez-kiali\">Visa Mesh via Kiali<\/h4>\n<p><\/p>\n<p>Vi har installerat testapplikationen och Istio tillsammans med Tracing, Grafana, Prometheus och Kiali (se mer p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/wuestkamp\/k8s-deployment-example-istio-canary-infrastructure\/blob\/master\/README.md\">readme-filen f\u00f6r projektet<\/a><\/noindex>). F\u00f6ljaktligen kan vi anv\u00e4nda Kiali via:<\/p>\n<p><\/p>\n<p><code>istioctl dashboard kiali # admin:admin<\/code><\/p>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment i Kubernetes #3: Istio\" src=\"\/wp-content\/uploads\/2020\/08\/3e925a977aedcde3912d46dcc1f47713.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Kiali visualiserar den aktuella trafiken genom Mesh<\/p>\n<p><\/p>\n<p>Som vi kan se, g\u00e5r 100% av trafiken till frontend-tj\u00e4nsten, sedan till frontend-poden med etikett v1, eftersom vi anv\u00e4nder en enkel nginx-proxy som omdirigerar beg\u00e4rningar till backend-tj\u00e4nsten, som i sin tur omdirigerar dem till backend-pods med etikett v1.<\/p>\n<p><\/p>\n<p>Kiali fungerar utm\u00e4rkt tillsammans med Istio och erbjuder en f\u00e4rdig l\u00f6sning f\u00f6r att visualisera Mesh. Bara fantastiskt.<\/p>\n<p><\/p>\n<h3 id=\"canary-deployment-1\">Canary-deployment<\/h3>\n<p><\/p>\n<p>V\u00e5r backend har redan tv\u00e5 k8s-deployments, en f\u00f6r v1 och en f\u00f6r v2. Nu beh\u00f6ver vi bara s\u00e4ga till Istio att omdirigera en viss procentandel av beg\u00e4rningarna till v2. <\/p>\n<p><\/p>\n<h3 id=\"shag-1-10\">Steg 1: 10%<\/h3>\n<p><\/p>\n<p>Och allt vi beh\u00f6ver g\u00f6ra \u00e4r att justera vikten p\u00e5 VirtualService i <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 i Kubernetes #3: Istio\" src=\"\/wp-content\/uploads\/2020\/08\/5cf97856676873f5f3cba08b15964c18.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>Vi ser att 10 % av f\u00f6rfr\u00e5gningarna omdirigeras till v2.<\/p>\n<p><\/p>\n<h4 id=\"shag-2-50\">Steg 2: 50 %<\/h4>\n<p><\/p>\n<p>Och nu \u00e4r det tillr\u00e4ckligt enkelt att \u00f6ka den till 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 i 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\">Steg 3: 100 %<\/h3>\n<p><\/p>\n<p>Nu kan Canary-distributionen anses vara slutf\u00f6rd och all trafik omdirigeras till v2:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment i 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\">Manuell testning av Canary<\/h3>\n<p><\/p>\n<p>Anta att vi nu skickar 10 % av alla f\u00f6rfr\u00e5gningar till backend v2. Vad h\u00e4nder om vi vill testa v2 manuellt f\u00f6r att se till att allt fungerar som vi f\u00f6rv\u00e4ntar oss?<\/p>\n<p><\/p>\n<p>Vi kan l\u00e4gga till en speciell matchningsregel baserad p\u00e5 HTTP-huvuden:<\/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>Nu anv\u00e4nder vi curl f\u00f6r att tvinga en beg\u00e4ran till v2 genom att skicka huvudet:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment i Kubernetes #3: Istio\" src=\"\/wp-content\/uploads\/2020\/08\/eaf26cae21c403944110b5d7705e1ebc.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>Beg\u00e4rningar utan huvudet kommer fortfarande att hanteras enligt f\u00f6rh\u00e5llandet 1\/10:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment i 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 f\u00f6r tv\u00e5 beroende versioner<\/h4>\n<p><\/p>\n<p>Nu ska vi se ett scenario d\u00e4r vi har version v2 f\u00f6r b\u00e5de frontend och backend. F\u00f6r b\u00e5da har vi angett att 10 % av trafiken ska g\u00e5 till v2:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment i Kubernetes #3: Istio\" src=\"\/wp-content\/uploads\/2020\/08\/4b5de3f82cb960102164034b7b6b100a.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<p>Vi ser att b\u00e5de frontend v1 och v2 skickar trafik i f\u00f6rh\u00e5llandet 1\/10 till backend v1 och v2.<\/p>\n<p><\/p>\n<p>Vad h\u00e4nder om vi beh\u00f6ver skicka trafik fr\u00e5n frontend-v2 endast till backend-v2, eftersom det inte \u00e4r kompatibelt med v1? F\u00f6r detta kommer vi att st\u00e4lla in ett f\u00f6rh\u00e5llande 1\/10 f\u00f6r frontend, som kontrollerar vilken trafik som g\u00e5r till backend-v2 med hj\u00e4lp av matchning baserat p\u00e5 <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>Som vi f\u00e5r det vi beh\u00f6ver:<\/p>\n<p>\n<img decoding=\"async\" alt=\"Canary Deployment i 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\">Skillnaderna fr\u00e5n den manuella Canary-metoden<\/h3>\n<p><\/p>\n<p>I <em>f\u00f6rsta delen<\/em> Vi utf\u00f6rde Canary-distribution manuellt, ocks\u00e5 med hj\u00e4lp av tv\u00e5 k8s-distributioner. D\u00e4r hanterade vi f\u00f6rh\u00e5llandet mellan f\u00f6rfr\u00e5gningar genom att \u00e4ndra antalet repliker. Denna metod fungerar, men har allvarliga nackdelar.<\/p>\n<p><\/p>\n<p>Istio ger m\u00f6jlighet att definiera f\u00f6rh\u00e5llandet mellan f\u00f6rfr\u00e5gningar oavsett antalet repliker. Det betyder till exempel att vi kan anv\u00e4nda HPAs (Horizontal Pod Autoscalers \u2014 horisontell skalning av pods) och det beh\u00f6ver inte st\u00e4llas in utifr\u00e5n det aktuella tillst\u00e5ndet av Canary-distributionen.<\/p>\n<p><\/p>\n<h3 id=\"itog\">Resultat<\/h3>\n<p><\/p>\n<p>Istio fungerar utm\u00e4rkt och genom att anv\u00e4nda det tillsammans med Kiali f\u00e5r vi en mycket kraftfull kombination. N\u00e4sta p\u00e5 min lista \u00f6ver intressen \u00e4r kombinationen av Spinnaker med Istio f\u00f6r automatisering och Canary-analys.<\/p>\n<p>K\u00e4lla: <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.4 - 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\/sv\/blog\/administrirovanie\/canary-deployment-v-kubernetes-3-istio\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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\/sv\/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\udd47Canary Deployment i Kubernetes #3: Istio | ProHoster","description":"Anv\u00e4nda Istio+Kiali f\u00f6r att initiera och visualisera Canary-deployments","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/canary-deployment-v-kubernetes-3-istio","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/90699","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=90699"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/90699\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/90700"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=90699"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=90699"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=90699"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}