目的地规则

DestinationRule 定义了适用于路由发生后针对服务的流量的策略。这些规则指定了用于负载均衡、来自 Sidecar 的连接池大小以及异常值检测设置的配置,以检测并从负载均衡池中驱逐不健康的主机。例如,对 ratings 服务的简单负载均衡策略如下所示

apiVersion: networking.istio.io/v1
kind: DestinationRule
metadata:
  name: bookinfo-ratings
spec:
  host: ratings.prod.svc.cluster.local
  trafficPolicy:
    loadBalancer:
      simple: LEAST_REQUEST

可以通过定义名为subset并覆盖服务级别指定的设置来指定特定版本的策略。以下规则对名为testversion的子集使用轮询负载均衡策略,该子集由带有标签(version:v3)的端点(例如,pod)组成。

apiVersion: networking.istio.io/v1
kind: DestinationRule
metadata:
  name: bookinfo-ratings
spec:
  host: ratings.prod.svc.cluster.local
  trafficPolicy:
    loadBalancer:
      simple: LEAST_REQUEST
  subsets:
  - name: testversion
    labels:
      version: v3
    trafficPolicy:
      loadBalancer:
        simple: ROUND_ROBIN

注意: 为子集指定的策略只有在路由规则明确将流量发送到该子集时才会生效。

流量策略也可以针对特定端口进行定制。以下规则对所有到端口 80 的流量使用最少连接负载均衡策略,而对所有到端口 9080 的流量使用轮询负载均衡设置。

apiVersion: networking.istio.io/v1
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_REQUEST
    - port:
        number: 9080
      loadBalancer:
        simple: ROUND_ROBIN

目标规则也可以针对特定工作负载进行定制。以下示例展示了如何使用 workloadSelector 配置将目标规则应用于特定工作负载。

apiVersion: networking.istio.io/v1
kind: DestinationRule
metadata:
  name: configure-client-mtls-dr-with-workloadselector
spec:
  host: example.com
  workloadSelector:
    matchLabels:
      app: ratings
  trafficPolicy:
    loadBalancer:
      simple: ROUND_ROBIN
    portLevelSettings:
    - port:
        number: 31443
      tls:
        credentialName: client-credential
        mode: MUTUAL

DestinationRule

DestinationRule 定义了在路由发生后应用于目标服务的流量的策略。

字段类型描述必填
hoststring

服务注册表中的服务名称。服务名称从平台的服务注册表(例如,Kubernetes 服务、Consul 服务等)和由 ServiceEntries 声明的主机中查找。为服务注册表中不存在的服务定义的规则将被忽略。

Kubernetes 用户注意:当使用简短名称(例如“reviews”而不是“reviews.default.svc.cluster.local”)时,Istio 将根据规则的命名空间而不是服务的命名空间来解释简短名称。在“default”命名空间中包含主机“reviews”的规则将被解释为“reviews.default.svc.cluster.local”,而不管与 reviews 服务关联的实际命名空间如何。为了避免潜在的错误配置,建议始终使用完全限定域名而不是简短名称。

请注意,host 字段适用于 HTTP 和 TCP 服务。

trafficPolicyTrafficPolicy

要应用的流量策略(负载均衡策略、连接池大小、异常值检测)。

subsetsSubset[]

一个或多个表示服务的各个版本的命名集。流量策略可以在子集级别被覆盖。

exportTostring[]

将此目标规则导出的命名空间列表。将目标规则解析为应用于服务的过程发生在命名空间层次结构的上下文中。导出目标规则允许将其包含在其他命名空间中服务的解析层次结构中。此功能为服务所有者和网格管理员提供了跨命名空间边界控制目标规则可见性的机制。

如果没有指定命名空间,则默认情况下将目标规则导出到所有命名空间。

值“.”是保留的,它定义了对与声明目标规则相同的命名空间的导出。类似地,值“*”是保留的,它定义了对所有命名空间的导出。

workloadSelectorWorkloadSelector

用于选择应应用此DestinationRule配置的特定一组 pod/VM 的标准。如果指定,则DestinationRule配置将仅应用于与同一命名空间中的工作负载选择器标签匹配的工作负载实例。工作负载选择器不跨命名空间边界应用。如果省略,则DestinationRule将恢复其默认行为。例如,如果特定 sidecar 需要对网格外部的服务进行出站 TLS 设置,而不是网格中的每个 sidecar 都需要具有该配置(这是默认行为),则可以指定工作负载选择器。

