DR流量管理
1.基础用法
创建Service同时转发到pod1和pod2
kubectl label pod pod1 xx=xx
kubectl label pod pod2 xx=xx
kubectl expose --name=svc3 pod pod1 --port=80 --selector=xx=xx
DestinationRule定义子集,VS引用子集
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: mydr
spec:
host: svc1
subsets:
- name: v1
labels:
run: pod1
- name: v2
labels:
run: pod2
VS内配置每个子集的权重
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: myvs
spec:
hosts:
- "aa.xiebo.pro"
gateways:
- mygw
http:
- route:
- destination:
host: svc1
subset: v1
weight: 65
- destination:
host: svc1
subset: v2
weight: 35
2.是否启用tls
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: mydr
spec:
host: svc1
trafficPolicy:
tls:
mode: SIMPLE
-
DISABLE 不要设置到上游端点的 TLS 连接。
-
SIMPLE 发起到上游端点的 TLS 连接。
-
MUTUAL 通过提供客户端证书进行身份验证,使用双向 TLS 保护与上游的连接。
-
ISTIO_MUTUAL 通过提供客户端证书进行身份验证,使用双向 TLS 保护与上游的连接。
- 与 Mutual 模式相比,该模式使用 Istio 自动生成的证书进行 mTLS 身份验证。 使用此模式时,所有其他字段ClientTLSSettings应为空
3.LB调度算法
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: mydrLEAST_REQUEST
spec:
host: svc3
trafficPolicy:
loadBalancer:
#simple: RANDOM #默认的负载均衡策略模型为随机
simple: LEAST_REQUEST #请求将转发到请求数量最少的实例
#simple: PASSTHROUGH #将连接转发到调用者请求的原始IP地址,不进行任何形式的负载均衡
#simple:ROUND_ROBIN #一个基本的轮询负载均衡策略,这对于许多场景(如端点加权)是不安全的,建议使用LEAST_REQUEST
完整样例
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: mydr
spec:
host: svc1
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
4.会话保持
注:会话保持并 不能在多子集的情况下保持会话在同一子集,只能在子集内保持请求到同一pod
- 在trafficPolicy.loadBalancer.consistentHash里的字段包括:
- httpHeaderName: 根据HTTP Header获取哈希值
- httpCookie: 根据HTTP Cookie获取哈希值
- 使用httpCookie时的字段:
- name: cookie的名称
- path: 设置cookie的路径
- ttl:cookie的生命期
- 使用httpCookie时的字段:
- userSourceIp: 根据源IP获取哈希值
- minimumRingSize: 哈希环所需的最小虚拟节点数量,默认值为1024
- 使用httpCookie时的字段:
- name: cookie的名称
- path: 设置cookie的路径
- ttl:cookie的生命期
样例
VirtualService
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: myvs2
spec:
hosts:
- "bb.xiebo.pro"
gateways:
- mygw
http:
- route:
- destination:
host: svc3
subset: v1
DestinationRoute
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: mydr
spec:
host: svc3
trafficPolicy:
loadBalancer:
consistentHash:
#基于IP的会话保持
useSourceIp: true
#基于cookie的会话保持
#httpCookie:
#name: user
#ttl: 60s
subsets:
- name: v1
labels:
xx: xx