Istio配置VirtualService实现跳转外部HTTPS地址的问题咨询
解决方案
你只需要在VirtualService的redirect配置块中显式指定重定向协议为HTTPS即可,无需修改Gateway配置,也不需要DestinationRule、ServiceEntry这类用于代理转发逻辑的资源。
修改后的完整配置如下:
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: test spec: gateways: - test hosts: - test.com http: - redirect: scheme: HTTPS # 新增该行指定重定向使用HTTPS协议 authority: testredirect.com redirectCode: 302 --- apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: name: test spec: selector: istio: ingressgateway servers: - hosts: - test.com port: name: http number: 80 protocol: HTTP2
原理解释
Istio默认会继承原始请求的协议生成重定向地址,你场景中流入Istio的请求都是HTTP协议,所以默认生成的重定向地址也为HTTP协议。显式指定scheme: HTTPS后,Istio返回的302响应的Location响应头会自动使用HTTPS协议拼接目标地址,完全符合需求。
你之前尝试的DestinationRule和ServiceEntry不生效属于正常情况:这两类资源是用于处理Istio代理向后端转发请求的逻辑,而重定向是Istio直接返回3xx响应给客户端,不需要进行后端转发,因此这两类配置对重定向逻辑没有影响。
你提到的SSL在负载均衡层终止、Istio侧仅收到80端口HTTP请求的场景不影响该配置生效,重定向协议是写在返回给客户端的响应中的,和Istio收到的请求本身的协议无关。
内容的提问来源于stack exchange,提问作者jerome
相关产品推荐
相关产品推荐

