Networking (Service Networking)
- 이번 장에서는 Certified Kubernetes Administrator (CKA) 을 준비하며 "Service Networking"에 대해서 자세하게 알아보도록 한다.
Service Networking
파드 네트워킹

- 각 노드에 브릿지 네트워크를 생성한다.
- 파드를 위한 네트워크 네임스페이스를 생성한다.
- 네임스페이스에 인터페이스를 연결한다.
- 노드 서브넷 내에서 파드에 IP 주소를 할당한다.
- 라우팅 또는 오버레이 기술을 통해 다른 노드의 파드와 통신한다.
서비스 네트워킹의 필요성
- 파드 간 직접 통신은 드물게 사용된다.
- 서비스를 통해 다른 파드에 호스팅된 서비스에 접근한다.
- 서비스는 파드의 IP 주소 및 이름을 추상화하여 제공한다.
서비스 유형
ClusterIP

- 클러스터 내부에서만 접근 가능한 서비스다.
- 서비스에 IP 주소 및 이름을 할당한다.
- 클러스터 내의 모든 파드에서 접근이 가능하다.
- 특정 노드에 바인딩되지 않으며, 클러스터 전체에 호스팅된다.
NodePort

- 클러스터 외부에서 접근 가능한 서비스다.
- ClusterIP와 동일하게 작동하며, 추가적으로 클러스터의 모든 노드에서 특정 포트를 통해 애플리케이션을 노출한다.
- 외부 사용자 및 애플리케이션이 서비스에 접근 가능하다.
서비스 네트워킹 작동 방식

- kubelet
- 각 쿠버네티스 노드에서 실행되는 프로세스다.
- kube-apiserver를 통해 클러스터의 변경 사항을 감지한다.
- 새로운 파드 생성 시 파드 생성 및 CNI 플러그인을 호출하여 파드 네트워킹을 설정한다.
- kube-proxy
- 각 쿠버네티스 노드에서 실행되는 컴포넌트다.
- kube-apiserver를 통해 클러스터 변경 사항을 감시한다.
- 새로운 서비스 생성 시 동작한다.
- 서비스는 각 노드에 생성되거나 할됭되지 않으며, 클러스터 전체의 개념이다.
- 서비스는 실제로 존재하지 않으며 가상의 객체다.
- 서비스를 위한 프로세스, 네임스페이스, 인터페이스는 없다.
- 서비스 IP 주소 할당
- 서비스 객체 생성 시 미리 정의된 범위에서 IP 주소가 할당된다.
- kube-proxy는 각 노드에서 서비스 IP 주소를 가져와 포워딩 규칙을 생성한다.
- 포워딩 규칙: "서비스 IP 주소로 들어오는 모든 트래픽은 파드 IP 주소로 전달"
- 파드는 클러스터의 모든 노드에서 접근이 가능하다.
- IP 및 포트 조합
- 서비스는 IP 주소와 포트 조합을 사용한다.
- 서비스 생성 또는 삭제 시 kube-proxy는 포워딩 규칙을 생성하거나 삭제한다.
kube-proxy의 작동 방식

- kube-proxy 모드: kube-proxy는 서비스 트래픽을 처리하기 위해 다양한 모드를 지원한다.
- userspace: kube-proxy가 각 서비스에 대한 포트를 수신하고 파드에 연결을 프록시한다.
- IPVS: IPVS 규칙을 생성하여 파드에 트래픽을 분산한다.
- iptables(기본값): iptables 규칙을 사용하여 트래픽을 포워딩 한다.
- proxy mode 옵션: kube-proxy 서비스 구성 시
proxy-mode
옵션을 사용하여 모드를 설정할 수 있다.- 설정하지 않으면 기본적으로 iptables 모드가 사용된다.
iptables를 사용한 서비스 네트워킹 규칙 생성

- 파드 및 서비스 생성: 파드(예: DB)를 노드에 배포하고 ClusterIP 유형의 서비스를 생성한다.
- 서비스 IP 주소 할당: 쿠버네티스는
service cluster IP range
옵션에 지정된 범위에서 서비스에 IP 주소를 할당한다. (기본값: 10.0.0.0/24, 예시: 10.96.0.0/12) - 파드 IP 주소 할당: 파드는
pod network CIDR range
옵션에 지정된 범위에서 IP 주소를 할당받는다. (예시: 10.244.0.0/16) - IP 주소 범위 중복 방지: 서비스 및 파드 IP 주소 범위는 중복되지 않아야 한다.

- iptables NAT 테이블 규칙 생성: kube-proxy는 iptables NAT 테이블에 규칙을 생성하여 서비스 IP 주소로 들어오는 트래픽을 파드 IP 주소로 포워딩한다.
- DNAT 규칙: DNAT(Destination Network Address Translation) 규칙을 사용하여 대상 주소 및 포트를 파드 IP 주소 및 포트로 변경한다.
- 서비스 이름 주석: kube-proxy가 생성한 모든 규칙에는 서비스 이름이 주석으로 포함된다.
- NodePort 서비스 규칙 생성: NodePort 유형의 서비스를 생성하면 kube-proxy는 모든 노드의 특정 포트로 들어오는 트래픽을 백엔드 파드로 포워딩하는 iptables 규칙을 생성한다.

- kube-proxy 로그 확인: kube-proxy 로그에서 iptables 규칙 생성 내용을 확인할 수 있다.
- 사용된 프록시 종류(iptables)
- 새 서비스 추가 시 로그 항목
- 로그 파일 위치 및 상세 수준: 로그 파일 위치는 설치 환경에 따라 다를 수 있으며, 로그 상세 수준을 조정해야 로그 항목을 확인할 수 있다.
핵심 개념
- kube-proxy: 서비스 트래픽 포워딩을 담당하는 쿠버네티스 컴포넌트다.
- iptables: Linux 방화벽 및 네트워크 주소 변환 도구다.
- DNAT(Destination Network Address Translation): 대상 주소 및 포트 변경이다.
- service cluster IP range: 서비스 IP 주소 할당 범위다.
- pod network CIDR range: 파드 IP 주소 할당 범위다.
- NodePort: 클러스터 외부에서 접근 가능한 서비스 유형이다.
추가 사항
- kube-proxy는 iptables 외에 userspace 및 IPVS 모드도 지원한다.
- 서비스 네트워킹 규칙은 iptables NAT 테이블에서 확인할 수 있다.
- kube-proxy 로그를 통해 서비스 네트워킹 관련 문제를 해결할 수 있다.
- 서비스 IP 주소 및 파드 IP 주소 범위는 중복되지 않도록 설정해야 한다.
참고한 강의
'Infrastructure > Kubernetes' 카테고리의 다른 글
[CKA] Networking (Ingress) (0) | 2025.03.12 |
---|---|
[CKA] Networking (ClusterDNS) (0) | 2025.03.12 |
[CKA] Networking (CNI) (0) | 2025.03.12 |
[CKA] Networking (Pod Networking) (0) | 2025.03.11 |
[CKA] Networking (Cluster Networking) (0) | 2025.03.11 |