YoungSoo

Kubernetes 서비스 본문

Cloud/Kubernetes

Kubernetes 서비스

YoungSooSoo 2023. 3. 21. 09:25

 

서비스의 개념

서비스는 동적으로 변하는 파드들에 고정적으로 접근할 때 사용하는 방법입니다.

서비스 타입

  • ClusterIP : 기본 서비스 타입이며 쿠버네티스 클러스터 안에서만 사용할 수 있습니다. 클러스터 안 노드나 파드에서는 클러스터 IP를 이용해서 서비스에 연결된 파드에 접근합니다. 클러스터 외부에서는 이용할 수 없습니다.
  • NodePort : 서비스 하나에 모든 노드의 지정된 포트를 할당합니다. 클러스터 안 뿐만 아니라 외부에서도 접근할 수 있습니다. 특이한 점은 파드가 하나만 실행되었을 때 다른 파드에서 접속하면 실행되어있는 파드로 연결한다는 것입니다.
  • LoadBalancer : AWS, GCP 등 쿠버네티스를 지원하는 로드밸런서 장비를 이용합니다. 클라우드에서 제공하는 로드밸런서와 파드를 연결한 후 해당 로드밸런서의 IP를 이용해 클러스터 외부에서 파드에 접근할 수 있도록 해줍니다.
  • ExternalName : 서비스를 .spec.externalName 필드에 설정한 값과 연결합니다. 클러스터 안에서 외부에 접근할 때 주로 사용합니다.

헤드리스 서비스

.spec/clusterIP 필드 값을 None으로 설정하면 클러스터 IP가 없는 서비스를 만들 수 있습니다. 이런 서비스를 헤드리스 서비스라고 하는데 로드밸런싱이 필요 없거나 단일 서비스 IP가 필요 없을 때 사용합니다.

kube-proxy

쿠버네티스에서 서비스를 만들었을 때 클러스터 IP나 노드 포트로 접근할 수 있게 만들어 실제 조작을 하는 컴포넌트입니다.

네트워크 관리법

  • userspace 모드 : 클라이언트에서 서비스의 클러스터 IP를 통해 어떤 요청을 하면 iptables를 거쳐서 kube-proxy가 요청을 받습니다. 그리고 적절한 파드로 연결해주는데 이때 라운드 로빈 방식(각 파드에 요청을 골고루 분배하여 부하 분산을 하기 위한 방식으로 사용)을 사용합니다.

  • iptables 모드(기본 관리 모드) : 직접 클라이언트에서 트래픽을 받지 않고 iptables를 관리하는 역할만 하고 성능이 좋습니다. userspace 모드는 파드 하나로의 연결 요청이 실패하면 자동으로 다른 파드에 연결을 재시도 하지만 iptables 모드에서는 그냥 요청이 실패합니다.

  • IPVS 모드 : L4 로드밸런싱 기술. 리눅스 커널 안 네트워크 관련 프레임워크인 넷필터에 포함되어 있으며, IPVS 커널 모듈이 노드에 설치되어야 합니다.

커널 공간에서 동작하고 데이터 구조를 해시 테이블로 저장하기 때문에 iptables 모드보다 빠르고 좋은 성능을 냅니다. 또한 더 많은 로드밸런싱 알고리즘이 있습니다.

  • rr(round-robin) : 프로세스 사이에 우선순위를 두지 않고 순서와 시간 단위로 CPU를 할당합니다.
  • lc(least connection) : 접속 개수가 가장 적은 서버를 선택합니다.
  • dh(destination hashing) : 목적지 IP 주소로 해시값을 계산해 분산할 실제 서버를 선택합니다.
  • sh(source hashing) : 출발지 IP 주소로 해시값을 계산해 분산할 실제 서버를 선택합니다.
  • sed(shortest expected delay) : 응답 속도가 가장 빠른 서버를 선택합니다.
  • nq(never queue) : sed와 비슷하지만 활성화된 접속 개수가 0인 서버를 가장 먼저 선택합니다.

'Cloud > Kubernetes' 카테고리의 다른 글

[Kubernetes] Deployment를 왜 선택해야하지?  (0) 2023.04.30
Kubernetes 컨트롤러  (0) 2023.03.19
Kubernetes Pod  (0) 2023.03.18
Kubernetes 아키텍처  (0) 2023.03.17
Kubernetes로 컨테이너 실행하기  (0) 2023.03.16