강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

ddc04003님의 프로필 이미지
ddc04003

작성한 질문수

eks를 활용한 spring 운영서버 배포(feat. devops의 모든것)

섹션 5 퀴즈

ingress_nginx.yml 질문

작성

·

19

0

 

# ingress-controller 설치 명령어
# kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.1/deploy/static/provider/aws/deploy.yaml
# aws lb -> ingress controller pod -> ingress -> service로의 라우팅

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ingress
  namespace: honeyricecake
  annotations:
  # 여기서 "nginx"로 지정한 것은 이 Ingress가 NGINX 기반 Ingress Controller에 의해 처리된다는 의미
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /$1 #첫번쨰 prefix제거
    
spec:
  rules:
  - host: server.honeyricecake.shop  # 설정하려는 도메인 이름.
    http:
      paths:
      # - path: /
      - path: /bradkim1/ #bradkim1으로 시작하는 모든 url요청을 nginx-service1로 라우팅한다는 정규표현식
        pathType: Prefix
        backend:
          service:
            name: nginx-service
            port:
              number: 80
      # - path: /bradkim2/ #bradkim2으로 시작하는 모든 url요청을 nginx-service2로 라우팅한다는 정규표현식
      #   pathType: Prefix
      #   backend:
      #     service:
      #       name: nginx-service2
      #       port:
      #         number: 80

안녕하십니까 강사님. 강사님이 주신 ingress 코드에서

 

nginx.ingress.kubernetes.io/rewrite-target: /$1 #첫번쨰 prefix제거

이 한줄이 어떻게 첫번쨰 prefix를 제거하고 스프링 백엔드로 prefix가 제거된 경로를 전달하는지 궁금하여 질문드립니다.

답변 2

0

bradkim님의 프로필 이미지
bradkim
지식공유자

안녕하세요~!

nginx.ingress.kubernetes.io/rewrite-target: /$1 #첫번쨰 prefix제거

위 설정은 url의 첫번째 접두어를 제거합니다.

 

예를 들어) http://server.test.com/bradkim1/abc 이런식의 url로 서버에 요청이 들어오게 되면, 위의 설정은 ingress단계에서 bradkim1을 제거해주고, http://server.test.com/abc url을 다시 재조립해서 이 url을 그 뒷단의 있는 서버에 전달해준다고 보시면 될것같습니다. 사실 정확하게는 http://nginx-service:80/abc 이렇게 만들어서 service에 전달을 해주게 되겠죠.

 

앞의 접두어를 제거한다는 점에만 초점을 두시면 될것 같습니다.

0

안녕하세요, 인프런 AI 인턴입니다. ddc04003님 질문 주셔서 감사합니다.

nginx.ingress.kubernetes.io/rewrite-target: /$1은 NGINX Ingress Controller의 어노테이션 중 하나로, 경로 재작성(리라이트)을 수행합니다. 이 설정은 주어진 경로를 백엔드 서비스로 전달할 때, 특정한 패턴을 제거하거나 변경된 경로로 전달해 주는 역할을 합니다.

리라이트의 작동 방식:

  • nginx.ingress.kubernetes.io/rewrite-target: 이 어노테이션은 Ingress에서 경로를 백엔드로 전달할 때, 원래 경로의 일부를 제거하고 새로운 경로로 바꾸는 역할을 합니다.
  • /$1: 이 부분은 정규 표현식에서 사용되며, 요청 경로에서 캡처된 그룹을 나타냅니다. 기본 설정에서는 전체 요청 경로를 기반으로 백엔드 경로를 결정합니다.

예를 들어, Ingress의 경로가 /bradkim1/some/path로 시작한다면, 백엔드 서비스에는 /honeyricecake/some/path로 리다이렉션될 수 있습니다. 이때 /bradkim1 부분이 제거되고, 나머지 경로는 그대로 유지됩니다.

추가 참고 사항:

  • 경로 재작성은 주로: 클라이언트가 요청하는 풀 경로와 백엔드 서비스가 요구하는 경로가 다를 때 유용합니다. 이를 통해 프론트앤드와 백엔드 간의 요청을 매끄럽게 전달할 수 있습니다.

이러한 설정은 다양한 Ingress Controller(nginx 등)에서 자주 사용되며, 개발자들이 다양한 URL 구조를 보다 유연하게 관리할 수 있게 해 줍니다. 이를 통해 무중단 변화와 경로 접근성을 향상할 수 있습니다.

관련하여 참고할 수 있는 문서로는 NGINX Ingress Controller 공식 문서를 확인해 보시면 도움이 될 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

ddc04003님의 프로필 이미지
ddc04003

작성한 질문수

질문하기