首页 > 编程学习 > istio 初识

istio 初识

发布时间:2022/11/11 5:51:27

istio时服务网格架构的一种
服务网格方案istio, linkerd, consul connect
服务网格架构如下图所示:
每个app相当于是一个app,旁边运行着一个sidecar,通过sidecar实现服务之间的交互,以及服务的熔断,故障修复,指标收集 监控,限流,访问控制,金丝雀发布等。
在这里插入图片描述
为啥用istio
有丰富的路由规则(virtual service)重试,故障注入,可对流量行为进行细粒度控制
可插入的策略层(支持插件)和配置API,支持访问控制。速率限制和配额
可以对出入集群入口出口所有流量的自动度量指标妹纸记录和追踪(在安装istio时启动jeager)
有强大的基于身份的验证和授权,在集群中实现安全的服务间通信。

可观察性
istio生成遥测数据,提供整个服务网格的可观测性
指标:istio基于 延迟 流量 错误 饱和生成了一系列服务指标,同时也为网格控制平面提供了更详细的指标。
分布式追踪: istio为每个服务生成了分布式追踪的span,ops可以理解网格内服务的depency和调用流程
访问日志:当流量进入网格服务时,istio可以生成每个请求的完整记录,包括源和目标的元数据。

istio架构演进

数据平面
由一组以sidecar方式部署的智能代理(envoy)组成。这些代理可以调节和控制服务之间的网格通信。

控制平面istiod
负责管理和配置代理来的路由流量,通过gateway中的selector中的label,匹配到比如ingressgateway-istio这个负责istio入栈流量的pod,从而将与gateway关联的virtual service中的route规则推送到这个运行了envoy的pod中去。

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: simple
spec:
  gateways:
    - simple #注明关联到gateway
  hosts:
    - simple.cncamp.io # 是转换到envoy中到domain,用于过滤,同时与gateway中到hosts必须相同
  http:
    - match:
        - port: 80
      route:
        - destination:
            host: simple.simple.svc.cluster.local #destination时对应一个service的域名,通过core-dns的dns记录,能够通过域名互通服务之间
            port:
              number: 80
---
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: simple
spec:
  selector:
    istio: ingressgateway #与ingressgateway-istio 这个pod关联将规则注入到改pod中,这个pod中运行了容器envoy
  servers:
    - hosts:
        - simple.cncamp.io
      port: 
        name: http-simple 
        number: 80 #对应listener的监听端口
        protocol: HTTP

service and deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: simple
spec:
  replicas: 1
  selector:
    matchLabels:
      app: simple
  template:
    metadata:
      annotations:
        prometheus.io/scrape: "true"
        prometheus.io/port: "80"
      labels:
        app: simple
    spec:
      containers:
        - name: simple
          imagePullPolicy: Always
          image: cncamp/httpserver:v1.0-metrics
          ports:
            - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: simple
spec:
  ports:
    - name: http
      port: 80
      protocol: TCP
      targetPort: 80
  selector:
    app: simple

通过crd资源的配置,以及gateway与ingressgateway-istio pod的关联,推送配置到envoy(增量更新),通过envoy的代理route中的destination(service 的域名)找到对应的service,负载均衡到pod上,envoy被注入到每个pod中,通过iptables规则捕获流量。注入sidecar到pod中并修改路由规则后,istio就能够调解所有流量。

Copyright © 2010-2022 dgrt.cn 版权所有 |关于我们| 联系方式