Below you will find pages that utilize the taxonomy term “Istio”
September 5, 2023
istio 中 sidecar 注入实现原理
"\u003cp\u003e在 istio 中为了对流量进行有效的管理,一般通过\u003ccode\u003e注入\u003c/code\u003e的方式将代理 \u003ccode\u003eistio-proxy\u003c/code\u003e 与应用程序一起位于同一个Pod,然后通过 \u003ccode\u003eistio-init \u003c/code\u003e initContainer修改 iptables 实现 \u003ccode\u003eingress\u003c/code\u003e 或 \u003ccode\u003eegress\u003c/code\u003e,那么在 istio 中这个注入是如何实现的呢,本节对其实现原理进行一些分析。\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"https://istio.io/latest/docs/concepts/security/arch-sec.svg\" alt=\"https://istio.io/latest/docs/concepts/security/arch-sec.svg\"\u003e\u003c/p\u003e\n\u003ch1 id=\"实现原理\"\u003e实现原理\u003c/h1\u003e\n\u003cp\u003e在上一节\u003ca href=\"https://blog.haohtml.com/archives/34883/\"\u003e《apiserver 中的webhook开发教程》\u003c/a\u003e 我们介绍过\u003ccode\u003eadmission controller\u003c/code\u003e 基本实现原理,由此得知当创建一个资源对象的时候,可以通过定义 \u003ccode\u003eValidatingWebhookConfiguration\u003c/code\u003e 或 \u003ccode\u003eMutatingWebhookConfiguration\u003c/code\u003e 实现在创建的进程中对这些 webhook 进行调用。而 \u003ccode\u003eMutatingWebhookConfiguration\u003c/code\u003e 则可以对请求的资源进行修改。在istio中的 \u003ccode\u003einjection\u003c/code\u003e 正是基于此原理实现的。\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"https://blogstatic.haohtml.com/uploads/2023/08/6ca5dd6b207691069de1cf4df59cc6ad.png\" alt=\"\"\u003e\u003c/p\u003e\n\u003ch1 id=\"webhook配置\"\u003ewebhook配置\u003c/h1\u003e\n\u003cp\u003e当我们在k8s集群中安装 istio 后,会创建一些资源,如 \u003ccode\u003edeployment\u003c/code\u003e、\u003ccode\u003eservice\u003c/code\u003e、\u003ccode\u003ecrd\u003c/code\u003e 等\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e$ istioctl …\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e"
April 25, 2023
istio之pilot-agent 源码分析
"\u003cp\u003e源码版本:istio-v1.11.3\u003c/p\u003e\n\u003cp\u003e为了方便理解,本文会介绍到 \u003ccode\u003evm\u003c/code\u003e 和 \u003ccode\u003e容器\u003c/code\u003e 两种部署形式的情况,一般会在讲解时提到,因此需要注意当前的部署方式,不过他们的架构是完全一样的。\u003c/p\u003e\n\u003ch1 id=\"架构\"\u003e架构\u003c/h1\u003e\n\u003cp\u003e\u003ccode\u003epilot\u003c/code\u003e 共分两个主要模块,一个是 \u003ccode\u003epilot-agent\u003c/code\u003e 用来提供 pod 中的服务发现 \u003ccode\u003e客户端\u003c/code\u003e,另一个是 \u003ccode\u003epolot-discovery\u003c/code\u003e 提供服务发现 \u003ccode\u003e服务端\u003c/code\u003e。\u003cimg src=\"https://blogstatic.haohtml.com/uploads/2023/04/d2b5ca33bd970f64a6301fa75ae2eb22-4.png\" alt=\"\"\u003e\u003c/p\u003e\n\u003cp\u003e其中 \u003ccode\u003eenvoy\u003c/code\u003e 和 \u003ccode\u003eIstio Agent\u003c/code\u003e 就是我们上面所讲的 \u003ccode\u003epilot-agent\u003c/code\u003e 模块,其为 \u003ccode\u003e数据面\u003c/code\u003e 组件,而 \u003ccode\u003eIstiod\u003c/code\u003e 则为 \u003ccode\u003e控制面\u003c/code\u003e,模块对应源码见\u003c/p\u003e\n\u003ch1 id=\"pilot-agent\"\u003epilot-agent\u003c/h1\u003e\n\u003cp\u003e对于 \u003ccode\u003epolot-agent\u003c/code\u003e 它运行在每个pod中 ,并以 \u003ccode\u003esidecar\u003c/code\u003e 方式与应用容器运行在同一个pod。如果你使用的是 \u003ccode\u003evm\u003c/code\u003e 的话,则可以在当前主机通过 \u003ccode\u003epstree\u003c/code\u003e 命令看到进程视图\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e# pstree -pu 24530\nsu(24530)───pilot-agent(24611,istio-proxy)─┬─envoy(24619)─┬─{envoy}(24620) …\u003c/code\u003e\u003c/pre\u003e"
September 13, 2021
istio在虚拟机vm下的安装方法
"\u003cp\u003e建议参考官方文档 https://istio.io/latest/zh/docs/setup/install/virtual-machine/ ,这里提醒大家对于命令中文版部分命令与英文版不一致,请以 \u003cstrong\u003e英文版\u003c/strong\u003e 为准。\u003c/p\u003e\n\u003cp\u003e对于istio在vm上的安装教程主要分为三部分。首先是在k8s的master节点生成vm连接主节点的一些配置信息,其实是在vm上应用这些配置信息,最后也就是验证连接是否成功。\u003c/p\u003e\n\u003cp\u003e本篇主要介绍“单网络”的情况, 对于”多网络“请自行参考官方文档。\u003c/p\u003e\n\u003ch1 id=\"vm环境准备\"\u003evm环境准备\u003c/h1\u003e\n\u003ch2 id=\"生成vm通讯配置信息\"\u003e生成vm通讯配置信息\u003c/h2\u003e\n\u003cp\u003e这里主要介绍一些新手迷惑的部分。如环境变量设置及vm注册的方式\u003c/p\u003e\n\u003ch3 id=\"设置环境变量\"\u003e设置环境变量\u003c/h3\u003e\n\u003cp\u003e在设置变量时,对于”单网络“来讲 CLUSTER_NETWORK 和 VM_NETWORK 保留空值即可。如我这里设置如下\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e$ VM_APP\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;myapp\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e$ VM_NAMESPACE\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;vm\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e$ WORK_DIR\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;/root/myapp\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e$ SERVICE_ACCOUNT\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;vm-sa\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e$ CLUSTER_NETWORK\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u0026#34; …\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e"
August 7, 2021
服务网格Istio之服务入口 ServiceEntry
"\u003cp\u003e使用服务入口(Service Entry) 来添加一个服务入口到 Istio 内部维护的服务注册中心。添加了服务入口后,Envoy 代理可以向服务发送流量,就好像它是网格内部的服务一样,可参考 \u003ca href=\"https://istio.io/latest/zh/docs/concepts/traffic-management/#service-entries\"\u003ehttps://istio.io/latest/zh/docs/concepts/traffic-management/#service-entries\u003c/a\u003e。\u003c/p\u003e\n\u003cp\u003e简单的理解就是允许内网向外网服务发送流量请求,但你可能会说正常情况下在pod里也是可以访问外网的,这两者有什么区别呢?\u003c/p\u003e\n\u003cp\u003e确实默认情况下,Istio 配置 Envoy 代理可以将请求传递给外部服务。但是无法使用 Istio 的特性来控制没有在网格中注册的目标流量。这也正是 ServiceEntry 真正发挥的作用,通过配置服务入口允许您管理运行在网格外的服务的流量。\u003c/p\u003e\n\u003cp\u003e此外,可以配置虚拟服务和目标规则,以更精细的方式控制到服务条目的流量,就像为网格中的其他任何服务配置流量一样。\u003c/p\u003e\n\u003cp\u003e为了更好的理解这一块的内容,我们先看一下普通POD发送请求的流程图\u003cimg src=\"https://blogstatic.haohtml.com/uploads/2021/08/d2b5ca33bd970f64a6301fa75ae2eb22.png\" alt=\"\"\u003e普通 Pod 请求\u003c/p\u003e\n\u003ch1 id=\"创建-serviceentry-资源\"\u003e创建 ServiceEntry 资源\u003c/h1\u003e\n\u003cp\u003e举例来说:\u003c/p\u003e\n\u003cp\u003esvc-entry.yaml …\u003c/p\u003e"