728x90

 

1. externalTrafficPolicy란?

externalTrafficPolicy는 외부에서 접근하는 트래픽이 클러스터 내부로 전달되는 방식을 결정하는 옵션이다. 이 설정은 주로 NodePort 또는 LoadBalancer 타입의 서비스에서 사용되며, 외부 트래픽을 클러스터의 각 노드에 어떻게 분산할지를 지정한다.

Local   :  트래픽을 수신한 노드의 IP로 접근 가능
Cluster:  모든 노드에서 수신 가능하며, 서비스의 엔드포인트를 가진 모든 Pod로 분산
kubectl edit svc ingress-nginx-controller -n ingress-nginx
# 로컬로 설정하면 파드가 할당된 노드 IP로만 인그레스 접근이 가능하다.
externalTrafficPolicy: Local
# 클러스터로 설정하면 마스터노드~모든 워커노드 IP에서 인그레스 접근이 가능하다.
externalTrafficPolicy: Cluster

 

2. externalTrafficPolicy의 두 가지 설정 예시

2.1 externalTrafficPolicy: Local

apiVersion: v1
kind: Service
metadata:
  name: my-service
  namespace: default
spec:
  type: LoadBalancer
  externalTrafficPolicy: Local
  selector:
    app: my-app
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080

Local 옵션을 선택하면, Pod가 실제로 할당된 노드에서만 트래픽을 수신할 수 있다. 이 설정은 클러스터 내 특정 노드에 할당된 Pod에서만 트래픽을 처리하도록 제한하고, 다음과 같은 특성이 있다:

트래픽 제한: 요청을 받은 노드에 해당 Pod가 할당되지 않은 경우 트래픽은 전달되지 않는다.
원본 IP 유지: 요청을 전달할 때 외부 클라이언트의 IP 주소가 그대로 유지된다.
로드 밸런서 비용 절감: 불필요한 로드 밸런서 비용을 줄일 수 있다.

 

2.2 externalTrafficPolicy: Cluster

apiVersion: v1
kind: Service
metadata:
  name: my-service
  namespace: default
spec:
  type: LoadBalancer
  externalTrafficPolicy: Cluster
  selector:
    app: my-app
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080

Cluster 옵션을 선택하면 모든 노드에서 외부 트래픽을 수신할 수 있다. 트래픽은 클러스터의 모든 노드에서 받아들이고, 각 노드는 트래픽을 해당 서비스의 Pod로 전달한다.

트래픽 분산   :  모든 노드에서 트래픽을 받아들여, 클러스터 전체에서 트래픽이 적절히 분산된다.
원본 IP 손실  :  트래픽이 클러스터 내부에서 라우팅될 때 원본 IP 주소가 손실될 수 있다.
유연한 확장성:  여러 노드에서 트래픽을 받아들이므로 확장성이 높다.

 

728x90
TOP