TrafficPolicy

对特定目标应用的流量策略,跨所有目标端口。有关示例,请参见 DestinationRule。

字段类型描述必填
loadBalancerLoadBalancerSettings

控制负载均衡器算法的设置。

connectionPoolConnectionPoolSettings

控制与上游服务的连接数量的设置

outlierDetectionOutlierDetection

控制从负载均衡池中剔除不健康主机的设置

tlsClientTLSSettings

与连接到上游服务的连接相关的 TLS 设置。

portLevelSettingsPortTrafficPolicy[]

特定于各个端口的流量策略。请注意,端口级别设置将覆盖目标级别设置。在被端口级别设置覆盖时,目标级别指定的流量设置将不会被继承,即,默认值将应用于端口级别流量策略中省略的字段。

tunnelTunnelSettings

DestinationRule 中配置的主机通过其他传输层或应用层对 TCP 进行隧道传输的配置。隧道设置可以应用于 TCP 或 TLS 路由,不能应用于 HTTP 路由。

proxyProtocolProxyProtocol

上游 PROXY 协议设置。

Subset

服务的端点子集。子集可用于 A/B 测试等场景,或路由到服务的特定版本。有关在这些场景中使用子集的示例,请参阅 VirtualService 文档。此外,在服务级别定义的流量策略可以在子集级别被覆盖。以下规则对所有到名为 testversion 的子集的流量使用轮询负载均衡策略,该子集由带有标签(version:v3)的端点(例如,pod)组成。

apiVersion: networking.istio.io/v1
kind: DestinationRule
metadata:
  name: bookinfo-ratings
spec:
  host: ratings.prod.svc.cluster.local
  trafficPolicy:
    loadBalancer:
      simple: LEAST_REQUEST
  subsets:
  - name: testversion
    labels:
      version: v3
    trafficPolicy:
      loadBalancer:
        simple: ROUND_ROBIN

注意: 为子集指定的策略只有在路由规则明确将流量发送到该子集时才会生效。

通常需要一个或多个标签来标识子集目标,但是,当相应的 DestinationRule 表示支持多个 SNI 主机(例如,出站网关)的主机时,没有标签的子集可能是有意义的。在这种情况下,可以使用带有 ClientTLSSettings 的流量策略来标识对应于命名子集的特定 SNI 主机。

字段类型描述必填
namestring

子集的名称。服务名称和子集名称可用于路由规则中的流量拆分。

labelsmap<string, string>

标签对服务注册表中的服务端点应用过滤器。有关使用示例,请参见路由规则。

trafficPolicyTrafficPolicy

应用于此子集的流量策略。子集继承 DestinationRule 级别指定的流量策略。子集级别指定的设置将覆盖 DestinationRule 级别指定的对应设置。

LoadBalancerSettings

对特定目标应用的负载均衡策略。有关详细信息,请参见 Envoy 的负载均衡 文档

例如,以下规则对所有到 ratings 服务的流量使用轮询负载均衡策略。

apiVersion: networking.istio.io/v1
kind: DestinationRule
metadata:
  name: bookinfo-ratings
spec:
  host: ratings.prod.svc.cluster.local
  trafficPolicy:
    loadBalancer:
      simple: ROUND_ROBIN

以下示例使用 User cookie 作为哈希键,为 ratings 服务设置基于哈希的负载均衡器的粘性会话。

apiVersion: networking.istio.io/v1
kind: DestinationRule
metadata:
  name: bookinfo-ratings
spec:
  host: ratings.prod.svc.cluster.local
  trafficPolicy:
    loadBalancer:
      consistentHash:
        httpCookie:
          name: user
          ttl: 0s
字段类型描述必填
simpleSimpleLB (oneof)
consistentHashConsistentHashLB (oneof)
localityLbSettingLocalityLoadBalancerSetting

区域负载均衡器设置,这将完全覆盖网格范围的设置,这意味着不会在此对象与 MeshConfig 中的对象之间执行合并。

warmupDurationSecsDuration

