如何在Istio Ingress Gateway中实现类似Nginx的SSL重定向禁用配置?
Istio禁用SSL重定向的配置方法
Istio并没有和Nginx Ingress的nginx.ingress.kubernetes.io/ssl-redirect、nginx.ingress.kubernertes.io/force-ssl-redirect直接对应的注解,不过可以通过以下两种方式实现禁用SSL重定向的效果:
1. 常规方式:通过Gateway + VirtualService配置(无需Envoy Filter)
Istio默认不会自动将HTTP请求重定向到HTTPS,除非你在VirtualService中显式配置了重定向规则。所以如果不需要SSL重定向,只需要不配置HTTP到HTTPS的重定向规则即可。
若之前配置过重定向,或需要确保完全禁用,可按以下步骤操作:
- 让Gateway同时监听HTTP(80端口)和HTTPS(443端口)流量:
apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: my-gateway spec: selector: istio: ingressgateway servers: - port: number: 80 name: http protocol: HTTP hosts: - "example.com" - port: number: 443 name: https protocol: HTTPS tls: mode: SIMPLE credentialName: example-tls hosts: - "example.com"
- 在VirtualService中直接将HTTP流量路由到后端服务,不添加重定向规则:
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: my-vs spec: hosts: - "example.com" gateways: - my-gateway http: - match: - uri: prefix: / route: - destination: host: my-service port: number: 80
这样HTTP请求会直接被路由到后端,不会被重定向到HTTPS。
2. 特殊场景:通过Envoy Filter强制禁用重定向
如果因第三方注入重定向规则等特殊原因,需要强制禁用SSL重定向,可以使用Envoy Filter移除Envoy中的重定向过滤器:
apiVersion: networking.istio.io/v1alpha3 kind: EnvoyFilter metadata: name: disable-ssl-redirect namespace: istio-system spec: workloadSelector: labels: istio: ingressgateway configPatches: - applyTo: HTTP_FILTER match: context: GATEWAY listener: portNumber: 80 filterChain: filter: name: "envoy.filters.network.http_connection_manager" subFilter: name: "envoy.filters.http.redirect" patch: operation: REMOVE
内容的提问来源于stack exchange,提问作者Vishak k v
相关产品推荐
相关产品推荐

