首先理解envoy配置需要理解listener,router,cluster,endpoint这些概念,对应lds,rds,cds,eds统称xds。
本文使用istio自带的bookinfo sample来展示底层envoy具体的配置情况

第一部分文章展示两种情况:

  1. namespace启用默认注入sidecar的istio配置情况
  2. 仅部署一个gateway指向内部原生kube服务的情况

默认注入sidecar,没有配置istio规则的情况

启用默认注入,部署bookinfo

kubectl label namespace default istio-injection=enabled
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml

此时没应用任何istio规则,但是所有被注入的pod已经都处于istio管理下

# istioctl proxy-status
NAME                                                  CLUSTER        CDS        LDS        EDS        RDS          ECDS         ISTIOD                      VERSION
details-v1-7d88846999-6t7f5.default                   Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-7cd55d9dc4-pw4x4     1.15.0
istio-egressgateway-775cf5d9b5-h24dz.istio-system     Kubernetes     SYNCED     SYNCED     SYNCED     NOT SENT     NOT SENT     istiod-7cd55d9dc4-pw4x4     1.15.0
istio-ingressgateway-ffbcc4c7f-9rw9j.istio-system     Kubernetes     SYNCED     SYNCED     SYNCED     NOT SENT     NOT SENT     istiod-7cd55d9dc4-pw4x4     1.15.0
productpage-v1-5f578dd9b7-kxbq2.default               Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-7cd55d9dc4-pw4x4     1.15.0
ratings-v1-754f9c4975-gbzrn.default                   Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-7cd55d9dc4-pw4x4     1.15.0
reviews-v1-69865ff55-vw54r.default                    Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-7cd55d9dc4-pw4x4     1.15.0
reviews-v2-789d584fbf-jd6rp.default                   Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-7cd55d9dc4-pw4x4     1.15.0
reviews-v3-64f8b69f99-9rhhm.default                   Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-7cd55d9dc4-pw4x4     1.15.0

查看gateway,没有任何gateway规则存在

# istioctl proxy-config listeners istio-ingressgateway-ffbcc4c7f-9rw9j.istio-system
ADDRESS PORT  MATCH DESTINATION
0.0.0.0 15021 ALL   Inline Route: /healthz/ready*
0.0.0.0 15090 ALL   Inline Route: /stats/prometheus*

查看其中一个服务,都是kube svc的对应产生的规则

# istioctl proxy-config listeners productpage-v1-5f578dd9b7-kxbq2.default
ADDRESS        PORT  MATCH                                                                                           DESTINATION
172.16.255.227 53    ALL                                                                                             Cluster: outbound|53||kube-dns.kube-system.svc.cluster.local
0.0.0.0        80    Trans: raw_buffer; App: http/1.1,h2c                                                            Route: 80
0.0.0.0        80    ALL                                                                                             PassthroughCluster
172.16.255.89  80    Trans: raw_buffer; App: http/1.1,h2c                                                            Route: gateway.istio-ingress.svc.cluster.local:80
172.16.255.89  80    ALL                                                                                             Cluster: outbound|80||gateway.istio-ingress.svc.cluster.local
172.16.252.1   443   ALL                                                                                             Cluster: outbound|443||kubernetes.default.svc.cluster.local
172.16.252.27  443   ALL                                                                                             Cluster: outbound|443||istiod.istio-system.svc.cluster.local
172.16.252.94  443   Trans: raw_buffer; App: http/1.1,h2c                                                            Route: hpa-metrics-service.kube-system.svc.cluster.local:443
部分省略…………

随机查看其中一个服务productpage,已经有了根据kube Service生成的默认routes

