-
Task
-
Resolution: Done
-
Major
-
None
-
None
TL;DR: Are Gateways with multiple port definitions supported by Maistra's IOR controller and/or is there a way to automatically redirect HTTP to HTTPS on the Route or Gateway level using Maistra's IOR?
Replicated from GitHub issue maistra/ior#9
My scenario:
- I have a deployment and an associated HTTP service.
- I would like to create a Gateway (and associated VirtualService, etc.) which allows ingress to this HTTP service.
- I would also like to expose this service as HTTPS to the outside world, and automatically redirect any incoming HTTP ingress traffic to HTTPS (using either the Gateway's spec.servers.tls.httpsRedirect: true field, or the Route's spec.tls.insecureEdgeTerminationPolicy: Redirect field).
- I would like to use IOR to expose both the HTTP and HTTPS ports of the Gateway via an OpenShift Route.
Here is my example Gateway:
apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: httpbin-gateway namespace: httpbin spec: selector: istio: ingressgateway servers: - port: number: 80 name: http protocol: HTTP tls: httpsRedirect: true hosts: - httpbin.apps.example.com - port: number: 443 name: https protocol: HTTPS tls: mode: SIMPLE serverCertificate: /etc/istio/ingressgateway-certs/tls.crt privateKey: /etc/istio/ingressgateway-certs/tls.key hosts: - httpbin.apps.example.com
When deploying a ServiceMeshControlPlane with spec.istio.gateways.istio-ingressgateway.ior_enabled: true, the IOR controller creates the following route which only listens for HTTPS traffic:
apiVersion: route.openshift.io/v1 kind: Route metadata: annotations: maistra.io/original-host: httpbin.apps.example.com creationTimestamp: "2020-06-04T12:54:55Z" generateName: httpbin-httpbin-gateway- labels: maistra.io/gateway-name: httpbin-gateway maistra.io/gateway-namespace: httpbin maistra.io/generated-by: ior name: httpbin-httpbin-gateway-w5zlz namespace: istio-system resourceVersion: "21713361" selfLink: /apis/route.openshift.io/v1/namespaces/istio-system/routes/httpbin-httpbin-gateway-w5zlz uid: 8f4c024a-b3ee-4ce3-af46-f910113a2511 spec: host: httpbin.apps.example.com port: targetPort: https tls: termination: passthrough to: kind: Service name: istio-ingressgateway weight: 100 wildcardPolicy: None status: ingress: - conditions: - lastTransitionTime: "2020-06-04T12:54:55Z" status: "True" type: Admitted host: httpbin.apps.example.com routerCanonicalHostname: apps.example.com routerName: default wildcardPolicy: None
Troubleshooting steps I've taken:
When removing either the HTTP or HTTP port blocks from the Gateway, the generated Route is correctly configured for either HTTP or HTTPS. However, when both ports are specified in the Gateway (as shown above), the route doesn't allow redirecting HTTP traffic to HTTPS.
I would expect that the IOR controller can either forward HTTP and HTTPS traffic to the Gateway and configure HTTP redirection to HTTPS on that level, or it should set the spec.tls.insecureEdgeTerminationPolicy to Redirect on the Route level.
*Is there a way to automatically redirect HTTP to HTTPS on the Route or Gateway level using Maistra's IOR?*