1

I have a kubernetes ingress controller terminating my ssl with an ingress resource handling two routes: 1 my frontend SPA app, and the second backend api. Currently when I hit each frontend and backend service directly they perform flawlessly, but when I call the ingress controller both frontend and backend services alternate between producing the correct result and a 502 Bad Gateway.

To me it smells like my ingress resource is having some sort of path conflict that I'm not sure how to debug.

Reddit suggested that it could be a label and selector mismatch between my services and deployments which I believe I checked thoroughly. they also mentioned: "api layer deployment and a worker layer deployment [that] both share a common app label and your PDB selects that app label with a 50% availability for example". Which I haven't run down because I don't quite understand.

I also realize SSL could play a role in gateway issues; However, my certificates appear to be working when I hit the https:// port of the ingress-controller

frontend-deploy:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: frontend
  namespace: ingress-nginx
spec:
  selector:
    matchLabels:
      app: my-performance-front
      tier: frontend
  replicas: 1
  template:
    metadata:
      labels:
        app: my-performance-front
        tier: frontend
    spec:
      containers:
        - name: my-performance-frontend
          image: "<my current image and location>"
          lifecycle:
            preStop:
              exec:
                command: ["/usr/sbin/nginx","-s","quit"]
      imagePullSecrets:
      - name: regcred

frontend-svc

apiVersion: v1
kind: Service
metadata:
  name: frontend
  namespace: ingress-nginx
spec:
  selector:
    app: my-performance-front
    tier: frontend
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: LoadBalancer

backend-deploy

apiVersion: apps/v1
kind: Deployment
metadata:
  name: backend
  namespace: ingress-nginx
spec:
  selector:
    matchLabels:
      app: my-performance-back
      tier: backend
  replicas: 1
  template:
    metadata:
      labels:
        app: my-performance-back
        tier: backend
    spec:
      containers:
        - name: my-performance-backend
          image: "<my current image and location>"
          lifecycle:
            preStop:
              exec:
                command: ["/usr/sbin/nginx","-s","quit"]
      imagePullSecrets:
        - name: regcred

backend-svc

apiVersion: v1
kind: Service
metadata:
  name: backend
  namespace: ingress-nginx
spec:
  selector:
    app: my-performance-back
    tier: backend
  ports:
    - protocol: TCP
      name: "http"
      port: 80
      targetPort: 8080
  type: LoadBalancer

ingress-rules

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-rules
  namespace: ingress-nginx
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: "/$1"
#    nginx.ingress.kubernetes.io/service-upstream: "true"
spec:
  rules:
    - http:
        paths:
          - path: /(api/v0(?:/|$).*)
            pathType: Prefix
            backend:
              service:
                name: backend
                port:
                  number: 80
          - path: /(.*)
            pathType: Prefix
            backend:
              service:
                name: frontend
                port:
                  number: 80

Any ideas, critiques, or experiences are welcomed and appreciated!!!

gutscdav000
  • 359
  • 1
  • 3
  • 14
  • Could you check frontend and backed pod logs, and include those in the question? It's possible it's an issie with the app itself. –  Jan 18 '22 at 07:12
  • I can provide them, what are you looking for specifically? When I hit the services themselves they work perfectly. – gutscdav000 Jan 18 '22 at 08:45
  • Any indication that application rejected a request. Only thing that comes to my mind is that `(api/v0(?:/|$).*)` is getting caught by `(.*)` and requests to backend are sent to the frontend. If that's the case, you may try using `pathType: Exact`. –  Jan 18 '22 at 09:22
  • I am experiencing the same issue now! Have you found out the problem by any chance? – kglm Mar 07 '22 at 09:23

0 Answers0