쿠버네티스 인그레스의 PathType
쿠버네티스 Ingress의 PathType은 요청 경로(/path)를 처리하고 매칭하는 방식에 대한 제어를 제공함.
이를 통해 특정 HTTP(S) 요청이 적절한 백엔드 서비스로 라우팅되도록 설정할 수 있음.
PathType은 경로 매칭의 정확성과 라우팅 동작을 결정하는 중요한 요소임.
PathType의 종류
쿠버네티스 Ingress는 총 3가지 PathType을 지원함.
1. Exact (정확 매칭)
2. Prefix (접두사 매칭)
3. ImplementationSpecific (컨트롤러 구현에 의존)
Exact (PathType: Exact)
요청 경로와 완벽히 일치하는 경우에만 트래픽을 라우팅함.
경로가 정확히 동일하지 않으면 요청이 무시됨.
1. 특징
/example 요청은 /example에만 매칭됨.
/example/ 또는 /example/anything 요청은 매칭되지 않음.
2. 사용 사례
특정 경로에만 정확히 제한된 서비스 제공.
API 엔드포인트 /api/v1/healthz 같은 고정 경로 매칭.
3. 예제
rules:
- host: example.com
http:
paths:
- path: /exact-match
pathType: Exact
backend:
service:
name: exact-service
port:
number: 80
Prefix (PathType: Prefix)
경로가 지정된 접두사로 시작하면 매칭됨.
경로의 서브경로도 포함하여 매칭되므로 /example는 /example, /example/test, /example/subpath 등을 모두 매칭함.
1. 특징
/example는 /example/test나 /example/anything을 포함함.
/example/는 /example와 동일하게 동작함.
요청 경로는 반드시 지정된 접두사로 시작해야 함.
2. 사용 사례
특정 서비스가 다수의 하위 경로를 포함하는 경우.
/api 경로를 사용해 모든 API 요청을 특정 백엔드로 라우팅.
3. 예제
rules:
- host: example.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: api-service
port:
number: 80
ImprementationSpecific (PathType: ImplementationSpecific)
경로 매칭 동작이 Ingress Controller 구현에 따라 달라짐.
Ingress Controller마다 다른 매칭 방식과 동작이 있을 수 있음.
1. 특징
NGINX Ingress Controller: 기본적으로 Prefix와 유사하게 동작하지만, 일부 설정에서 더 유연한 매칭을 허용.
AWS ALB Controller: AWS ALB의 라우팅 규칙에 따라 매칭 방식이 정의됨.
2. 사용 사례
Ingress Controller별 고유 동작을 활용해야 할 때.
기본적인 매칭 방식을 사용하거나, 컨트롤러의 고급 설정이 필요한 경우.
3. 예제
rules:
- host: example.com
http:
paths:
- path: /custom
pathType: ImplementationSpecific
backend:
service:
name: custom-service
port:
number: 80
PathType 매칭 우선 순위
동일한 경로와 PathType이 여러 개 정의된 경우, 쿠버네티스는 정확한 매칭 우선 정책을 따름.
예를 들면 다음과 같음.
paths:
- path: /example
pathType: Exact
backend:
service:
name: exact-service
port:
number: 80
- path: /example
pathType: Prefix
backend:
service:
name: prefix-service
port:
number: 80
요청 /example은 Exact에 매칭되어 exact-service로 라우팅됨.
요청 /example/subpath는 Prefix에 매칭되어 prefix-service로 라우팅됨.
PathType 동작 비교 (/example 요청시)
1. Exact
매칭: /example
매칭여부: 가능
매칭: /example/
매칭여부: 불가능
매칭: /example/test
매칭여부: 불가능
2. Prefix
매칭: /example
매칭여부: 가능
매칭: /example/
매칭여부: 가능
매칭: /example/test
매칭여부: 가능
3. ImplementationSpecific
매칭: /example, /example/test
매칭여부: 컨트롤러에 따라 다름
Best Practice
1. 명확한 PathType 선택
Exact은 고정 경로의 트래픽 라우팅에 적합.
Prefix는 특정 경로 및 서브경로를 포함한 요청에 적합.
ImplementationSpecific은 컨트롤러의 기본 설정을 활용할 때만 사용.
2. Ingress Controller 문서 검토
ImplementationSpecific는 사용 중인 Ingress Controller의 동작을 반드시 이해하고 사용.
3. 우선순위 충돌 방지
동일한 경로에 대해 명확히 다른 PathType을 설정하거나 경로를 분리.
4. 테스트 및 검증
Ingress 정의 후, 실제 요청 시 동작을 테스트하여 원하는 경로로 트래픽이 전달되는지 확인.
추가 실습
테스트 환경에서 Exact와 Prefix PathType의 차이 실험
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: path-type-test
spec:
rules:
- host: test.example.com
http:
paths:
- path: /exact
pathType: Exact
backend:
service:
name: exact-service
port:
number: 80
- path: /prefix
pathType: Prefix
backend:
service:
name: prefix-service
port:
number: 80
요청 /exact → exact-service로 전달 성공.
요청 /exact/anything → 매칭 실패.
요청 /prefix 또는 /prefix/anything → prefix-service로 전달 성공.
'Operating System > Kubernetes' 카테고리의 다른 글
[Kubernetes] Airflow의 Executor 종류 (1) | 2024.12.26 |
---|---|
[Kubernetes] k8s, PGBouncer 개념 (0) | 2024.12.26 |
[Kubernetes] 쿠버네티스 인그레스 개념 (0) | 2024.12.26 |
[Kubernetes] Nginx Dockerfile을 arm64로 ECR에 배포하는 방법 (0) | 2024.12.26 |
[Kubernetes] Liveness, Readiness, Startup Probe 정리 (0) | 2024.12.26 |