表示服务的预热时长。如果设置,则服务的最新创建端点将从其创建时间开始处于预热模式,持续预热时长,Istio 会逐步增加该端点的流量,而不是发送按比例分配的流量。这应该针对需要预热时间才能以合理的延迟提供完整生产负载的服务启用。请注意,当像 Kubernetes 中的扩展事件一样只有少量新端点出现时,这最有效。当所有端点都相对较新(例如新部署)时,这不太有效,因为所有端点最终都会获得相同数量的请求。目前,这仅支持 ROUND_ROBIN 和 LEAST_REQUEST 负载均衡器。

ConnectionPoolSettings

上游主机的连接池设置。设置适用于上游服务中的每个主机。有关详细信息,请参见 Envoy 的 断路器。连接池设置可以应用于 TCP 级别,也可以应用于 HTTP 级别。

例如,以下规则对名为 myredissrv 的 redis 服务设置了 100 个连接的限制,连接超时时间为 30 毫秒。

apiVersion: networking.istio.io/v1
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
字段类型描述必填
tcpTCPSettings

HTTP 和 TCP 上游连接共有的设置。

httpHTTPSettings

HTTP 连接池设置。

OutlierDetection

断路器实现,跟踪上游服务中每个主机的状态。适用于 HTTP 和 TCP 服务。对于 HTTP 服务,持续返回 5xx 错误的 API 调用的主机将从池中剔除,持续一段时间。对于 TCP 服务,连接超时或到给定主机的连接失败在衡量连续错误指标时算作错误。有关详细信息,请参见 Envoy 的 异常值检测

以下规则为“reviews”服务设置 100 个 HTTP1 连接的连接池大小,每个连接不超过 10 个 req/连接。此外,它还设置了 1000 个并发 HTTP2 请求的限制,并配置了每 5 分钟扫描一次上游主机,以便任何连续 7 次返回 502、503 或 504 错误代码的主机将被剔除 15 分钟。

apiVersion: networking.istio.io/v1
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:
      consecutive5xxErrors: 7
      interval: 5m
      baseEjectionTime: 15m
字段类型描述必填
splitExternalLocalOriginErrorsbool

确定是否区分本地来源故障和外部错误。如果设置为 true,则 consecutive_local_origin_failure 将被考虑在异常值检测计算中。当您希望基于本地观察到的错误(例如连接失败、连接超时等)而不是上游服务返回的状态码来推断异常值检测状态时,应使用此选项。当上游服务明确对某些请求返回 5xx 错误,而您希望在确定主机的异常值检测状态时忽略来自上游服务的这些响应时,这尤其有用。默认为 false。

consecutiveLocalOriginFailuresUInt32Value

发生剔除之前连续发生的本地来源故障次数。默认为 5。参数仅在 split_external_local_origin_errors 设置为 true 时有效。

consecutiveGatewayErrorsUInt32Value

主机从连接池中剔除之前的网关错误次数。当通过 HTTP 访问上游主机时,502、503 或 504 返回代码算作网关错误。当通过不透明 TCP 连接访问上游主机时,连接超时和连接错误/失败事件算作网关错误。此功能默认情况下被禁用,或者当设置为值 0 时被禁用。

请注意,consecutive_gateway_errors 和 consecutive_5xx_errors 可以分别使用或一起使用。因为 consecutive_gateway_errors 统计的错误也包含在 consecutive_5xx_errors 中,所以如果 consecutive_gateway_errors 的值大于或等于 consecutive_5xx_errors 的值,则 consecutive_gateway_errors 不会有任何效果。

consecutive5xxErrorsUInt32Value

主机从连接池中剔除之前的 5xx 错误次数。当通过不透明 TCP 连接访问上游主机时,连接超时、连接错误/失败和请求失败事件算作 5xx 错误。此功能默认值为 5,但可以通过将其设置为 0 来禁用。

请注意,consecutive_gateway_errors 和 consecutive_5xx_errors 可以分别使用或一起使用。因为 consecutive_gateway_errors 统计的错误也包含在 consecutive_5xx_errors 中,所以如果 consecutive_gateway_errors 的值大于或等于 consecutive_5xx_errors 的值,则 consecutive_gateway_errors 不会有任何效果。

intervalDuration

剔除扫描分析之间的时间间隔。格式:1h/1m/1s/1ms。必须大于或等于 1 毫秒。默认为 10 秒。

baseEjectionTimeDuration

