为什么要用到 服务器网格
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
在这里插入图片描述

可以看到 流量 大部分 转到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"}}}}}'