Kubernetes Ingress: How can I expose two ports on one path?
I have a GCE Ingress configured and working with SSL on port 443. I'm trying to get port 28080 pointing to my standalone actionable server.
I currently have this for my Ingress yaml:
# web-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: gke-ingress
annotations:
kubernetes.io/ingress.class: "gce"
ingress.kubernetes.io/ssl-redirect: "true"
kubernetes.io/ingress.allow-http: "false"
spec:
rules:
- host: example.com
http:
paths:
- path: /ws
backend:
serviceName: websocket
servicePort: 28080
tls:
- secretName: gkecert
hosts:
- example.com
backend:
serviceName: web
servicePort: 443
If I set the path to / for the websocket service, it screws up the root path (error 503). From what I've read, an ingress cannot handle 2 ports on one path. How then are people connecting their front-ends to websocket servers without separating by path?
I think your second Backend service is missing the path, if you want to use ingress with one host and two services you should add the path. See ingress fanout then your ingress should be like:
# web-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: gke-ingress
annotations:
kubernetes.io/ingress.class: "gce"
ingress.kubernetes.io/ssl-redirect: "true"
kubernetes.io/ingress.allow-http: "false"
spec:
tls:
- secretName: gkecert
hosts:
- example.com
rules:
- host: example.com
http:
paths:
- path: /ws
backend:
serviceName: websocket
servicePort: 28080
- path: /
backend:
serviceName: web
servicePort: 443
You must specify the path if you want to use the same host. You can connect the front-ends to websocket servers without separating by path using different host. See the documentation on how we do it Link