最小剔除时长。主机将保持剔除状态,持续时间等于最小剔除时长和主机被剔除次数的乘积。此技术允许系统自动增加不健康上游服务器的剔除周期。格式:1h/1m/1s/1ms。必须大于或等于 1 毫秒。默认为 30 秒。

maxEjectionPercentint32

上游服务负载均衡池中可以被剔除的主机最大百分比。默认值为 10%。

minHealthPercentint32

只要关联的负载均衡池中至少有 min_health_percent 个主机处于健康状态,异常检测就会被启用。当负载均衡池中健康主机百分比低于此阈值时,异常检测将被禁用,代理将在池中所有主机(健康和不健康)之间进行负载均衡。通过将其设置为 0% 可以禁用此阈值。默认值为 0%,因为它通常不适用于每个服务只有少量 Pod 的 k8s 环境。

ClientTLSSettings

上游连接的 SSL/TLS 相关设置。有关更多详细信息,请参阅 Envoy 的 TLS 上下文。这些设置对于 HTTP 和 TCP 上游都通用。

例如,以下规则配置客户端以对上游数据库集群使用双向 TLS。

apiVersion: networking.istio.io/v1
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/v1
kind: DestinationRule
metadata:
  name: tls-foo
spec:
  host: "*.foo.com"
  trafficPolicy:
    tls:
      mode: SIMPLE

以下规则配置客户端在与评级服务通信时使用 Istio 双向 TLS。

apiVersion: networking.istio.io/v1
kind: DestinationRule
metadata:
  name: ratings-istio-mtls
spec:
  host: ratings.prod.svc.cluster.local
  trafficPolicy:
    tls:
      mode: ISTIO_MUTUAL
字段类型描述必填
modeTLSmode

指示是否应使用 TLS 来保护对该端口的连接。此字段的值决定如何强制执行 TLS。

clientCertificatestring

如果 mode 为 MUTUAL,则为必填项。包含要使用的客户端 TLS 证书的文件路径。如果 mode 为 ISTIO_MUTUAL,则应为空。

privateKeystring

如果 mode 为 MUTUAL,则为必填项。包含客户端私钥的文件路径。如果 mode 为 ISTIO_MUTUAL,则应为空。

caCertificatesstring

可选:包含用于验证所提供的服务器证书的证书颁发机构证书的文件路径。如果省略,代理将使用操作系统 CA 证书来验证服务器证书。如果 mode 为 ISTIO_MUTUAL,则应为空。

credentialNamestring

包含客户端 TLS 证书(包括 CA 证书)的密钥名称。该密钥必须存在于使用证书的代理的命名空间中。不透明密钥应包含以下键值对:key: <privateKey>cert: <clientCert>cacert: <CACertificate>crl: <certificateRevocationList> 其中 CACertificate 用于验证服务器证书。对于双向 TLS,cacert: <CACertificate> 可以提供在同一个密钥中,也可以提供在名为 <secret>-cacert 的单独密钥中。还支持具有用于 CA 证书的额外 ca.crt 键和用于证书吊销列表 (CRL) 的 ca.crl 键的客户端证书的 TLS 密钥。只能指定客户端证书和 CA 证书之一或 credentialName。

注意:此字段仅在 DestinationRule 指定了 workloadSelector 时才适用于 Sidecar。否则,该字段将仅适用于网关,Sidecar 将继续使用证书路径。

subjectAltNamesstring[]

用于验证证书中主体身份的一系列备用名称。如果指定,代理将验证服务器证书的主体备用名称是否与指定的值之一匹配。如果指定,则此列表将覆盖从 ServiceEntry 中获取的 subject_alt_names 的值。如果未指定,则将根据下游 HTTP 主机/授权头对新上游连接所提供的上游证书进行自动验证。

snistring

在 TLS 握手期间向服务器提供的 SNI 字符串。如果未指定,SNI 将根据下游 HTTP 主机/授权头自动设置为 SIMPLE 和 MUTUAL TLS 模式。

insecureSkipVerifyBoolValue

insecureSkipVerify 指定代理是否应跳过验证与主机相对应的服务器证书的 CA 签名和 SAN。此字段的默认值为 false。

caCrlstring

