728x90
반응형
10/23(수) 필기 내용 중 - 쿠버네티스 네트워크의 기본 구조와 파드 간 통신이 어떻게 이루어지는지
Kubernetes 통신의 특징
- 파드와 호스트의 네트워크 차이: 파드는 가상 네트워크(veth)를 사용하고, 호스트는 물리 네트워크(eth)를 사용한다.
- 같은 노드 내 통신: 같은 노드 내의 파드끼리는 직접 통신이 가능하지만, 다른 노드의 파드와 통신하려면 CNI 플러그인이 필요하다.
- 다수 노드 간 통신: 오버레이 네트워크를 통해 서로 다른 노드의 파드 간 통신이 가능하며, 각 노드에서 가상 네트워크가 생성된다.
1. Docker로 생성된 컨테이너의 기본적인 네트워크 동작 구조
- 같은 노드에서 각 컨테이너 간의 통신은 가상 네트워크 인터페이스를 통해서 가능하다.
- 각 컨테이너는 veth라는 가상 네트워크 인터페이스를 고유하게 가지며, 각각의 veth IP 주소 값으로 통신할 수 있다.
- eth0: 노드가 사용하는 물리 네트워크
- veth0: 파드가 사용하는 가상의 네트워크
2. Kubernetes Pod 내의 컨테이너 끼리의 통신
- 같은 파드에 포함된 컨테이너는 동일한 IP를 공유하고, 포트 번호로 통신을 구분한다.
- 위 그림에서 두 개의 컨테이너(container 1,2) 는 모두 veth0 라는 동일한 네트워크를 사용한다. veth0 안에서 각 컨테이너는 고유한 port 번호로 서로를 구분한다.
- 이처럼 파드 내에서 컨테이너는 각자 고유한 port 번호를 사용한다.
- 하나의 파드가 만들어지면 가상의 네트워크(veth)가 만들어지고, 브릿지가 생성된다. 이 브릿지는 노드의 실제 네트워크 인터페이스 카드(NIC)와 연결된다.
3. Pod와 Pod 간의 통신
3-1. 단일 노드(Single Node)에서 파드 간 통신
- 단일 노드에 있는 파드들은 같은 네트워크 대역(veth)를 공유하기 때문에 브릿지를 이용해서 통신할 수 있다.
- 각 파드는 kubnet 혹은 CNI로 구성된 네트워크 인터페이스를 통해 고유한 IP주소로 통신한다.
3-2. 다수 노드(Multi Node)에서 파드 간 통신
- 각 노드에서는 노드 별로 가상의 네트워크를 생성하기 때문에 서로 다른 노드 간에 동일한 IP를 가질 수 있다
- 이 때는 오버레이 네트워크를 이용해서 통신하여 클러스터로 묶인 모든 노드에 있는 파드 간 통신이 가능하다.
- 오버레이 네트워크: 노드에서 사용하는 물리적인 네트워크 위에 가상의 네트워크를 구성한다.
- 위의 그림과 같이, 여러 개의 노드 사이에 각각 다른 노드에 존재하는 Pod가 서로 통신하려면 라우터를 거쳐서 통신해야 한다.
4. 파드와 서비스 간 통신
- 서비스의 IP: 서비스는 고유 IP를 가지며, 파드와는 다른 IP 대역을 사용한다. 클러스터 DNS 서버를 통해 서비스 이름을 IP로 변환하고, 이를 이용해 파드 간 통신을 처리한다.
- kube-proxy 역할: kube-proxy가 패킷을 포워딩하며, netfilter와 iptables를 이용해 서비스 IP를 실제 파드의 IP로 변환하여 통신을 수행한다.
5. 외부와 서비스 간의 통신
- NodePort: 노드 IP에 포트를 붙여서 외부에 노출시키는 것
- Load Balancer: 로드밸런서 IP를 이용해서 클러스터 외부에서 파드에 접근할 수 있도록 해주는 기능
- Ingress: 클러스터 외부에서 내부로 접근하는 요청을 어떻게 처리할 것인지에 관한 규칙의 모음이고 실제로 동작시키는 것은 Ingress Controller
728x90
반응형
'Kubernetes' 카테고리의 다른 글
[Kubernetes] ReplicaSet을 이용한 Pods 배포 (5) | 2024.10.25 |
---|---|
[Kubernetes] Deployment를 이용한 Pod 배포 - Deployment와 Pods의 차이점 (0) | 2024.10.24 |
[Kubernetes] 쿠버네티스 서비스: Cluster IP, NodePort, Load Balancer (0) | 2024.10.24 |
[Kubernetes] 쿠버네티스 컨트롤러: Deployment, ReplicaSet, Job, CronJob, DaemonSet (5) | 2024.10.23 |
[Kubernetes] 쿠버네티스 구성요소: 클러스터, 노드, 파드, 컨테이너 (2) | 2024.10.23 |