본문 바로가기
Kubernetes

Kubernetes Network Study #2(Service to Pod)

by beann 2023. 11. 23.
반응형

이번 장에서는 Service가 Pod로 어떻게 트래픽을 포워딩할 수 있는지 알아보도록 하겠습니다.

 

일단 kubernetes의 Service는 뭘까요?

Pod가 2개 이상 있을경우 엔드포인트도 2개가 된다는 건데요. 이들을 한데 묶어 Service라는 가상의 Loadbalancer가 트래픽을 분하도록 해주는 Kubernetes Resource중 하나입니다.

 

Service는 타입이 총 4가지가 있습니다.

- ClusterIP: 클러스터 내부에서만 사용할 수 있는 Service

- NodePort: 노드 외부에서 접속 가능하도록 해주는 Service

- LoadBalancer: CSP사의 Loadbalancer와 연계하여 외부에서 접속 가능하도록 해주는 Service

- External Name: External Name 서비스와 DNS를 매핑하는 Service. 해당 서비스로 접근하면 매핑된 DNS로 리다이렉트됨.

 

 

 

자 그럼, Service는 어떻게 Pod로 트래픽을 포워딩할까요?

아래 아키텍처로 짐작할 수 있습니다.

 

 


[테스트 환경 구성]

저는 먼저 nginx 파드를 생성하고 Service를 NodePort 타입으로 만들어봤습니다.

 

NodePort는 30042로 확인됩니다.

 

엔드포인트도 해당 Pod 주소로 잘 찍히는걸 확인할 수 있습니다.

 

iptables를 통해 체인을 확인해보면 KUBE-NODEPORTS가 확인되는데요.

 

이것을 계속 확인해보면 아래와 같이 서비스로 생성된 NodePort를 볼 수 있습니다. 제가 기존 생성했던 Port번호와 같은걸 확인할 수 있습니다. 만약 NodePort가 2개라면 2개가 생성되어있을겁니다. 계속 확인해보겠습니다.

 

 

이번엔 KUBE-SVC-* 체인이 확인되는데요 해당 체인은 ClusterIP로 인해 생성되는 체인이라고 보면 됩니다. 즉 Network Flow는 NodePort > ClusterIP > Pod라는 것을 유추해볼 수 있습니다.

 

 

해당 체인도 확인해보면 아래와 같이 Service와 연결된 POD의 IP주소도 확인 됩니다.

이것들은 Pod마다 생기는 체인인데요

 

해당 체인을 또 살펴보면 DNAT라는이름의 체인으로 10.100.119.7로 DNAT룰이 설정되어있는 것을 볼 수 있습니다.

 

이쯤에서 궁금해하실 것 같은 부분은 그럼"Pod가 2개 이상일 경우 로드밸런싱 알고리즘은 어떻게 되는거지?"

정답은 kube-proxy mode에 따라 다르다 입니다.

kube-proxy mode가 iptables일 경우 트래픽은 랜덤하게 분배가 되며, 다양한 로드밸런싱 알고리즘을 사용하고 싶다면 ipvs모드로 사용해야합니다.

 

이로써 Service는 뭔가 IP가 있어서 실체할 것 같지만 가상의IP일 뿐이고 kubernetes에서 무언가 실체하지 않는 것임을 알 수 있고 하나의 Iptables에 세팅된 하나의 룰이라고 보면 될 것 같습니다.

공부를 하다가 NodePort또한 왜 Port가 netstat커맨드로 보이지 않을까 궁금해하시는 분들도 많이 계실 것 같은데요 위 처럼 service는 프로세스 형태로 동작하는 것이 아닌 iptables에 세팅된 하나의 룰이기 때문에 보이지 않았던 것입니다.(참고로 iptables는 체인 및 룰을 설정하는 tool이고, 실제 패킷의 이동에 대한 관여는 netfilter가 수행하게 됩니다. netfilter는 리눅스 커널의 네트워크 스택에 내장된 패킷 처리 프레임워크입니다.) 

https://dramasamy.medium.com/life-of-a-packet-in-kubernetes-part-3-dd881476da0f

 

 

혹시라도 틀린 정보, 수정이 필요한 부분이 있다면 언제든 피드백 부탁드립니다.! 바로 수정하도록 하겠습니다.

 

 

같이공부합시다.

 

 


참조:

https://coffeewhale.com/packet-network3

https://kubernetes.io/ko/docs/concepts/services-networking/service/#externalname

https://dramasamy.medium.com/life-of-a-packet-in-kubernetes-part-3-dd881476da0f

반응형