可选:包含用于验证所提供的服务器证书的证书吊销列表 (CRL) 的文件路径。CRL 是 CA(证书颁发机构)在证书计划到期日期之前吊销的证书列表。如果指定,代理将验证所提供的证书是否属于吊销的证书列表。如果省略,代理不会将证书与 crl 进行验证。

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 内的任何区域或子区域的端点,并且类似地 us-west 应故障转移到 us-east。

 failover:
   - from: us-east
     to: eu-west
   - from: us-west
     to: us-east

位置负载均衡设置。

字段类型描述必填
distributeDistribute[]

可选:只能设置 distribute、failover 或 failoverPriority 之一。显式指定跨不同区域和地理位置的负载均衡权重。请参阅 基于位置的加权负载均衡 如果为空,则根据位置内的端点数设置位置权重。

failoverFailover[]

可选:只能设置 distribute、failover 或 failoverPriority 之一。显式指定当本地区域的端点变得不健康时,流量将到达的区域。应与 OutlierDetection 一起使用以检测不健康的端点。注意:如果没有指定 OutlierDetection,则此项将无效。

failoverPrioritystring[]

failoverPriority 是用于对端点进行排序以进行基于优先级的负载均衡的标签的有序列表。这是为了支持跨不同端点组的流量故障转移。可以指定两种类型的标签

  • 仅指定标签键 [key1, key2, key3],istio 将比较客户端和端点的标签值。假设总共有 N 个标签键 [key1, key2, key3, ...keyN] 被指定

    1. 与客户端代理匹配所有 N 个标签的端点具有优先级 P(0),即最高优先级。
    2. 与客户端代理匹配前 N-1 个标签的端点具有优先级 P(1),即第二高优先级。
    3. 根据此逻辑的扩展,仅与客户端代理匹配第一个标签的端点具有优先级 P(N-1),即第二低优先级。
    4. 所有其他端点具有优先级 P(N),即最低优先级。
  • 指定带有键和值的标签 [key1=value1, key2=value2, key3=value3],istio 将比较与端点的标签。假设总共有 N 个标签 [key1=value1, key2=value2, key3=value3, ...keyN=valueN] 被指定

    1. 匹配所有 N 个标签的端点具有优先级 P(0),即最高优先级。
    2. 匹配前 N-1 个标签的端点具有优先级 P(1),即第二高优先级。
    3. 根据此逻辑的扩展,仅匹配第一个标签的端点具有优先级 P(N-1),即第二低优先级。
    4. 所有其他端点具有优先级 P(N),即最低优先级。

注意:对于要考虑匹配的标签,前面的标签必须匹配,即第 n 个标签将仅在匹配前 n-1 个标签时被认为匹配。

它可以是客户端和服务器工作负载上指定的任何标签。还支持以下具有特殊语义含义的标签

  • topology.istio.io/network 用于匹配端点的网络元数据,可以由 Pod/命名空间标签 topology.istio.io/network、Sidecar 环境 ISTIO_META_NETWORK 或 MeshNetworks 指定。
  • topology.istio.io/cluster 用于匹配端点的 clusterID,可以由 Pod 标签 topology.istio.io/cluster 或 Pod 环境 ISTIO_META_CLUSTER_ID 指定。
  • topology.kubernetes.io/region 用于匹配端点的区域元数据,它映射到 Kubernetes 节点标签 topology.kubernetes.io/region 或已弃用的标签 failure-domain.beta.kubernetes.io/region
  • topology.kubernetes.io/zone 用于匹配端点的区域元数据,它映射到 Kubernetes 节点标签 topology.kubernetes.io/zone 或已弃用的标签 failure-domain.beta.kubernetes.io/zone
  • topology.istio.io/subzone 用于匹配端点的子区域元数据,它映射到 Istio 节点标签 topology.istio.io/subzone
  • kubernetes.io/hostname 用于匹配端点的当前节点,它映射到 Kubernetes 节点标签 kubernetes.io/hostname

以下拓扑配置表示以下优先级级别

