我正在测试Istio,目前正在测试路由流量的“ canary”功能。
为了进行测试,我创建了一个由5个微服务(serviceA,serviceB,serviceC,serviceD,serviceE)组成的小型servicemesh。每个人都可以呼叫其他人。我只传递了A,E,C,B,B,D之类的路径,并且请求遵循该路径。 为了从集群外部调用我的servicemesh,我有一个 Nginx Ingress Controller ,其Ingress规则指向serviceA pod
这很好。
我面临的问题与使用这样的自定义标头匹配的流量切换有关:
kind: VirtualService
metadata:
name: ServiceA
namespace: demo
labels:
app: demo
spec:
hosts:
- service-a
http:
- route:
- destination:
host: service-a
subset: v1
- match:
- headers:
x-internal-request:
exact: true
route:
- destination:
host: service-a
subset: v2
因此,在这里,我将自定义标头 x-internal-request 设置为true时,尝试将流量路由到ServiceA的v2版本。
问题:
为了使用此功能,我的服务是否必须知道x-internal-header,并将其传递给请求中的下一个服务?还是因为Istio为他们完成工作,他们不需要处理它?</ p>
为了使用此功能,我需要使用Istio Ingress Controller(带有Istio网关)代替Nginx Ingress Controller吗?
今天,我正在使用Nginx Ingress Controller公开一些服务。我们之所以选择Nginx,是因为它具有“外部授权”之类的功能,可以节省很多工作,并且如果我们需要使用Istio Ingress控制器,我不确定它是否提供与Nginx相同的功能。
也许我看不到一条中间路径
谢谢您的帮助
答案 0 :(得分:2)
null
被设计为使用部署在每个Pod上的
insert into DestinationTable(destinationColumn)
select case when right(sourceColumn, 1) = '-' then concat('-', substring(sourceColumn, 1, length(sourceColumn) - 1))
else sourceColumn
end
from SourceTable;
作为Istio
来拦截和代理服务网格中微服务之间的网络流量。
您也可以使用Envoy
通过sidecars
处理请求和响应。根据官方Documentation的说法,可以按照以下顺序将自定义标头添加到请求/响应:加权群集级标头,路由级标头,虚拟主机级标头以及最终全局级标头。由于您的HTTP headers
代理以Envoy
的形式部署在每个相关服务Pod上,因此自定义Envoy
应该传递给每个请求或响应。
我建议使用Istio Ingress Controller及其核心组件sidecar
,该组件通常用于启用HTTP header
网状服务中的监视和路由规则功能。
GitHub上出现了一个有关网格服务中Istio Gateway
的实现以及路由请求问题的问题。