Kubernetes
ServiceEntry는 네임스페이스마다 설정이 필요한가?
DevOps Engineer
2025. 3. 13. 13:53
728x90
❓ ServiceEntry는 네임스페이스마다 설정해야 하나?
👉 아니요, 반드시 네임스페이스마다 설정할 필요는 없습니다.
👉 하지만, ServiceEntry의 적용 범위는 리소스를 정의한 네임스페이스에 따라 달라질 수 있음.
1️⃣ ServiceEntry의 네임스페이스 적용 범위
설정 위치적용 대상특징
공용 네임스페이스 (예: istio-system) | 모든 네임스페이스의 Pod에서 사용 가능 | 클러스터 전체에서 외부 서비스 접근 가능 |
특정 네임스페이스 (예: app-namespace) | 해당 네임스페이스의 Pod에서만 사용 가능 | 네임스페이스 별로 개별 설정 필요 |
2️⃣ ServiceEntry 적용 범위에 따른 예제
✅ 1. 클러스터 전체에서 공유 (istio-system 네임스페이스에 설정)
👉 모든 네임스페이스의 Pod가 api.external-service.com에 접근 가능.
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
name: external-api
namespace: istio-system # 클러스터 전역에서 사용 가능
spec:
hosts:
- api.external-service.com
location: MESH_EXTERNAL
ports:
- number: 443
name: https
protocol: TLS
resolution: DNS
✅ 결과:
- 모든 네임스페이스에서 api.external-service.com 접근 가능.
- 하지만, Istio의 "네임스페이스 격리 정책"이 활성화되면 특정 네임스페이스에서 접근이 제한될 수도 있음.
✅ 2. 특정 네임스페이스에서만 허용 (app-namespace에 설정)
👉 특정 네임스페이스(app-namespace)의 Pod만 api.external-service.com에 접근 가능.
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
name: external-api
namespace: app-namespace # 특정 네임스페이스에서만 사용 가능
spec:
hosts:
- api.external-service.com
location: MESH_EXTERNAL
ports:
- number: 443
name: https
protocol: TLS
resolution: DNS
✅ 결과:
- app-namespace 내의 Pod만 api.external-service.com에 접근 가능.
- 다른 네임스페이스의 Pod는 ServiceEntry를 별도로 설정해야 외부 서비스에 접근 가능.
3️⃣ 특정 네임스페이스에서만 공유 가능하게 설정
Istio의 Sidecar 리소스를 활용하면 특정 네임스페이스에서만 ServiceEntry를 공유할 수 있음.
📌 Sidecar 리소스를 사용하여 특정 네임스페이스에서 ServiceEntry 공유
apiVersion: networking.istio.io/v1beta1
kind: Sidecar
metadata:
name: allow-egress
namespace: app-namespace # app-namespace 내부에서만 적용
spec:
egress:
- hosts:
- "./*" # 현재 네임스페이스의 모든 서비스 허용
- "istio-system/*" # istio-system의 ServiceEntry 허용
✅ 결과:
- istio-system 네임스페이스에 설정된 ServiceEntry를 app-namespace에서도 사용할 수 있음.
🚀 결론
설정 위치적용 범위설정 필요 여부
istio-system 네임스페이스 | 모든 네임스페이스에서 사용 가능 | ✅ 한 번만 설정하면 됨 |
특정 네임스페이스 (예: app-namespace) | 해당 네임스페이스에서만 사용 가능 | ✅ 각 네임스페이스마다 필요 |
Sidecar 리소스를 활용 | 특정 네임스페이스에 공유 가능 | ✅ 선택적 설정 |
🚀 즉, ServiceEntry를 istio-system에 설정하면 모든 네임스페이스에서 사용할 수 있지만, 네임스페이스 격리 정책이 적용된 경우 각 네임스페이스마다 따로 설정해야 할 수도 있음!
728x90