ingress-nginx-helm/examples/rewrite/haproxy
2017-04-19 19:26:17 -03:00
..
README.md Fix HAProxy rewrite doc 2017-04-19 19:26:17 -03:00

HAProxy Ingress rewrite

This example demonstrates how to use rewrite options on HAProxy Ingress controller.

Prerequisites

This document has the following prerequisites:

  • Deploy HAProxy Ingress controller, you should end up with controller, a sample web app and an ingress resource named app to the foo.bar domain
  • Configure only the default TLS termination - there is no need to create another secret

As mentioned in the deployment instructions, you MUST turn down any existing ingress controllers before running HAProxy Ingress.

Annotations

The following annotations are implemented:

  • ingress.kubernetes.io/ssl-redirect: Indicates whether a redirect should be done from HTTP to HTTPS. Possible values are "true" to redirect to HTTPS, or "false" meaning requests may be performed as plain HTTP.
  • ingress.kubernetes.io/app-root: Defines the URL to be redirected when requests are done to the root context /.

SSL Redirect

Annotate the app ingress resource:

$ kubectl annotate ingress/app --overwrite ingress.kubernetes.io/ssl-redirect=false
ingress "app" annotated

Try a HTTP request:

$ curl -iL 172.17.4.99:30876 -H 'Host: foo.bar'
HTTP/1.1 200 OK
Server: nginx/1.9.11
Date: Sat, 15 Apr 2017 19:27:30 GMT
Content-Type: text/plain
Transfer-Encoding: chunked

CLIENT VALUES:
client_address=10.2.33.14
command=GET
real path=/
query=nil
...

Now turn ssl-redirect true:

$ kubectl annotate ingress/app --overwrite ingress.kubernetes.io/ssl-redirect=true
ingress "app" annotated

$ curl -iL 172.17.4.99:30876 -H 'Host: foo.bar'
HTTP/1.1 302 Found
Cache-Control: no-cache
Content-length: 0
Location: https://foo.bar/

...

The default value of ssl-redirect annotation is true and can be changed globally using a ConfigMap.

App root context redirect

Annotate the app ingress resource with app-root, and also ssl-redirect to false for simplicity:

$ kubectl annotate ingress/app --overwrite ingress.kubernetes.io/app-root=/web
ingress "app" annotated

$ kubectl annotate ingress/app --overwrite ingress.kubernetes.io/ssl-redirect=false
ingress "app" annotated

Try a HTTP request:

$ curl -iL 172.17.4.99:30876 -H 'Host: foo.bar'
HTTP/1.1 302 Found
Cache-Control: no-cache
Content-length: 0
Location: /web

HTTP/1.1 200 OK
Server: nginx/1.9.11
Date: Sat, 15 Apr 2017 19:34:49 GMT
Content-Type: text/plain
Transfer-Encoding: chunked

CLIENT VALUES:
client_address=10.2.33.14
command=GET
real path=/web
query=nil
...