서비스, 로드 밸런싱, 네트워킹

서비스, 로드 밸런싱, 네트워킹 (services-networking)

출처: 쿠버네티스 공식 문서 — Services, Load Balancing, and Networking

쿠버네티스 네트워킹 뒤에 있는 개념과 리소스에 대한 문서예요.

쿠버네티스 네트워크 모델 (The Kubernetes network model)

쿠버네티스 네트워크 모델은 여러 조각으로 구성돼요:

  • 쿠버네티스 클러스터의 각 pod는 클러스터 전체에서 유일한 IP 주소를 가져요.
    • Pod는 자신만의 사설 네트워크 네임스페이스를 가지며, 이는 Pod 안의 모든 컨테이너가 공유해요. 같은 pod의 서로 다른 컨테이너에서 실행되는 프로세스는 localhost를 통해 서로 통신할 수 있어요.
  • pod 네트워크(클러스터 네트워크라고도 함)는 pod 사이의 통신을 처리해요. 의도적인 네트워크 분할(segmentation)이 없다면 다음을 보장해요:
    • 모든 pod는 같은 노드든 다른 노드든 모든 다른 pod와 통신할 수 있어요. Pod는 프록시나 주소 변환(NAT) 없이 서로 직접 통신할 수 있어요. Windows에서는 이 규칙이 host-network pod에는 적용되지 않아요.
    • 노드의 에이전트(시스템 데몬이나 kubelet 등)는 해당 노드의 모든 pod와 통신할 수 있어요.
  • Service API를 사용하면 하나 이상의 백엔드 pod로 구현되는 서비스에 안정적인(오래 지속되는) IP 주소나 호스트네임을 제공할 수 있어요. 서비스를 구성하는 개별 pod는 시간이 지남에 따라 바뀔 수 있죠.
    • 쿠버네티스는 Service를 현재 지원하는 pod에 대한 정보를 제공하는 EndpointSlice 오브젝트를 자동으로 관리해요.
    • 서비스 프록시 구현체는 Service와 EndpointSlice 오브젝트 집합을 주시하고, 운영체제나 클라우드 제공자 API를 사용해 패킷을 가로채거나 다시 쓰는 방식으로 데이터 플레인을 프로그래밍해 서비스 트래픽을 백엔드로 라우팅해요.
  • Gateway API(또는 이전 버전인 Ingress)는 클러스터 외부에 있는 클라이언트가 Service에 접근할 수 있게 해줘요.
    • 지원되는 클라우드 제공자를 쓸 때 Service API의 type: LoadBalancer로 클러스터 인그레스를 위한 더 단순하지만 설정 폭이 좁은 메커니즘을 이용할 수 있어요.
  • NetworkPolicy는 pod 사이, 또는 pod와 외부 세계 사이의 트래픽을 제어할 수 있게 하는 쿠버네티스 내장 API예요.

이런 NAT/프록시 모델은 쿠버네티스에는 필요하지 않아요. 쿠버네티스의 모델은 포트 할당, 이름 지정, 서비스 디스커버리, 로드 밸런싱, 애플리케이션 구성, 마이그레이션 관점에서 pod를 VM이나 물리 호스트처럼 취급할 수 있다는 거예요.

  • Pod 네트워크 네임스페이스 설정은 CRI (Container Runtime Interface)를 구현하는 시스템 수준 소프트웨어가 처리해요.
  • pod 네트워크 자체는 pod 네트워크 구현체가 관리해요. Linux에서 대부분의 컨테이너 런타임은 pod 네트워크 구현체와 상호작용하기 위해 CNI (Container Networking Interface) 플러그인(appc/CNI 스펙을 따르는 네트워크 플러그인의 한 종류)을 사용해요. 그래서 이런 구현체를 흔히 CNI 플러그인이라고 불러요.
  • 쿠버네티스는 kube-proxy라고 불리는 서비스 프록시의 기본 구현체를 제공하지만, 일부 pod 네트워크 구현체는 나머지 구현과 더 밀접하게 통합된 자체 서비스 프록시를 사용하기도 해요.
  • NetworkPolicy는 일반적으로 pod 네트워크 구현체에서도 구현돼요. (일부 더 단순한 pod 네트워크 구현체는 NetworkPolicy를 구현하지 않거나, 관리자가 NetworkPolicy 지원 없이 pod 네트워크를 구성하기로 선택할 수 있어요. 이런 경우 API는 여전히 존재하지만 효과가 없어요.)
  • Gateway API 구현체는 많이 있어요. 일부는 특정 클라우드 환경에 특화되어 있고, 일부는 "베어 메탈" 환경에 더 초점을 맞추며, 또 다른 것들은 더 일반적이에요.

더 알아보기 (What's next)

Connecting Applications with Services 튜토리얼은 실습 예제로 Services와 쿠버네티스 네트워킹에 대해 배울 수 있게 해줘요.

Cluster Networking은 클러스터 네트워킹을 설정하는 방법을 설명하고, 관련 기술의 개요도 제공해요.

구체적인 네트워킹 개념에 대해 알아보려면 다음을 참고하세요:

  • Service — 하나의 외부 지향 엔드포인트 뒤에 애플리케이션 노출하기
  • Ingress — URI, 호스트네임, 경로를 사용한 프로토콜 인지형 HTTP/HTTPS 라우팅
  • Gateway API — 동적 인프라 프로비저닝과 고급 트래픽 라우팅
  • Network Policies — IP 주소 또는 포트 수준(OSI 3·4계층)에서 트래픽 흐름 제어하기