一.DestnationRule详解
1.配置健康检查轮询转发
最小连接数
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: bookinfo-ratings
spec:
host: ratings.prod.svc.cluster.local
trafficPolicy:
loadBalancer:
simple: LEAST_CONN
指定不同版本设置不同算法
apiVersion: networking.istio.io/v1alpha3
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
根据不用端口设置不同转发算法
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: bookinfo-ratings-port
spec:
host: ratings.prod.svc.cluster.local
trafficPolicy: # Apply to all ports
portLevelSettings:
- port:
number: 80
loadBalancer:
simple: LEAST_CONN
- port:
number: 9080
loadBalancer:
simple: ROUND_ROBIN
设置User cookie进行哈希算法
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: bookinfo-ratings
spec:
host: ratings.prod.svc.cluster.local
trafficPolicy:
loadBalancer:
consistentHash:
httpCookie:
name: user
ttl: 0s
标准负载平衡算法。
姓名 | 描述 |
---|---|
ROUND_ROBIN |
循环策略。默认 |
LEAST_CONN |
最小请求负载均衡器使用 O(1) 算法,该算法选择两个随机健康主机并选择具有较少活动请求的主机。 |
RANDOM |
随机负载均衡器选择一个随机的健康主机。如果没有配置健康检查策略,随机负载均衡器的性能通常比轮询更好。 |
PASSTHROUGH |
此选项会将连接转发到调用者请求的原始 IP 地址,而不进行任何形式的负载平衡。必须小心使用此选项。它适用于高级用例。有关更多详细信息,请参阅 Envoy 中的原始目标负载均衡器。 |
2.设置连接池
规则设置了 100 个连接到名为 myredissrv 的 redis 服务的限制,连接超时为 30 毫秒
apiVersion: networking.istio.io/v1alpha3
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
适用于 HTTP1.1/HTTP2/GRPC 连接的设置。
场地 | 类型 | 描述 | 必需的 |
---|---|---|---|
http1MaxPendingRequests |
int32 |
对目标的最大挂起 HTTP 请求数。默认 2^32-1。 | 不 |
http2MaxRequests |
int32 |
对后端的最大请求数。默认 2^32-1。 | 不 |
maxRequestsPerConnection |
int32 |
每个连接到后端的最大请求数。将此参数设置为 1 将禁用保持活动。默认为 0,表示“无限制”,最大为 2^29。 | 不 |
maxRetries |
int32 |
在给定时间可以对集群中的所有主机进行的最大重试次数。默认为 2^32-1。 | 不 |
idleTimeout |
Duration |
上游连接池连接的空闲超时。空闲超时定义为没有活动请求的时间段。如果未设置,则默认为 1 小时。当达到空闲超时时,连接将被关闭。请注意,基于请求的超时意味着 HTTP/2 PING 不会使连接保持活动状态。适用于 HTTP1.1 和 HTTP2 连接。 | 不 |
h2UpgradePolicy |
H2UpgradePolicy |
指定是否应将关联目标的 http1.1 连接升级到 http2。 | 不 |
HTTP 和 TCP 上游连接通用的设置。
场地 | 类型 | 描述 | 必需的 |
---|---|---|---|
maxConnections |
int32 |
到目标主机的最大 HTTP1 /TCP 连接数。默认 2^32-1。 | 不 |
connectTimeout |
Duration |
TCP 连接超时。 | 不 |
tcpKeepalive |
TcpKeepalive |
如果设置,则在套接字上设置 SO_KEEPALIVE 以启用 TCP Keepalive。 | 不 |
TCP 保活。
场地 | 类型 | 描述 | 必需的 |
---|---|---|---|
probes |
uint32 |
在确定连接已死之前,要发送且无响应的最大保活探测数。默认是使用操作系统级别的配置(除非被覆盖,Linux 默认为 9。) | 不 |
time |
Duration |
在开始发送 keep-alive 探测之前,连接需要空闲的持续时间。默认是使用操作系统级别的配置(除非被覆盖,Linux 默认为 7200s(即 2 小时。) | 不 |
interval |
Duration |
保持活动探测之间的持续时间。默认是使用操作系统级别的配置(除非被覆盖,Linux 默认为 75s。) | 不 |
3.后端服务健康检查
以下规则将连接池大小设置为 100 个 HTTP1 连接,其中与“reviews”服务的请求/连接不超过 10 个。此外,它设置了 1000 个并发 HTTP2 请求的限制,并将上游主机配置为每 5 分钟扫描一次,以便任何连续 7 次失败并出现 502、503 或 504 错误代码的主机将被弹出 15 分钟。
apiVersion: networking.istio.io/v1alpha3
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 #踢出集群的时间
场地 | 类型 | 描述 | 必需的 |
---|---|---|---|
consecutiveErrors |
int32 |
主机从连接池中弹出之前的错误数。默认为 5。当通过 HTTP 访问上游主机时,502、503 或 504 返回码被视为错误。当通过不透明的 TCP 连接访问上游主机时,连接超时和连接错误/失败事件被视为错误。 | 不 |
interval |
Duration |
喷射扫描分析之间的时间间隔。格式:1h/1m/1s/1ms。必须 >=1 毫秒。默认为 10 秒。 | 不 |
baseEjectionTime |
Duration |
最短弹射时间。主机将保持被弹出的时间等于最小弹出持续时间与主机被弹出次数的乘积。这种技术允许系统自动增加不健康的上游服务器的弹出周期。格式:1h/1m/1s/1ms。必须 >=1 毫秒。默认为 30 秒。 | 不 |
maxEjectionPercent |
int32 |
上游服务的负载平衡池中可以弹出的主机的最大百分比。默认为 10%。 | 不 |
minHealthPercent |
int32 |
只要关联的负载平衡池在健康模式下至少具有最小健康百分比的主机,就会启用异常值检测。当负载平衡池中健康主机的百分比低于此阈值时,将禁用异常值检测,并且代理将在池中的所有主机(健康和不健康)之间进行负载平衡。可以通过将阈值设置为 0% 来禁用该阈值。默认值为 0%,因为它通常不适用于每个服务的 pod 很少的 k8s 环境。 | 不 |