初识istio

定义

是一个完全开源的服务网格,作为透明的一层接入到现有的分布式应用程序里。它也是一个平台,拥有可以集成任何日志、遥测和策略系统的 API 接口。Istio 多样化的特

原理

通过在整个环境中部署一个特殊的 sidecar 代理为服务添加 Istio 的支持,而代理会拦截微服务之间的所有网络通信,然后使用其控制平面的功能来配置和管理 Istio

提供能力

  • 流量管理 (如熔断器、超时和重试)
  • 安全通信
  • 观察性 (追踪、监控和日志)
  • 平台支持

流量管理

  1. 虚拟服务(VirtualService)
定义

拟服务让您配置如何在服务网格内将请求路由到服务

组成

虚拟服务包含一组路由规则,istio 按顺序匹配到实际目标地址

功能

映射单一服务到多个真实服务,将单体应用转为微服务构建复合应用系统
网关整合并配置流量规则来控制出入流量

超时/重试

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
  - reviews                                
  http:
  - fault:
      delay:
        percentage:
          value: 0.1     #故障注入下面的虚拟服务为千分之一的访问 ratings 服务的请求配置了一个 5 秒的延迟
  - match:
    - headers:
        end-user:
          exact: jason
      uri:
        prefix: /reviews
    route:
    - destination:
        host: reviews 与 detinationrul中的spec.host相批配
        subset: v2
      weight: 75
  - route:
    - destination:
        host: reviews
        subset: v3
      weight: 25
    timeout: 10s
    retries:
      attempts: 3
      preTryTimeOut: 2s  #初始调用失败后最多重试 3 次来连接到服务子集,每个重试都有 2 秒的超时
      
host:reviews[0]

虚拟主机名:可以是 IP 地址、DNS 名称,或者依赖于平台的一个简称

  1. 路由规则 (不同服务间路由规则控制)

路由规则是将特定流量子集路由到指定目标地址的强大工具

http

http 字段包含了虚拟服务的路由规则,用来描述匹配条件和路由行为
Destination route 部分的 destination 字段指定了符合此条件的流量的实际目标地址。与虚拟服务的 hosts 不同,destination 的 host 必须是存在于 Istio 服务注册中心的实际目标地址,否则 Envoy 不知道该将请求发送到哪里。可以是一个有代理的服务网格,或者是一个通过服务入口被添加进来的非网格服务。本示例运行在 Kubernetes 环境中,host 名为一个 Kubernetes 服务名
服务子集 ?????(目标规则中有定义)

路由优先级

从上到下有顺序选择,不满足规则的均流向默认目标

  1. 目标规则(DeistiationRule集群中流量分配)
  • 目标规则是 Istio 流量路由功能的关键部分,您可以将虚拟服务视为将流量如何路由到给定目标地址,然后使用目标规则来配置该目标的流量。在评估虚拟服务路由规则之后,目标规则将应用于流量的“真实”目标地址。
  • 使用目标规则来指定命名的服务子集
  • 定制Envoy的流量策略:负载均衡,熔断,TLS
  • 每个子集都是基于一个或多个 labels 定义的,在 Kubernetes 中它是附加到像 Pod 这种对象上的键/值对。这些标签应用于 Kubernetes 服务的 Deployment 并作为 metadata 来识别不同的版本。(对应deployment mettadata.labels)
  • 熔断
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: my-destination-rule
spec:
  host: my-svc
  trafficPolicy:
    loadBalancer:
      simple: RANDOM
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2
    trafficPolicy:
      loadBalancer:
        simple: ROUND_ROBIN
  - name: v3
    labels:
      version: v3
    trafficPolicy:
      connectionPool:
        tcp:
          maxConnections: 100   #示例将 v1 子集的reviews服务工作负载的并发连接数限制为 100
  1. 网关(gateWay)
定义

使用网关为网格来管理入站和出站流量,可以让您指定要进入或离开网格的流量。

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
      serverCertificate: /tmp/tls.crt
      privateKey: /tmp/tls.key
      
      
spec.servers.hosts 与virtualservice中 spec.gateways 绑定

  1. 服务入口ServiceEntry

服务入口(Service Entry) 来添加一个入口到 Istio 内部维护的服务注册中心,(把外部服务添加到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

您可以配置虚拟服务和目标规则,以更细粒度的方式控制到服务入口的流量,这与网格中的任何其他服务配置流量的方式相同。例如,下面的目标规则配置流量路由以使用双向 TLS 来保护到 ext-svc.example.com 外部服务的连接,我们使用服务入口配置了该外部服务

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: ext-res-dr
spec:
  host: ext-svc.example.com
  trafficPolicy:
    tls:
      mode: MUTUAL
      clientCertificate: /etc/certs/myclientcert.pem
      privateKey: /etc/certs/client_private_key.pem
      caCertificates: /etc/certs/rootcacerts.pem
  1. Sidecar

默认情况下,Istio 让每个 Envoy 代理都可以访问来自和它关联的工作负载的所有端口的请求,然后转发到对应的工作负载。您可以使用 sidecar 配置去做下面的事情

  • 微调 Envoy 代理接受的端口和协议集。
  • 限制 Envoy 代理可以访问的服务集合。
apiVersion: networking.istio.io/v1alpha3
kind: Sidecar
metadata:
  name: default
  namespace: bookinfo
spec:
  egress:
  - hosts:
    - "./*"
    - "istio-system/*"

抄自官网

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值