I have a problem reaching backend from frontend through ingress in minikube. Getting 502 Bad gateway. Frontend part works fine.
For example:
POST from "http://127.0.0.1/login" to "http://127.0.0.1/api/v1/login".
Frontend on React, Backend on Spring Boot
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: custom-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/service-upstream: "true"
nginx.ingress.kubernetes.io/rewrite-target: /$1
nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/cors-allow-origin: "http://localhost"
nginx.ingress.kubernetes.io/cors-allow-methods: "PUT, GET, POST, OPTIONS, DELETE"
nginx.ingress.kubernetes.io/cors-allow-headers: "DNT,X-CustomHeader,X-LANG,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-Api-Key,X-Device-Id,Access-Control-Allow-Origin"
spec:
rules:
- http:
paths:
- path: /?(.*)
pathType: Prefix
backend:
service:
name: frontend
port:
number: 3000
- path: /api/?(.*)
pathType: Prefix
backend:
service:
name: backend-service
port:
number: 8080
backend.yaml
apiVersion: v1
kind: Service
metadata:
name: backend-service
spec:
selector:
app: milk
ports:
- protocol: TCP
port: 8080
targetPort: 8080
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend
namespace: default
labels:
project: milk
spec:
replicas: 1
selector:
matchLabels:
project: milk
template:
metadata:
labels:
project: milk
spec:
containers:
- name: backend-container
image: 'some-image'
imagePullPolicy: Always
Dockerfile
FROM eclipse-temurin:17-jre-alpine
COPY *.jar /app.jar
CMD ["sh", "-c", "java ${JAVA_OPTS} -jar /app.jar ${@}"]
What can be wrong?
UPDATE: if I left only backend path in ingress, it works.