hosts
字段如何作为过滤器 , 以及 VirtualService 中的 hosts
字段如何作为匹配 。
Gateway HostsVirtualService Hosts行为*
customers.default.svc.cluster.local
流量通过 VirtualService 发送,因为 *
允许所有主机customers.default.svc.cluster.local
customers.default.svc.cluster.local
hosts 匹配,流量将被发送hello.default.svc.cluster.local
customers.default.svc.cluster.local
hosts 不匹配,无效hello.default.svc.cluster.local
["hello.default.svc.cluster.local", "customers.default.svc.cluster.local"]
只允许 hello.default.svc.cluster.local
。它绝不允许 customers.default.svc.cluster.local
通过网关 。然而,这仍然是一个有效的配置 , 因为 VirtualService 可以连接到第二个网关,该网关的 hosts
字段中包含 *.default.svc.cluster.local
四.Subset和DestinationRule4.1 Subset 和 DestinationRule目的地指的是不同的子集(subset)或服务版本 。通过子集 , 我们可以识别应用程序的不同变体 。在我们的例子中,我们有两个子集,v1
和 v2
, 它们对应于我们 customer 服务的两个不同版本 。每个子集都使用键/值对(标签)的组合来确定哪些 Pod 要包含在子集中 。我们可以在一个名为 DestinationRule
的资源类型中声明子集 。
下面是定义了两个子集的 DestinationRule 资源的yaml文件 。
apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata:name: customers-destination spec:host: customers.default.svc.cluster.localsubsets:- name: v1labels:version: v1- name: v2labels:version: v2
让我们看看我们可以在 DestinationRule 中设置的流量策略 。
4.2 DestinationRule 中的流量策略通过 DestinationRule , 我们可以定义设置,如负载均衡配置、连接池大小、局部异常检测等,在路由发生后应用于流量 。我们可以在 trafficPolicy
字段下设置流量策略 。以下是这些设置:
- 负载均衡器设置
- 连接池设置
- 局部异常点检测
- 客户端 TLS 设置
- 端口流量策略
round-robin
(轮询) 。 apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata:name: customers-destination spec:host: customers.default.svc.cluster.localtrafficPolicy:loadBalancer:simple: ROUND_ROBINsubsets:- name: v1labels:version: v1- name: v2labels:version: v2
我们还可以设置基于哈希的负载均衡,并根据 HTTP 头、cookies 或其他请求属性提供会话亲和性 。下面是一个流量策略的片段,它设置了基于哈希的负载均衡,并使用一个叫做 location
的 cookie 来实现亲和力 。 trafficPolicy:loadBalancer:consistentHash:httpCookie:name: locationttl: 4s
4.2.2 连接池配置这些设置可以在 TCP 和 HTTP 层面应用于上游服务的每个主机,我们可以用它们来控制连接量 。下面是一个片段,显示了我们如何设置对服务的并发请求的限制 。
spec:host: myredissrv.prod.svc.cluster.localtrafficPolicy:connectionPool:http:http2MaxRequests: 50
4.2.3 异常点检测异常点检测是一个断路器的实现,它跟踪上游服务中每个主机(Pod)的状态 。如果一个主机开始返回 5xx HTTP 错误,它就会在预定的时间内被从负载均衡池中弹出 。对于 TCP 服务,Envoy 将连接超时或失败计算为错误 。下面是一个例子,它设置了 500 个并发的 HTTP2 请求(
http2MaxRequests
)的限制,每个连接不超过 10 个请求(maxRequestsPerConnection
)到该服务 。每 5 分钟扫描一次上游主机(Pod)(interval
),如果其中任何一个主机连续失败 10 次(contracticalErrors
),Envoy 会将其弹出 10 分钟(baseEjectionTime
) 。 trafficPolicy:connectionPool:http:http2MaxRequests: 500maxRequestsPerConnection: 10outlierDetection:consecutiveErrors: 10interval: 5mbaseEjectionTime: 10m
4.2.4 客户端 TLS 设置包含任何与上游服务连接的 TLS 相关设置 。下面是一个使用提供的证书配置 mTLS 的例子 。 trafficPolicy:tls:mode: MUTUALclientCertificate: /etc/certs/cert.pemprivateKey: /etc/certs/key.pemcaCertificates: /etc/certs/ca.pem
其他支持的 TLS 模式有 DISABLE
(没有 TLS 连接),SIMPLE
(在上游端点发起 TLS 连接),以及
推荐阅读
- Git 02: git管理码云代码仓库 + IDEA集成使用git
- node.js:《接口实现文件的上传和下载》
- Kotlin Mockito使用方法
- 之五 2流高手速成记:Springboot整合Shiro实现安全管理
- <五>掌握左值引用和初识右值引用
- 二 Istio:在Kubernetes(k8s)集群上安装部署istio1.14
- 四十八 SpringCloud微服务实战——搭建企业级开发框架:【移动开发】整合uni-app搭建移动端快速开发框架-使用第三方UI框架
- Spring Retry 重试
- C#-多线程的使用Tread
- 我国哪座山被称为五岳之首?支付宝