DestinationRule
DestinationRule定义了在路由发生后应用于服务流量的策略.这些规则指定负载均衡的配置,Sidecar的连接池大小以及离群值检测设置,以从负载均衡池中检测和清除不正常的主机.例如,ratings服务的简单负载均衡策略如下所示:
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: bookinfo-ratings
spec:
host: ratings.prod.svc.cluster.local
trafficPolicy:
loadBalancer:
simple: LEAST_CONN
可以通过定义命名子集并覆盖服务级别上指定的设置来指定特定于版本的策略。以下规则将为名为testversion使用version:v3)标签的的子集使用轮训负载均衡算法,在明确指定该子集之前,对应的配置不会生效
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: bookinfo-ratings
spec:
host: ratings.prod.svc.cluster.local
trafficPolicy:
loadBalancer:
simple: LEAST_CONN
subsets:
- name: testversion
labels:
version: v3
trafficPolicy:
loadBalancer:
simple: ROUND_ROBIN
LoadBalancerSettings
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: bookinfo-ratings
spec:
host: ratings.prod.svc.cluster.local
trafficPolicy:
loadBalancer:
consistentHash:
httpCookie:
name: user
ttl: 0s
simple
LoadBalancerSettings_ROUND_ROBIN
LoadBalancerSettings_LEAST_CONN
LoadBalancerSettings_RANDOM
LoadBalancerSettings_PASSTHROUGH
ConnectionPoolSettings
上游主机的连接池设置。这些设置适用于上游服务中的每个主机。连接池设置可以应用于TCP级别,也可以应用于HTTP级别。
例如,下面的规则集设置了名为myredissrv服务连接到redis,限制100个连接,超时时间30ms
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: bookinfo-redis
spec:
host: myredissrv.prod.svc.cluster.local
trafficPolicy:
connectionPool:
tcp:
maxConnections: 100
connectTimeout: 30ms
tcpKeepalive:
time: 7200s
interval: 75s
OutlierDetection
断路器实现,用于跟踪上游服务中每个单独主机的状态.适用于HTTP和TCP服务.对于HTTP服务,在预定的时间段内,将从池中弹出持续返回5xx错误以进行API调用的主机.对于TCP服务,在测量连续错误metric时,与给定主机的连接超时或连接失败将计为错误。
以下规则将连接池大小设置为100个HTTP1连接,并且与reviews服务的连接数不超过10个请求/连接.此外,它设置了1000个并发HTTP2请求的限制,并将上游主机配置为每5分钟进行一次扫描,以便任何连续7次出现502、503或504错误代码而失败的主机都将弹出15分钟。
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: reviews-cb-policy
spec:
host: reviews.prod.svc.cluster.local
trafficPolicy:
connectionPool:
tcp:
maxConnections: 100
http:
http2MaxRequests: 1000
maxRequestsPerConnection: 10
outlierDetection:
consecutiveErrors: 7
interval: 5m
baseEjectionTime: 15m
ClientTLSSettings
上游连接的SSL/TLS相关设置。这些设置是HTTP和TCP上游通用的。
例如,以下规则将客户端配置为使用双向TLS来连接到上游数据库集群。
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: db-mtls
spec:
host: mydbserver.prod.svc.cluster.local
trafficPolicy:
tls:
mode: MUTUAL
clientCertificate: /etc/certs/myclientcert.pem
privateKey: /etc/certs/client_private_key.pem
caCertificates: /etc/certs/rootcacerts.pem
以下规则将客户端配置为在与域匹配*.foo.com的外部服务进行对话时使用TLS。
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: tls-foo
spec:
host: "*.foo.com"
trafficPolicy:
tls:
mode: SIMPLE
以下规则将客户端配置为在与评级服务对话时使用Istio双向TLS。
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: ratings-istio-mtls
spec:
host: ratings.prod.svc.cluster.local
trafficPolicy:
tls:
mode: ISTIO_MUTUAL
LocalityLoadBalancerSetting
本地加权负载均衡使管理员可以根据流量起源和终止的位置来控制流量到端点的分配.这些地点是使用任意标签指定的,这些标签以{region}/{zone}/{sub-zone}形式指定地点的层次结构.以下示例显示如何在网格范围内设置局部权重。
给定一个包含工作负载的网格,并将其服务部署到"us-west/zone1/"和"us-west/ zone2 /".此示例指定当访问服务的流量源自" us-west/zone1/"中的工作负载时,80%的流量将发送到" us-west/zone1/"中的端点,即相同的区域,其余 20%将到达" us-west/zone2 /"中的端点.此设置旨在帮助将流量路由到同一位置的端点.为源自" us-west/zone2 /"的流量指定了类似的设置。
distribute:
- from: us-west/zone1/*
to:
"us-west/zone1/*": 80
"us-west/zone2/*": 20
- from: us-west/zone2/*
to:
"us-west/zone1/*": 20
"us-west/zone2/*": 80
如果运营商的目标不是要在区域和区域之间分配负载,而是要限制故障转移的区域性以满足其他运营要求,则运营商可以设置"故障转移"策略,而不是"分配"策略。
下面的示例为区域设置区域故障转移策略.假设服务驻留在us-east,us-west和eu-west内的区域中,此示例指定当us-east中的端点变得不健康时,流量应故障转移到eu-west内任何区域或子区域中的端点,并且类似地, 西部应该故障转移到美国东部。
failover:
- from: us-east
to: eu-west
- from: us-west
to: us-east