failoverPriority:
- "topology.istio.io/network"
- "topology.kubernetes.io/region"
- "topology.kubernetes.io/zone"
- "topology.istio.io/subzone"
  1. 与客户端代理匹配相同的 [network, region, zone, subzone] 标签的端点具有最高优先级。
  2. 具有相同的 [network, region, zone] 标签但与客户端代理具有不同的 [subzone] 标签的端点具有第二高优先级。
  3. 具有相同的 [network, region] 标签但与客户端代理具有不同的 [zone] 标签的端点具有第三高优先级。
  4. 具有相同的 [network] 但与客户端代理具有不同的 [region] 标签的端点具有第四高优先级。
  5. 所有其他端点具有相同的最低优先级。

假设与服务关联的端点驻留在多个集群中,以下示例表示

  1. 位于 clusterA 中并具有 version=v1 标签的端点具有 P(0) 优先级。
  2. 位于 clusterA 之外但具有 version=v1 标签的端点具有 P(1) 优先级。
  3. 所有其他端点具有 P(2) 优先级。
failoverPriority:
- "version=v1"
- "topology.istio.io/cluster=clusterA"

可选:只能设置 distribute、failover 或 failoverPriority 之一。并且它应与 OutlierDetection 一起使用以检测不健康的端点,否则将无效。

enabledBoolValue

启用位置负载均衡,这是 DestinationRule 级别,并将完全覆盖网格范围设置。例如,true 意味着为该 DestinationRule 启用位置负载均衡,无论网格范围设置是什么。

TrafficPolicy.PortTrafficPolicy

应用于服务特定端口的流量策略

字段类型描述必填
portPortSelector

指定将应用此策略的目标服务的端口号。

loadBalancerLoadBalancerSettings

控制负载均衡器算法的设置。

connectionPoolConnectionPoolSettings

控制与上游服务的连接数量的设置

outlierDetectionOutlierDetection

控制从负载均衡池中剔除不健康主机的设置

tlsClientTLSSettings

与连接到上游服务的连接相关的 TLS 设置。

TrafficPolicy.TunnelSettings

字段类型描述必填
protocolstring

指定用于对下游连接进行隧道传输的协议。支持的协议包括:CONNECT - 使用 HTTP CONNECT;POST - 使用 HTTP POST。如果没有指定,则默认使用 CONNECT。上游请求的 HTTP 版本由为代理定义的服务协议确定。

targetHoststring

指定下游连接要隧道传输到的主机。目标主机必须是 FQDN 或 IP 地址。

targetPortuint32

指定下游连接要隧道传输到的端口。

TrafficPolicy.ProxyProtocol

字段类型描述必填
versionVERSION

要使用的 PROXY 协议版本。有关详细信息,请参阅 https://www.haproxy.org/download/2.1/doc/proxy-protocol.txt。默认值为 V1

LoadBalancerSettings.ConsistentHashLB

基于一致性哈希的负载均衡可用于基于 HTTP 头、Cookie 或其他属性提供软会话亲和性。当一个或多个主机从目标服务中添加/删除时,对特定目标主机的亲和性可能会丢失。

注意:与常见的“粘性会话”实现相比,一致性哈希在维护亲和性方面可靠性较低,后者通常将特定目标编码到 cookie 中,确保只要后端保持不变,亲和性就能得到维护。使用一致性哈希,保证较弱;任何主机添加或删除都会破坏 1/backends 请求的亲和性。

警告:一致性哈希依赖于每个代理对端点的一致视图。当启用区域负载均衡时,情况并非如此。区域负载均衡和一致性哈希只有在所有代理位于同一区域或高级负载均衡器处理区域亲和性时才能协同工作。

字段类型描述必填
httpHeaderNamestring (oneof)

基于特定 HTTP 头部的哈希。

useSourceIpbool (oneof)

基于源 IP 地址的哈希。这适用于 TCP 和 HTTP 连接。

httpQueryParameterNamestring (oneof)

基于特定 HTTP 查询参数的哈希。

ringHashRingHash (oneof)

环形/模运算哈希负载均衡器实现对后端主机的一致性哈希。

maglevMagLev (oneof)

Maglev 负载均衡器实现对后端主机的一致性哈希。

minimumRingSizeuint64

已弃用。请改用 RingHash。

LoadBalancerSettings.ConsistentHashLB.RingHash

字段类型描述必填
minimumRingSizeuint64

用于哈希环的虚拟节点的最小数量。默认值为 1024。更大的环形大小会导致更细粒度的负载分配。如果负载均衡池中的主机数量大于环形大小,则每个主机将分配一个虚拟节点。