# istioctl proxy-config routes productpage-v1-5f578dd9b7-kxbq2.default -o json{"name": "reviews.default.svc.cluster.local:9080","domains": ["reviews.default.svc.cluster.local","reviews.default.svc.cluster.local:9080","reviews","reviews:9080","reviews.default.svc","reviews.default.svc:9080","reviews.default","reviews.default:9080","172.16.255.33","172.16.255.33:9080"],"routes": [{"name": "default","match": {"prefix": "/"},"route": {"cluster": "outbound|9080||reviews.default.svc.cluster.local",
部分省略…………"decorator": {"operation": "reviews.default.svc.cluster.local:9080/*"

应用一个GatewayVirtualService的情况

首先创建一个bookinfo对应的Gateway暴露80端口,然后创建一个VirtualService指向productpage

注意此时没有创建DestinationRule,productpage指向的是原理就有的kube service

# kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:name: bookinfo-gateway
spec:selector:istio: ingressgateway # use istio default controllerservers:- port:number: 80name: httpprotocol: HTTPhosts:- "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:name: bookinfo
spec:hosts:- "*"gateways:- bookinfo-gatewayhttp:- match:- uri:exact: /productpage- uri:prefix: /static- uri:exact: /login- uri:exact: /logout- uri:prefix: /api/v1/productsroute:- destination:host: productpageport:number: 9080

这时可以看到VirtualService规则都转化成了envoy routes

# istioctl proxy-config routes istio-ingressgateway-ffbcc4c7f-9rw9j.istio-system --name  http.8080
NAME          DOMAINS     MATCH                 VIRTUAL SERVICE
http.8080     *           /productpage          bookinfo.default
http.8080     *           /static*              bookinfo.default
http.8080     *           /login                bookinfo.default
http.8080     *           /logout               bookinfo.default
http.8080     *           /api/v1/products*     bookinfo.default

继续查看详细信息,这里只截取其中/productpage部分,

可以看到metadata.filterMetadata.istio里有对应的istio配置项

“config”: “/apis/networking.istio.io/v1alpha3/namespaces/default/virtual-service/bookinfo”

这样方便核查某条规则对应生产的配置是否正确

# istioctl proxy-config routes istio-ingressgateway-ffbcc4c7f-9rw9j.istio-system --name  http.8080 -o yamlmatch:caseSensitive: truepath: /productpagemetadata:filterMetadata:istio:config: /apis/networking.istio.io/v1alpha3/namespaces/default/virtual-service/bookinforoute:cluster: outbound|9080||productpage.default.svc.cluster.localmaxStreamDuration:grpcTimeoutHeaderMax: 0smaxStreamDuration: 0sretryPolicy:hostSelectionRetryMaxAttempts: "5"numRetries: 2retriableStatusCodes:- 503retryHostPredicate:- name: envoy.retry_host_predicates.previous_hoststypedConfig:'@type': type.googleapis.com/envoy.extensions.retry.host.previous_hosts.v3.PreviousHostsPredicateretryOn: connect-failure,refused-stream,unavailable,cancelled,retriable-status-codestimeout: 0s- decorator:operation: productpage.default.svc.cluster.local:9080/static*
部分省略…………

继续查看route对应的cluster

# istioctl proxy-config clusters istio-ingressgateway-ffbcc4c7f-9rw9j.istio-system --fqdn productpage.default.svc.cluster.local
SERVICE FQDN                              PORT     SUBSET     DIRECTION     TYPE     DESTINATION RULE
productpage.default.svc.cluster.local     9080     -          outbound      EDS

详细版本

# istioctl proxy-config clusters istio-ingressgateway-ffbcc4c7f-9rw9j.istio-system --fqdn productpage.default.svc.cluster.local  -o json
部分省略…………"name": "outbound|9080||productpage.default.svc.cluster.local","type": "EDS","edsClusterConfig": {"edsConfig": {"ads": {},"initialFetchTimeout": "0s","resourceApiVersion": "V3"},"serviceName": "outbound|9080||productpage.default.svc.cluster.local"},
部分省略…………

最后是对应的endpoints

# istioctl proxy-config endpoints istio-ingressgateway-ffbcc4c7f-9rw9j.istio-system --cluster "outbound|9080||productpage.default.svc.cluster.local"
ENDPOINT             STATUS      OUTLIER CHECK     CLUSTER
172.16.0.15:9080     HEALTHY     OK                outbound|9080||productpage.default.svc.cluster.local

详细版本可以用一下命令

# istioctl proxy-config endpoints istio-ingressgateway-ffbcc4c7f-9rw9j.istio-system --cluster "outbound|9080||productpage.default.svc.cluster.local" -o yaml
全部省略…………

小结

从上面的例子可以看出,istio提取了所有相关的kube Service并转化成自己的envoy规则

用istioctl看istio生成的envoy xds配置(一)相关推荐

  1. Istio一之Envoy工作原理

    在学习istio前先了解两个术语服务网格(Service Mesh)和sidecar. 服务网格(Service Mesh):用于描述构成这些应用程序的微服务网络以及应用之间的交互.它的需求包括服务发 ...

  2. 从一维cutting问题看列生成算法

    从一维cutting问题看列生成算法 列生成算法 一维cutting问题 列生成原理 集合覆盖模型 列生成步骤说明 python 代码实现 列生成算法 列生成在求解大型线性规划时往往都表现良好,在很多 ...

  3. 新手必看:生成对抗网络的初学者入门指导

    新手必看:生成对抗网络的初学者入门指导 https://www.cnblogs.com/DicksonJYL/p/9698877.html 本文为 AI 研习社编译的技术博客,原标题 A Beginn ...

  4. MoE 系列(三)|使用 Istio 动态更新 Go 扩展配置

    上一篇我们用 Go 扩展实现了 Basic Auth,体验了 Go 扩展从 Envoy 接受配置. 之所以这么设计,是想复用 Envoy 原有的 xDS 配置推送通道,今天我们就来体验一番,云原生的配 ...

  5. MoE 系列(二)|Golang 扩展从 Envoy 接收配置

    文|朱德江(GitHub ID:doujiang24) MOSN 项目核心开发者蚂蚁集团技术专家 专注于云原生网关研发的相关工作 本文 1445 字 阅读 5 分钟 上一篇我们用一个简单的示例,体验了 ...

  6. CentOS生成自签名证书配置Apache https

    CentOS生成自签名证书配置Apache https apache的安装就不用说了 1.安装完apache之后,安装mod_ssl和openssl yum install mod_ssl opens ...

  7. Java11.0.2怎么生成JRE_java环境变量配置,jdk13.0.1中没有jre解决办法

    标签:完成后   回车   手动   完成   cmd   没有   alt   span   环境变量配置 java.Oracle中下载了最新的jdk13.0.1,安装之后发现没自动生成jre,导致 ...

  8. 5G NR学习理解系列——MATLAB5G信源的生成之SSB参数配置

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 5G NR学习理解系列--MATLAB5G信源的生成之SSB参数配置 前言 SSB参数的位置 SSB参数详细解释 信号时频图 总结 前 ...

  9. python使用fpdf生成pdf文件:配置多种语言字体写入多种文字

    python使用fpdf生成pdf文件:配置多种语言字体写入多种文字 目录

最新文章

  1. linux进程控制程序设计论文,嵌入式,linux进程控制程序设计
  2. dubbo在idea下的使用创建 服务者,消费者 注册中心
  3. liferay 定时调度器用法
  4. 工程师最重要的能力是什么
  5. jQuery.extend() 使用语法详解
  6. 【转】DELPHI 对DICOM中的窗宽、窗位调整
  7. ddrelease64 黑苹果_High Sierra 黑苹果构建 微星X99A GAMING PRO CARBON+i7 6800k+GTX1070
  8. TJU 2248. Channel Design 最小树形图
  9. FCKeditor在ASP.NET环境中配置使用
  10. dpl直播源_上千个高清无码直播源,爽歪歪!
  11. Ubuntu Linux系统备份与还原命令技巧
  12. 罗技G304鼠标的按键宏定义
  13. CefSharp 实现拖拉滑动验证Demo
  14. 2018最新中国知名区块链公司排行榜
  15. pyodbc 操作SQL Server数据库
  16. YoungTalk-STM32入门100步-回顾总结与展望(98-100)
  17. [学习笔记]后缀系列总结
  18. c语言用十年算入门,初识C语言_十年饮冰 难凉热血的技术博客_51CTO博客
  19. 前端获取计算机设备信息,前端获取设备/APP信息
  20. AltiumDesigner中如何将原理图导成黑白色图

热门文章

  1. 《无间道》中的“盲签字”
  2. 百度mp3批量下载器 v1.0.2.5 绿色不要注册
  3. i5 10500和i5 10400哪个好
  4. 统一身份认证登录详细介绍-identity4
  5. 如果使代码更加合理更加有条理
  6. 用 CSS 从零写一个时间轴效果
  7. python幸运数字判断_Python矩阵的幸运数字
  8. 你们的老朋友又来啦!来听小强讲视频超分辨率算法前沿进展
  9. Android消息推送 解决方案
  10. STM32CubeMX安装及使用教程(一)