2024년 02월 18일 작성
Ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: api-ingress
namespace: mynamespace
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
rules:
- http:
paths:
- path: "/api(/|$)(.*)"
pathType: Prefix
backend:
service:
name: api-spring-service
port:
number: 80
프론트엔드에서 /api/*
로의 모든 request가 404 에러 발생
프론트엔드 → ingress-nginx-controller —(연결 두절?)→ 백엔드 service → pod
Ingress를 살짝 바꿔 적용 후 ingress-nginx-controller 로그를 살펴봄.
I0216 08:16:46.523876 7 main.go:100] "successfully validated configuration, accepting" ingress="mynamespace/api-ingress"
I0216 08:16:46.529334 7 store.go:434] "Found valid IngressClass" ingress="mynamespace/api-ingress" ingressclass="nginx"
W0216 08:16:46.529372 7 store.go:869] ingress mynamespace/api-ingress contains invalid path /api(/|$)(.*)
이전에 성공적으로 동작하던 클러스터와 동작하지 않는 클러스터의 ingress-nginx-controller 이미지를 비교해봤다.
이전 클러스터 (동작O) : registry.k8s.io/ingress-nginx/controller:v1.6.4
지금 클러스터 (동작X) : registry.k8s.io/ingress-nginx/controller:v1.6.3
현재 클러스터는 ingress-nginx-controller를 다음 가이드대로 설치하고 있다.
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.6.4/deploy/static/provider/baremetal/deploy.yaml
ingress-nginx 리포지토리가 v1.6.3 → v1.6.4로 업데이트될 때, controller 부분에 변경사항이 있었다. (이슈 #9626)
1.6.4에선 다음 코드가 삭제됐다. (L868)
if !ingressutils.IsSafePath(copyIng, path.Path) {
klog.Warningf("ingress %s contains invalid path %s", key, path.Path)
return
}
느낀 점