Description
In Kubernetes it is possible to create multiple ingress objects with rules referencing the same host. How the nginx ingress controller should handle this case is not written down in the kubernetes documentation (at least I cant find it).
The official kubernetes nginx ingress controller old repo or new repo and the gce ingress controller are merging multiple ingress configurations into one nginx server object. So to specify one of the examples in multiple ingress objects is valid and leads to the expected behavior.
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: cafe-ingress1
spec:
rules:
- host: example.com
http:
paths:
- path: /tea
backend:
serviceName: tea-svc
servicePort: 80
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: cafe-ingress2
spec:
rules:
- host: example.com
http:
paths:
- path: /coffee
backend:
serviceName: coffee-svc
servicePort: 80
The nginxinc ingress controller does not merge these rules. If there is more than one ingress object defined, it will write multiple separate server objects into the nginx config folder.
Nginx is not happy about this :P
conflicting server name "example.com" on 0.0.0.0:80, ignored
Some tools like kube-lego rely on the merging behavior to work, so simply ignoring additional ingress objects is not the best solution.
Before implementing this merge feature, it is necessary to formulate exactly how the nginx ingress controller should behave and how the order of merging is determined.
Collisions or conflicts should be dealt with gracefully, so the ingress controller is not "blocked" while a issue exists and detailed log entries should be generated, so users are able to monitor the ingress controller.