TLS 匹配必须至少有一个 SNI 主机
TLS match must have at least one SNI host
在此处引用 bookinfo yaml:
我的网关看起来像:
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: bookinfo-gateway
spec:
selector:
istio: ingressgateway # use istio default controller
servers:
- port:
name: https
number: 443
protocol: https
tls:
mode: PASSTHROUGH
hosts:
- "*"
将其配置为接受来自所有主机的 https。但是,在VirtualService中,我想实现一个URL match based routing。这就是我当前的 VS 配置。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: bookinfo
spec:
hosts:
- "*"
gateways:
- bookinfo-gateway
tls:
- match:
- uri:
prefix: /productpage
- port: 443
sniHosts:
- "*"
route:
- destination:
host: productpage
port:
number: 9080
部署失败并出现错误“TLS 匹配必须至少有一个 SNI 主机”。如果我删除 uri 匹配条件,相同的 VS 配置将起作用。
有没有一种方法可以让 TLS 基于 URI 匹配的路由同时保留通用的 sniHost(因为我的主机很常见,我需要根据 url 前缀路由到特定的应用程序)?
在 Istio 中,VirtualService TLS Match 不包含基于 URI 的路由 (link)。 TLS 是一种不透明的连接,它只能执行基于主机的路由(因为主机名存在于客户端 hello tcp 握手中)。
为了实现基于路径的路由,您将需要终止TLS作为网关级别,并基于http进行路由。 HTTP 消息是透明消息,其中 L7 路由可以由 istio 或任何其他中间层应用。
另一种选择是使用 nginx 或任何其他反向代理(执行 ssl 终止并将调用直接路由到适当的服务)。简而言之,为了执行基于 L7 的路由(基于路径的其中之一),无论是在 istio 端还是在应用程序端完成,您都需要解密请求(TLS 终止)。
在此处引用 bookinfo yaml: 我的网关看起来像:
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: bookinfo-gateway
spec:
selector:
istio: ingressgateway # use istio default controller
servers:
- port:
name: https
number: 443
protocol: https
tls:
mode: PASSTHROUGH
hosts:
- "*"
将其配置为接受来自所有主机的 https。但是,在VirtualService中,我想实现一个URL match based routing。这就是我当前的 VS 配置。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: bookinfo
spec:
hosts:
- "*"
gateways:
- bookinfo-gateway
tls:
- match:
- uri:
prefix: /productpage
- port: 443
sniHosts:
- "*"
route:
- destination:
host: productpage
port:
number: 9080
部署失败并出现错误“TLS 匹配必须至少有一个 SNI 主机”。如果我删除 uri 匹配条件,相同的 VS 配置将起作用。
有没有一种方法可以让 TLS 基于 URI 匹配的路由同时保留通用的 sniHost(因为我的主机很常见,我需要根据 url 前缀路由到特定的应用程序)?
在 Istio 中,VirtualService TLS Match 不包含基于 URI 的路由 (link)。 TLS 是一种不透明的连接,它只能执行基于主机的路由(因为主机名存在于客户端 hello tcp 握手中)。
为了实现基于路径的路由,您将需要终止TLS作为网关级别,并基于http进行路由。 HTTP 消息是透明消息,其中 L7 路由可以由 istio 或任何其他中间层应用。
另一种选择是使用 nginx 或任何其他反向代理(执行 ssl 终止并将调用直接路由到适当的服务)。简而言之,为了执行基于 L7 的路由(基于路径的其中之一),无论是在 istio 端还是在应用程序端完成,您都需要解密请求(TLS 终止)。