Istio is “An open platform to connect, secure, control and observe services”.
Istio是一个可以服务治理的开放平台,涉及到服务的连接、安全、管理以及观察。

  • 连接:智能控制服务之间的调用流量,能够实现灰度升级、AB测试和红黑部署等功能
  • 安全:自动为服务之间的调用提供认证、授权和加密
  • 管理:使用户定义的策略生效,保证资源在消费者中公平地分配
  • 观察:查看服务运行期间的各种数据,比如日志、监控、链路追踪,了解服务的运行情况

    架构

    image.png

  • Proxy以边车模式与应用容器运行在同一个pod中。proxy使用了envoy作为代理通信的插件。

  • Pilot接收管理员发出的指令或规则,遥控所有envoy的行为。是智能路弹性等功能的入口。
  • Gallery,验证用户编写的Istio API配置。
  • Citadal,管理集群的密钥和证书

    网络规则

    参考链接:https://istio.io/latest/docs/concepts/traffic-management/#gateway-example

    Virtual Service

    Virtual Service(vs)和Destination Rule(dr)是istio的流量路由管理功能的核心组件。
    vs定义了网络请求的转发规则,将请求的调用方和实现方解耦。
    1. apiVersion: networking.istio.io/v1alpha3
    2. kind: VirtualService
    3. metadata:
    4. name: reviews
    5. spec:
    6. hosts:
    7. - reviews # 处理host为‘reviews’的请求
    8. http:
    9. - match: # 符合用户名为‘jason’条件的请求分发到v2版本
    10. - headers:
    11. end-user:
    12. exact: jason
    13. route:
    14. - destination:
    15. host: reviews
    16. subset: v2
    17. - route: # 默认分发到v3版本
    18. - destination:
    19. host: reviews
    20. subset: v3

    Destination Rule

    vs定义了将请求转发到哪一个目标服务;dr定义了针对该目标服务的请求要进行哪些处理(负载均衡模型、TLS 安全模式或熔断器设置等) ```yaml apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata: name: my-destination-rule spec: host: my-svc # 针对host为‘my-svc’的请求,随机选择v1-v3中的一个子集 trafficPolicy: loadBalancer:
    simple: RANDOM
    
    subsets: # v1与v3子集内部使用默认的随机策略
    • name: v1 labels: version: v1 # 含有label=v1的pod等
    • name: v2 # v2子集内部使用轮询策略 labels: version: v2 trafficPolicy: loadBalancer:
      simple: ROUND_ROBIN
      
    • name: v3 labels: version: v3
<a name="pCoCX"></a>
## Gateway
Gateway(gw)定义了进入或流出istio管理的服务网格的流量入口/出口,需要对每个gw绑定一个对应的vs用于管理这些流量。<br />istio提供了预定义的流量入口(istio-ingressgateway)和流量出口(istio-egressgateway)。
```yaml
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: ext-host-gwy
spec:
  selector:
    app: my-gateway-controller
  servers:
  - port:
      number: 443
      name: https
      protocol: HTTPS
    hosts:
    - ext-host.example.com
    tls:
      mode: SIMPLE
      credentialName: ext-host-cert
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: virtual-svc
spec:
  hosts:
  - ext-host.example.com
  gateways:
  - ext-host-gwy
    xxx

Service Entry

Service Entry(se)定义了istio服务网格之外的服务,方便网格内部的组件将流量转发到网格外部。

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: svc-entry
spec:
  hosts:
  - ext-svc.example.com
  ports:
  - number: 443
    name: https
    protocol: HTTPS
  location: MESH_EXTERNAL
  resolution: DNS

规则图示