Istio 13 Gateway LoadBalancer

Submitted by Lizhe on Wed, 06/24/2020 - 01:42

 

Kubernetes 提供了 Ingress 规范,用来入站流量管理

Istio的早期版本也实现了自己的 Ingress,后又因为 Ingress 在后来无法满足不断增加的需求,所以又推出了 Gateway,用于在网络边缘进行入站和出站的流量管理

Ingress Gateway 在逻辑上相当于一个负载均衡器

实际上之前做过的 VirtualService 对象, 都默认包含 gateways 字段,如果没有指定,那么默认值是

 

gateways:

- mesh

 

这里的 mesh 是 Istio 内部的虚拟 Gateway , 代表网络内部的所有 Sidecar, 换句话说,所有网络内部服务之间的相互通信,都是通过这个网关进行的。

 

如果要对外部提供服务,就需要定义 Gateway 对象, 并在 gateways 字段中进行赋值。
一旦在gateways中填写了mesh之外的对象名称,就要继续对内部通信进行流量控制,并必须显示地将内置的mesh对象名称也加入列表中

 


 

Istio 12 url rewrite

Submitted by Lizhe on Tue, 06/23/2020 - 09:40

个人认为 rewrite 比 redirect 好用,因为rewrite可以和route一起工作

 

apiVersion: networking.istio.io/v1alpha3

kind: VirtualService

metadata:

  name: flaskapp-canary

  namespace: lizhe

spec:

  hosts:

  - flaskapp-service.lizhe.svc.cluster.local

  http:

    - match:

      - uri:

          prefix: /env/rewriteme1

      rewrite:

        uri: /env/version

Istio 11 根据来源进行路由

Submitted by Lizhe on Tue, 06/23/2020 - 06:33

金丝雀的用例里,是基于 HTTP Header 进行路由的,这里尝试基于 源Pod ( sleep ) 的 label 对请求进行路由

首先我们去修改 sleep 应用,把它拆分成两个部署,分别label成 v1 和 v2

apiVersion: v1

kind: Service

metadata:

  name: sleep

  namespace: lizhe 

  labels: 

    app: sleep

spec: 

  selector: 

    app: sleep

  ports: 

    - name: ssh

      port: 80

 

---

 

Istio 10 金丝雀部署

Submitted by Lizhe on Tue, 06/23/2020 - 05:55

 

这里使用v2 当做新版本,在header中加入一个 lab:canary 用以区分用户

有 header 的用户导向 v2,没有的默认指向 v1

20200623020716

修改一下VirtualService

apiVersion: networking.istio.io/v1alpha3

kind: VirtualService

metadata:

  name: flaskapp-canary

Istio 9 http流量控制

Submitted by Lizhe on Tue, 06/23/2020 - 02:14

在Kubernetes中访问一个服务时,需要指定协议,服务名和端口

在Istio的服务网格中对服务进行了进一步抽象

  • 可以使用Pod标签对具体服务进行分组
  • 可以定义负载均衡策略
  • 可以指定TLS要求
  • 可以为服务设置连接池大小

 

 

TrafficPolicy 

Istio 8 Kiali

Submitted by Lizhe on Mon, 06/22/2020 - 08:55

Kiali 也是一个用于 Istio 可视化的工具,Kiali 目前是专用于 Istio 系统的,提供了监控,可视化及跟踪等通用功能

还专门提供了 Istio 的配置验证,健康评估等高级功能

20200622051143

 

每一级的描述都很清晰,个人认为比Jaeger 要实用一些

Istio 7 Jaeger

Submitted by Lizhe on Mon, 06/22/2020 - 08:18

Jaeger 是一个用于分布式跟踪的开源软件,由 Uber 开源

Jaeger 不是监控工具,而是分布式追踪工具,简单来说就是查看 调用链路

20200622041844

 

20200622042534

 

 

Istio 5 Grafana

Submitted by Lizhe on Mon, 06/22/2020 - 07:43

Grafana 总体来说是一款 可视化的监控工具,采用go语言编写,

数据源 和 插件 支持的也比较全面,istio 的主要数据源是 Prometheus 

20200622034605

 

我们先去 Istio中搞点流量