Service Mesh k8s容器化-服务网格 Istio-案例二、蓝绿、灰度、

为什么要用到 服务器网格

1、服务之间通讯安全没有保障 ,
(节点于节点通讯,未能实现加密通讯,就有可能被被人嗅探走数据)
2、跟踪通讯延迟非常困难
(他的通讯经历了哪些中间主键,如果要诊断问题,其实是不好实现的)
3、负责均衡功能有限
(k8s 里面 负载只有 通过server ,只能实现ipvs 核心基础调度,无法实现 流量分割,流量迁移,ab测试,流量镜像,等等功能)


在这里插入图片描述

目前有两个服务、需求:引用金丝雀发布,将业务流量同时分配给新版本和旧版本,在测试新版本的同时保证业务连续性。

在这里插入图片描述

步骤 VirtualService 去控制 server ,然后 server 吧流量分发到 pod



apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  namespace: yanxuan
  name: svc-all      
spec:
  hosts:
  - msb-job-admin-all
  http:
  - route: 
    - destination:        
        host: msb-job-admin-v1
      weight: 50  
    - destination:
        host: msb-job-admin-v2
      weight: 50


在这里插入图片描述
访问服务
在这里插入图片描述
流量图
在这里插入图片描述

恒明显 流量均匀的分发到 每一个节点

需求变化,要求流量 百分之 95访问 v2 其余访问 v1 实现、蓝禄部署、将业务流量发送给新版本进行测试。如果新版本运行不正常,可立即将业务流量切换给旧版本。

    - destination:        #路由表
        host: msb-job-admin-v1
      weight: 5
    - destination:
        host: msb-job-admin-v2
      weight: 95

在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/7e907392d7b84577babd83156ec0c7dc.png在这里插入图片描述

可以看到 流量 大部分 转到v1 版本

需求 要求 判断 qxh 用户访问 v2 否则访问v1

  http:
  - match:
    - headers:
        user:
          exact: qxh  

在这里插入图片描述
在这里插入图片描述

需求:某些 app 是需要获取到真实客户端地址的,比如黑白名单、地理位置判断等等。

查看一下 log

root@node1:~# kubectl  get pod -n yanxuan
NAME                                READY   STATUS    RESTARTS      AGE
msb-job-admin-v1-5bcb6bb8ff-tzbkp   2/2     Running   0             7m6s
msb-job-admin-v2-f957b569b-nxzsl    2/2     Running   0             7m6s


kubectl logs  msb-job-admin-v1-5bcb6bb8ff-tzbkp -n yanxuan

在这里插入图片描述

在这里插入图片描述

使用 istio 为工作负载注入 sidecar 后,envoy 会代理工作负载的所有网络请求,导致工作负载收到的流量来自 envoy 的转发,因此工作负载看到的客户端 IP 是 envoy 的,默认是 127.0.0.6,不是真实的客户端地址,处理方法就是 istio 开启 tproxy
在这里插入图片描述
这里需要回顾一下 他们通讯原则了,

在这里插入图片描述

在这里插入图片描述

istio 各组件功能及作用

  • istio-polit: 服务发现,向数据平面下发规则,包括
    VirtualService、DestinationRule、Gateway、ServicEntry
    等流量治理规则,也包括认证授权等安全规则

  • istio-telemetry: 专门收集遥测数据的 mixer 服务组件。

  • Istio-policy: 另外一个 mixer 服务,可以对接如配额、授权、黑白名单等不同的控制后端,对服务间的访问进行控制。

  • Istio-citadel: 核心安全组件,提供了自动生成、分发、轮换与撤销秘钥和证书的功能。

  • Istio-galley: 配置管理的组件,验证配置信息的格式和内容的正确性,并将这些配置信息提供给管理面的 Pilot 和 Mixer
    使用。

  • Istio-sidecar-injector: 负责自动注入的组件。

  • Istio-proxy: 数据面的轻量代理。

  • Istio-ingressgateway: 入口处的 gateway。

根据官网的办法,在网关也可以处理

https://istio.io/latest/zh/docs/ops/configuration/traffic-management/network-topologies/
在这里插入图片描述

或者开启 istio tproxy 也可以解决

kubectl patch deployment -n yanxuan msb-job-admin-v2 -p '{"spec":{"template":{"metadata":{"annotations":{"sidecar.istio.io/interceptionMode":"TPROXY"}}}}}'

版权声明:本文为qq_40178286原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。