GKE Ingress not respecting rewrite rule

8/24/2017

Running a cluster on Google Container engine.

Expect it to respect rewrite rule. Running the debug echo server it shows it's not respecting the http-rewrite rule as documented here in kubernetes ingress docs.

Works locally on minikube just fine. The realpath parameter still has debug attached although rewrite is on to strip after match. Expect /foo/bar/ vs /debug/foo/bar.

Attached

URL + response

http://homes.stanzheng.com/debug/foo/bar

CLIENT VALUES:
client_address=10.12.2.1
command=GET
real path=/debug/foo/bar
query=nil
request_version=1.1
request_uri=http://homes.stanzheng.com:8080/debug/foo/bar

SERVER VALUES:
server_version=nginx: 1.10.0 - lua: 10001

HEADERS RECEIVED:
accept=text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
accept-encoding=gzip, deflate
accept-language=en-US,en;q=0.8
connection=Keep-Alive
cookie=__cfduid=dfd6a6d8c2a6b361a3d72e3fc493295441494876880; _ga=GA1.2.5098880.1494876881
host=homes.stanzheng.com
upgrade-insecure-requests=1
user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36
via=1.1 google
x-cloud-trace-context=1586885dcac2d537189444861a8a462c/1232314719683944914
x-forwarded-for=204.154.44.39, 35.190.78.5
x-forwarded-proto=http
BODY:
-no body in request-
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: rewrite
  annotations:
    ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: minikube.homes
    http:
      paths:
      - path: /debug/*
        backend:
          serviceName: echoserver
          servicePort: 8080
-- StanleyZheng
google-kubernetes-engine
kubernetes

2 Answers

1/5/2018

You could use an Nginx ingress controller as explained in this blog:

http://rahmonov.me/posts/nginx-ingress-controller/

Once you follow those steps, you need to add the following annotation to your ingress yaml:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: rewrite
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: minikube.homes
    http:
      paths:
      - path: /debug/*
        backend:
          serviceName: echoserver
          servicePort: 8080
-- Ovi
Source: StackOverflow

8/26/2017

rewrite-target is not supported by Google Container Engine Ingress. See this page for a comparison of features:

https://github.com/kubernetes/ingress/blob/master/docs/annotations.md

-- Janos Lenart
Source: StackOverflow