Merge pull request #612 from jcmoraisjr/jm-haproxy-rewrite
HAProxy Ingress rewrite options
This commit is contained in:
commit
a3d3bbe7fc
1 changed files with 106 additions and 0 deletions
106
examples/rewrite/haproxy/README.md
Normal file
106
examples/rewrite/haproxy/README.md
Normal file
|
@ -0,0 +1,106 @@
|
|||
# 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](/examples/deployment/haproxy) 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](/examples/tls-termination/haproxy) -
|
||||
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:
|
||||
|
||||
```console
|
||||
$ kubectl annotate ingress/app --overwrite ingress.kubernetes.io/ssl-redirect=false
|
||||
ingress "app" annotated
|
||||
```
|
||||
|
||||
Try a HTTP request:
|
||||
|
||||
```console
|
||||
$ 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:
|
||||
|
||||
```console
|
||||
$ kubectl annotate ingress/app --overwrite ingress.kubernetes.io/ssl-redirect=false
|
||||
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](https://github.com/jcmoraisjr/haproxy-ingress#configmap).
|
||||
|
||||
### App root context redirect
|
||||
|
||||
Annotate the `app` ingress resource with `app-root` and also `ssl-redirect` for simplicity:
|
||||
|
||||
```console
|
||||
$ 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:
|
||||
|
||||
```console
|
||||
$ 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
|
||||
...
|
||||
```
|
Loading…
Reference in a new issue