LoadBalancerSettings.ConsistentHashLB.MagLev

字段类型描述必填
tableSizeuint64

Maglev 哈希的表大小。这有助于控制后端主机更改时的中断。增加表大小可减少中断量。表大小必须是小于 5000011 的素数。如果没有指定,则默认值为 65537。

LoadBalancerSettings.ConsistentHashLB.HTTPCookie

描述将用作一致性哈希负载均衡器哈希键的 HTTP cookie。

字段类型描述必填
namestring

cookie 的名称。

pathstring

为 cookie 设置的路径。

ttlDuration

cookie 的生存期。如果指定,如果 cookie 不存在,将生成具有 TTL 的 cookie。如果 TTL 存在且为零,则生成的 cookie 将是会话 cookie。

ConnectionPoolSettings.TCPSettings

HTTP 和 TCP 上游连接共有的设置。

字段类型描述必填
maxConnectionsint32

到目标主机的 HTTP1/TCP 连接的最大数量。默认值 2^32-1。

connectTimeoutDuration

TCP 连接超时。格式:1h/1m/1s/1ms。必须 >=1ms。默认值为 10 秒。

tcpKeepaliveTcpKeepalive

如果设置,则在套接字上设置 SO_KEEPALIVE 以启用 TCP Keepalives。

maxConnectionDurationDuration

连接的最长持续时间。持续时间定义为自建立连接以来的时间段。如果未设置,则没有最大持续时间。当达到 max_connection_duration 时,连接将关闭。持续时间必须至少为 1 毫秒。

idleTimeoutDuration

TCP 连接的空闲超时。空闲超时定义为在上游或下游连接上没有发送或接收字节的时间段。如果未设置,则默认空闲超时为 1 小时。如果设置为 0 秒,则超时将被禁用。使用加权目标时,不会针对每个集群单独配置空闲超时,因为 idleTimeout 是侦听器的属性,而不是集群的属性。在这种情况下,在第一个加权路由的目的地规则中指定的 idleTimeout 将在侦听器中配置,这意味着也适用于所有加权路由。

ConnectionPoolSettings.HTTPSettings

适用于 HTTP1.1/HTTP2/GRPC 连接的设置。

字段类型描述必填
http1MaxPendingRequestsint32

在等待准备好连接池连接时将排队的请求的最大数量。默认值 2^32-1。请参阅 https://envoy.k8s.ac.cn/docs/envoy/latest/intro/arch_overview/upstream/circuit_breaking,了解在哪些情况下会为 HTTP2 创建新的连接。请注意,这适用于 HTTP/1.1 和 HTTP2。

http2MaxRequestsint32

到目标的活动请求的最大数量。默认值 2^32-1。请注意,这适用于 HTTP/1.1 和 HTTP2。

maxRequestsPerConnectionint32

每个到后端的连接的请求最大数量。将此参数设置为 1 将禁用保持活动状态。默认值为 0,表示“无限制”,最多 2^29。

maxRetriesint32

在给定时间,可以对集群中的所有主机进行的未完成重试次数的最大值。默认值为 2^32-1。

idleTimeoutDuration

上游连接池连接的空闲超时。空闲超时定义为没有活动请求的时间段。如果未设置,则默认值为 1 小时。当达到空闲超时时,连接将关闭。如果连接是 HTTP/2 连接,则在关闭连接之前将执行排水序列。请注意,基于请求的超时意味着 HTTP/2 PING 不会使连接保持活动状态。适用于 HTTP1.1 和 HTTP2 连接。

h2UpgradePolicyH2UpgradePolicy

指定是否应将 http1.1 连接升级到与相关联目标的 http2。

useClientProtocolbool

如果设置为 true,则在启动与后端的连接时将保留客户端协议。请注意,当将其设置为 true 时,h2_upgrade_policy 将无效,即客户端连接不会升级到 http2。

maxConcurrentStreamsint32

在一个 HTTP/2 连接上对一个对等方允许的最大并发流数量。默认值为 2^31-1。

ConnectionPoolSettings.TCPSettings.TcpKeepalive

TCP 保持活动状态。

字段类型描述必填
probesuint32

在决定连接已断开之前,可以发送的最大保持活动探测次数,而不会收到响应。默认情况下,使用操作系统级别的配置(除非被覆盖,否则 Linux 默认值为 9)。

