DevOps/Kubernetes

[K8S] k8s 정리 - (10) Kubernetes Service와 kube-proxy

yubi5050 2022. 9. 10. 03:38

이전 글에서는 Kubernetes의 Volume의 emptyDir, hostPath 개념과, PV/PVC 추상화 개념에 대해 알아보았습니다.

https://yubi5050.tistory.com/181

 

[K8S] k8s 정리 - (9) Kubernetes Volume (PV, PVC, emptyDir, hostPath)

이전 글에서는 Kubernetes Pod의 컨테이너 구성과 리소스 할당, 환경 변수 설정에 대해 알아보았다. https://yubi5050.tistory.com/180 [K8S] k8s 정리 - (8) Kubernetes Pod (Container 구성, 리소스, 환경변수)..

yubi5050.tistory.com

이번 글에서는 Kubernetes의 Service와 그 근간인 kube-proxy에 대해서 알아보려고 합니다.

 

Service란?

서비스란 Pod의 논리적 집합으로, 클러스터 외부/내부에서 Pod에 접근할 때 사용하는 리소스 타입 중 하나로, 재시작시마다 랜덤으로 IP가 지정되는 Pod의 고정 Endpoint 접근과, Loadbalcning 역할을 수행한다.

 

service 구조 (이미지 출처:https://yoonchang.tistory.com/49)

 

📌 Service의 특징

  • 외부에서 클러스터 내의 여러개의 Pod에 접근할 수 있는 하나의 IP를 제공
  • 들어오는 Traffic을 각 Pod로 포워딩 해주는 Proxy역할 (pod는 selector를 통해 결정)
  • 들어오는 Traffic을 로드 밸런싱 하여 Pod의 분산하여 처리
  • 클러스터 내에서 노드를 옮겨 다니며 동적으로 변하는 파드들에 고정적인 접근을 위한 방법
  • 파드가 클러스터 안 다른 위치로 옮겨지더라도 해당 파드와 통신 가능
  • Label Selectory를 통한 특정 Label을 가진 Pod 선택하여 서비스화

 

Service 타입

ClusterIP : Service의기본 타입으로 Cluster 내에서 해당 서비스 노출시 사용하는 방식

NodePort : 해당 서비스를 외부로 노출 시키고자 할 때 사용하는 방식

LoadBalancer : aws, gcp같은 클라우드 Loadbalancer를 이용하는 경우 사용 방식 (외부 IP 가진 로드밸런서 할당)

 

ClusterIP, NodePort, Loadbalancer 예시

 

Service와 Kube-proxy

kube-proxy는 Service를 만들시, ClusterIP나 Nodeport로 접근할 수 있게 실제 조작을 하는 컴포넌트이다.

 

📌 Kube-proxy의 역할

쿠버네티스의 노드마다 실행되어 클러스터 내부 ip로 연결하려는 요청을 적절한 파드로 전달

  • kube-proxy는 daemonset 형태로 존재하며, service 리소스 내부 구현을 담당
  • endpoint 연결을 위한 iptables를 구성
  • nodePort로의 접근과 Pod 연결을 구현 (iptables 구성)
  • kube-proxy가 네트워크를 관리하는 모드로는 userspace, iptables, IPVS 3가지 방법 존재

 

기본 userspace(왼쪽) vs 현재 iptables(오른쪽)

📌 userspace 모드

  • k8s 초기 버전에 사용됬던 방법
  • 서비스 클러스터 IP요청 => iptables 거쳐 kube-proxy 전달 => 서비스 cluter ip가 적절한 파드연결

 

📌 iptables 모드

  • kube-proxy가 iptables만 관리, 클라이언트 IP 요청 => iptables이 받아 적절한 파드에 직접 전달
  • 직접전달로 요청 처리 성능이 좋으나, 연결요청 실패시 재시도 x (readneiss probe 헬스체크 결합하여 사용)

 

📌 IPVS 모드

  • 기본적으로는 못쓰고 별도의 지원 모듈을 설정 후 사용 가능
  • 커널 공간 동작 및 데이터 구조 해시 테이블로 저장
  • 리눅스 커널에 있는 L4 로드 밸런싱 기술
  • 로드 밸런싱 알고리즘 여러가지 제공 (round-robin, least connection dstination hashing 등)

 

Kube Proxy는 Service에 대한 API 요청시 Iptables rule을 생성하고 Client로부터 요청을 수신 받는 역할 수행 

 

마무리

이번 글에서는 Kuberenetes의 Service와 그 근간인 kube-proxy에 대해 알아보았습니다. 다음 글에서는 Kuberenetes의 kubectl 명령어에 대해 정리해보도록 하겠습니다.

 

참고 문헌

 

https://coffeewhale.com/k8s/network/2019/05/11/k8s-network-02/