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