본문 바로가기
Kubernetes

[Kubernetes] 쿠버네티스 네트워크 통신 구조

by sum_mit45 2024. 10. 24.
728x90
반응형
10/23(수) 필기 내용 중 - 쿠버네티스 네트워크의 기본 구조와 파드 간 통신이 어떻게 이루어지는지

Kubernetes 통신의 특징

  1. 파드와 호스트의 네트워크 차이: 파드가상 네트워크(veth)를 사용하고, 호스트물리 네트워크(eth)를 사용한다.
  2. 같은 노드 내 통신: 같은 노드 내의 파드끼리는 직접 통신이 가능하지만, 다른 노드의 파드와 통신하려면 CNI 플러그인이 필요하다.
  3. 다수 노드 간 통신: 오버레이 네트워크를 통해 서로 다른 노드의 파드 간 통신이 가능하며, 각 노드에서 가상 네트워크가 생성된다.

1. Docker로 생성된 컨테이너의 기본적인 네트워크 동작 구조

출처: https://medium.com/finda-tech/kubernetes-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%A0%95%EB%A6%AC-fccd4fd0ae6

 

  • 같은 노드에서 각 컨테이너 간의 통신은 가상 네트워크 인터페이스를 통해서 가능하다. 
  • 각 컨테이너는 veth라는 가상 네트워크 인터페이스를 고유하게 가지며, 각각의 veth IP 주소 값으로 통신할 수 있다. 
    • eth0: 노드가 사용하는 물리 네트워크
    • veth0: 파드가 사용하는 가상의 네트워크

2. Kubernetes Pod 내의 컨테이너 끼리의 통신

출처: https://medium.com/finda-tech/kubernetes-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%A0%95%EB%A6%AC-fccd4fd0ae6

 

  • 같은 파드에 포함된 컨테이너 동일한 IP를 공유하고, 포트 번호로 통신을 구분한다.
  • 위 그림에서 두 개의 컨테이너(container 1,2) 는 모두 veth0 라는 동일한 네트워크를 사용한다. veth0 안에서 각 컨테이너는 고유한 port 번호로 서로를 구분한다.
  • 이처럼 파드 내에서 컨테이너는 각자 고유한 port 번호를 사용한다. 
  • 하나의 파드가 만들어지면 가상의 네트워크(veth)가 만들어지고, 브릿지가 생성된다. 이 브릿지는 노드의 실제 네트워크 인터페이스 카드(NIC)와 연결된다. 

3. Pod와 Pod 간의 통신

3-1. 단일 노드(Single Node)에서 파드 간 통신

출처: https://medium.com/finda-tech/kubernetes-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%A0%95%EB%A6%AC-fccd4fd0ae6 다

  • 단일 노드에 있는 파드들은 같은 네트워크 대역(veth)를 공유하기 때문에 브릿지를 이용해서 통신할 수 있다. 
  • 각 파드는 kubnet 혹은 CNI로 구성된 네트워크 인터페이스를 통해 고유한 IP주소로 통신한다. 

3-2. 다수 노드(Multi Node)에서 파드 간 통신

출처: https://medium.com/finda-tech/kubernetes-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%A0%95%EB%A6%AC-fccd4fd0ae6

 

  • 각 노드에서는 노드 별로 가상의 네트워크를 생성하기 때문에 서로 다른 노드 간에 동일한 IP를 가질 수 있
  • 이 때는 오버레이 네트워크를 이용해서 통신하여 클러스터로 묶인 모든 노드에 있는 파드 간 통신이 가능하다.
    • 오버레이 네트워크: 노드에서 사용하는 물리적인 네트워크 위에 가상의 네트워크를 구성한다. 
  • 위의 그림과 같이, 여러 개의 노드 사이에 각각 다른 노드에 존재하는 Pod가 서로 통신하려면 라우터를 거쳐서 통신해야 한다. 

4. 파드와 서비스 간 통신

  1. 서비스의 IP: 서비스는 고유 IP를 가지며, 파드와는 다른 IP 대역을 사용한다. 클러스터 DNS 서버를 통해 서비스 이름을 IP로 변환하고, 이를 이용해 파드 간 통신을 처리한다.
  2. kube-proxy 역할: kube-proxy가 패킷을 포워딩하며, netfilteriptables를 이용해 서비스 IP를 실제 파드의 IP로 변환하여 통신을 수행한다.

5. 외부와 서비스 간의 통신

  • NodePort: 노드 IP에 포트를 붙여서 외부에 노출시키는 것
  • Load Balancer: 로드밸런서 IP를 이용해서 클러스터 외부에서 파드에 접근할 수 있도록 해주는 기능
  • Ingress: 클러스터 외부에서 내부로 접근하는 요청을 어떻게 처리할 것인지에 관한 규칙의 모음이고 실제로 동작시키는 것은 Ingress Controller
728x90
반응형