I have a flask application which has multiple routes including the default route '/'. I deployed this app on the kubernetes. And i am using minikube as a standalone cluster. I exposed the deployment as a NodePort service and then used ingress to map the external request to the application running in cluster. My ingress resource looks like this...
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: kubernetes-test-svc
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: \"false\"
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
backend:
serviceName: defualt-http-backend
servicePort: 80
rules:
- host: kubernetes-test.info
http:
paths:
- path: /*
backend:
serviceName: kubernetes-test-svc
servicePort: 80
And i also configured my /etc/hosts file to route request to this host. It looks something like this...
192.168.99.100 kubernetes-test.info
The problem is no matter which endpoint i call the ingress always redirects it to the default route '/'. My flask app looks like this...
@app.route('/')
def index():
return "Root route"
@app.route('/route1')
def route1():
return "Route 1"
@app.route('/route2')
def route2():
params = request.args
return make_response(jsonify({'Param1': params['one'], 'Param2': params['two']}))
So if i make request to kubernetes-test.info/route1 it will show me the text "Root Route" instead of "Route 1".
But if i type 192.168.99.100/route1 it show "Route 1". I dont know why this is happening? Why it is working with minikube ip but not working with host I specified.
Service deployment looks like this:-
apiVersion: v1
kind: Service
metadata:
name: kubernetes-test-svc
spec:
type: NodePort
ports:
- port: 80
targetPort: 8080
protocol: TCP
name: http
selector:
app: kubernetes-test
Update your ingress
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: kubernetes-test-svc
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
backend:
serviceName: defualt-http-backend
servicePort: 80
rules:
- host: kubernetes-test.info
http:
paths:
- path: /
backend:
serviceName: kubernetes-test-svc
servicePort: 80