Search

Nginx Ingress Annotation rewrite-target 알아보기

Subtitle
Index
Nginx
Date
2025/03/30
2 more properties
쿠버네티스 Ingress를 구성하다보면 어노테이션을 자주 설정하게 되는데요. 그 중에서 가장 많이 사용하는 어노테이션이 rewrite-target이 아닌가 싶습니다. 자주 사용은 하지만 그 의미를 완벽하게는 모르고 쓰는 경우가 대부분인데 오늘은 rewrite-target에 대해 정확히 짚고 넘어가보려 합니다.

Ingress란

일단 간단하게 쿠버네티스의 ingress에 대해 알아보겠습니다. ingress와 service는 요청을 특정 경로로 보내주는 역할을 합니다. 그 중 ingress는 클러스터 외부에서 접근하는 요청들을 어떻게 처리할 지 정의해둔 규칙들의 모음입니다. ingress는 말 그대로 규칙들의 모음이고, 이러한 요청을 실제로 처리하는 친구가 ingress controller입니다.
예를 들어 ingress에 아래와 같이 규칙을 정의해둔다고 하겠습니다. 해당 규칙을 해석해보자면 xxx.com/hello로 접속하였을 때 3000번 포트의 hello라는 service로 리다이렉션 됩니다. ingress는 외부에서 온 요청을 어떤 service로 보낼지를 정의해놓은 규칙 명세서입니다.
spec: rules: - http: paths: - backend: service: port: number: 3000 name: hello path: /hello pathType: Prefix host: xxx.com
Plain Text
복사
그리고 annotation은 이러한 ingress에 사용자가 원하는 특정한 행동을 하도록 만들기 위해 사용합니다. pod에서 사용하는 label과 비슷하지만 역할은 완전히 다릅니다. label은 말그대로 특정 파드를 검색하기 위해 사용하는 라벨링 용도이지만, annotation은 실제 쿠버네티스 시스템이 이를 인식하여 활용합니다.
nginx-ingress에서는 annotation을 이용해서 nginx에서 필요한 설정들을 사용자가 지정할 수 있는 것입니다.

rewrite-target

rewrite-target은 nginx의 여러 annotation 중에 하나입니다. 이름을 통해 역할을 유추해보면 뭔가 요청이 갖는 타겟을 바꿔주는 것으로 보이죠? rewrite-target은 인그레스에 정의된 경로로 들어오는 요청을 설정된 경로로 전달합니다. 예시를 보며 이해해보도록 하죠.
아래 ingress는 xxx.com/something으로 온 요청을 service-two로 보냅니다. 만약 하위 경로를 내부 서비스의 다른 경로로 보내려면 rewrite-target을 사용하면 됩니다. 아래의 rewrite-target: /$2의 의미는 /something으로 요청되었을 때 regex의 두번째 그룹으로 요청을 보내겠다는 의미입니다. 만약 /something/color로 요청한다면 /color로, something/color/red라면 color/red로 요청이 전달됩니다.
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-example annotations: nginx.ingress.kubernetes.io/rewrite-target: /$2 spec: rules: - http: paths: - path: / pathType: Prefix backend: service: name: service-one port: number: 80 - path: /something(/|$)(.*) pathType: Prefix backend: service: name: service-two port: number: 80
Plain Text
복사