timeDuration

连接需要空闲的时间段,才能开始发送保持活动探测。默认情况下,使用操作系统级别的配置(除非被覆盖,否则 Linux 默认值为 7200 秒(即 2 小时)。

intervalDuration

保持活动探测之间的时间段。默认情况下,使用操作系统级别的配置(除非被覆盖,否则 Linux 默认值为 75 秒)。

LocalityLoadBalancerSetting.Distribute

描述来自“from”区域或子区域的流量如何分布在“to”区域集中。指定区域的语法为 {region}/{zone}/{sub-zone},并且可以在规范的任何部分使用终端通配符。示例

* - 匹配所有区域

us-west/* - us-west 区域中的所有区域和子区域

us-west/zone-1/* - us-west/zone-1 中的所有子区域

字段类型描述必填
fromstring

源区域,用“/”分隔,例如“region/zone/sub_zone”。

tomap<string, uint32>

上游区域到流量分配权重的映射。所有权重的总和应为 100。任何不存在的区域都不会收到流量。

LocalityLoadBalancerSetting.Failover

指定跨区域的流量故障转移策略。由于默认情况下支持区域和子区域故障转移,因此只需要在操作员需要限制流量故障转移以使跨区域故障转移到任何全球端点的默认行为不适用时指定区域。当跨区域故障转移流量不会改善服务健康状况或需要出于其他原因(例如监管控制)而进行限制时,这很有用。

字段类型描述必填
fromstring

源区域。

tostring

当“from”区域中的端点变得不健康时,流量将故障转移到的目标区域。

google.protobuf.UInt32Value

uint32 的包装消息。

UInt32Value 的 JSON 表示形式是 JSON 数字。

字段类型描述必填
valueuint32

uint32 值。

TrafficPolicy.ProxyProtocol.VERSION

Name描述
V1

⁣PROXY 协议版本 1。人类可读格式。

V2

⁣PROXY 协议版本 2。二进制格式。

LoadBalancerSettings.SimpleLB

不需要调优的标准负载均衡算法。

Name描述
UNSPECIFIED

用户没有指定任何负载均衡算法。Istio 将选择合适的默认值。

RANDOM

随机负载均衡器选择一个随机的健康主机。如果未配置健康检查策略,则随机负载均衡器通常比轮询效果更好。

PASSTHROUGH

此选项将连接转发到调用者请求的原始 IP 地址,而不会执行任何形式的负载均衡。此选项必须谨慎使用。它适用于高级用例。有关更多详细信息,请参阅 Envoy 中的原始目的地负载均衡器。

ROUND_ROBIN

基本的轮询负载均衡策略。这通常不适用于许多场景(例如,当使用端点加权时),因为它可能会使端点不堪重负。通常,建议使用 LEAST_REQUEST 作为 ROUND_ROBIN 的替代方案。

LEAST_REQUEST

最少请求负载均衡器将负载分散到端点,优先选择未完成请求最少的端点。这通常更安全,并且在几乎所有情况下都优于 ROUND_ROBIN。建议使用 LEAST_REQUEST 作为 ROUND_ROBIN 的替代方案。

LEAST_CONN

已弃用。请改用 LEAST_REQUEST。

ConnectionPoolSettings.HTTPSettings.H2UpgradePolicy

将 http1.1 连接升级到 http2 的策略。

Name描述
DEFAULT

使用全局默认值。

DO_NOT_UPGRADE

不要将连接升级到 http2。此选择退出选项会覆盖默认值。

UPGRADE

将连接升级到 http2。此选择加入选项会覆盖默认值。

ClientTLSSettings.TLSmode

TLS 连接模式

Name描述
DISABLE

不要到上游端点建立 TLS 连接。

SIMPLE

到上游端点发起 TLS 连接。

MUTUAL

通过提供客户端证书进行身份验证,使用双向 TLS 来保护到上游的连接。

ISTIO_MUTUAL

通过提供客户端证书进行身份验证,使用双向 TLS 来保护到上游的连接。与 Mutua 模式相比,此模式使用 Istio 自动生成的证书进行 mTLS 身份验证。当使用此模式时,ClientTLSSettings 中的所有其他字段应为空。

这些信息对您有帮助吗?
您有什么改进建议吗?

感谢您的反馈!