kubernetes의 external policy란?

beomjin·2024년 7월 30일

kubernetes에서 외부 트래픽에 대한 접근방식인 external policy를 알아보고자 합니다.

External Policy란?

(Docs :: https://kubernetes.io/ko/docs/tasks/access-application-cluster/create-external-load-balancer/)

설명에 앞서 External Policy가 등장한 배경부터 알아야합니다.

kubernetes의 service 타입이 LoadBalancer 혹은 Nodeport일 경우, 외부에서 kuberntes pod로 트래픽이 들어올 때 의도치 않은 두번째 홉 이 발생하게 됩니다.

이는 아래 그림처럼 표현을 해보겠습니다.

Loadbalance를 통하여 외부트래픽이 도착해야할 Pod는 Pod #1이지만, 처음 트래픽을 받은 Node가 Node1이 아닌 Node2인 경우, 최종 도착지가 Pod #1이기에 kube-proxy를 통하여 cluster 내부의 Pod #1로 보내게됩니다.

이때, 의도치 않은 2번째 홉이 발생하게 됩니다.

이는 Nodeport 또한 마찬가지로 발생하는 문제입니다.

이를 해결하기 위하여 externalpolicy가 나타나게 됩니다.

ExternalPolicy : Cluster 의 경우,

kubernetes docs문서에서는 아래와 같이 Cluster에 대해 말하고있습니다.

Cluster의 경우, 2번째 홉을 발생할 수 있으며, 이에따라 Letancy가 늘어나지만, 전체 Cluster에 대한 고른 부하분산에 이점이있습니다.

외부에서 들어온 트래픽이 최종 도착지 pod인 Pod #1로 도착한다 하였을 때,

위와같이 두번째 홉이 발생할 수 있지만, Pod#1 은 각기 고른 부하분산을 하게됩니다.

다만 외부에서 들어온 Client source IP는 SNAT으로 인하여 최종적으로 Pod #1은 Client의 source ip를 확인 할 수 없게됩니다.

(Docs :: https://kubernetes.io/ko/docs/tutorials/services/source-ip/ )

ExternalPolicy : Local 의 경우,

Local의 경우, 외부에서 들어온 트래픽은 Node간 이동이 불가능하여  client source ip를 보존하고 두번 째 홉이 발생하는 것을 방지하지만, 

Node간 트래픽 이동이 불가능 함에 따른 부하분산이 불균형하게 됩니다.

결과적으로 보면, ExternalPolicy 의 Cluster와 Local 은 필요에 따라 사용할 수 있으며,

Client Source IP를 알아야한다면, 부하분산이 불균형해지더라도 Local을 사용하며,

트래픽 양이 많지않거나, Clinet source ip를 보존할 필요가 없는 경우, Cluster로 사용하는 것이 좋습니다.

0개의 댓글