pod-to-pod communications
🔹 파드 내 네트워크 통신 (Pod-to-Pod Communication)
쿠버네티스에서 파드는 기본적으로 동일한 네트워크를 공유하므로, 파드 간 네트워크 통신은 매우 중요한 개념입니다. 쿠버네티스는 각 파드에 고유한 IP 주소를 할당하고, 이를 기반으로 다른 파드와의 통신을 관리합니다. 이를 통해 컨테이너 간의 직접 통신이 가능하게 되며, **CNI (Container Network Interface)**를 통해 네트워크가 설정됩니다.
📌 파드 간 네트워크 통신의 원칙
1️⃣ 각 파드는 고유한 IP 주소를 가짐
- 쿠버네티스는 각 파드에 고유한 IP 주소를 할당합니다. 이 IP 주소는 클러스터 내에서 유일합니다. 파드는 네트워크를 공유하므로 다른 파드와 같은 네트워크 내에서 자유롭게 통신할 수 있습니다.
2️⃣ 파드 내 컨테이너는 localhost로 통신
- 같은 파드 내의 컨테이너들은 localhost를 통해 통신할 수 있습니다. 예를 들어, 파드 내에서 2개의 컨테이너가 있다면 같은 IP를 공유하고 서로 간의 통신은 로컬 네트워크로 처리됩니다.
3️⃣ 파드 간 통신
- 동일한 노드에 있는 파드 간의 통신은 로컬 네트워크 인터페이스를 통해 이루어지며, 다른 노드에 있는 파드와의 통신은 클러스터 네트워크를 통해 이루어집니다.
4️⃣ 파드 IP는 동적
- 파드의 IP 주소는 고정되지 않고 파드가 삭제되거나 다시 생성될 때마다 변경될 수 있습니다. 하지만 **서비스 (Service)**를 사용하면 파드 IP가 변경되더라도 일관된 Cluster IP를 통해 접근할 수 있습니다.
📌 파드 간 통신 예시
🔹 1. 파드 간 네트워크 통신 흐름
1️⃣ 파드 A에서 파드 B로의 요청을 보낸다고 가정합니다.
2️⃣ 쿠버네티스는 파드 A와 파드 B 간의 통신을 Pod-to-Pod 통신으로 처리합니다. 이때, 파드 B는 고유의 IP를 가지고 있기 때문에 파드 A는 IP 주소를 통해 파드 B에 직접 요청을 보냅니다.
🔹 2. 파드 간 IP 통신 예시
파드 A (IP:
10.244.1.2
)가 파드 B (IP:10.244.1.3
)에 HTTP 요청을 보냄curl http://10.244.1.3:80
파드 A에서 파드 B로 요청이 들어가면, CNI 플러그인 (예: Calico, Flannel)은 파드 간의 트래픽을 네트워크 규칙에 따라 라우팅합니다.
🔹 3. 동일한 노드 내 파드 간 통신
- 동일한 노드 내에 배치된 파드 간에는 로컬 네트워크 인터페이스를 통해 빠르게 통신할 수 있습니다.
🔹 4. 다른 노드에 있는 파드 간 통신
- 다른 노드에 있는 파드 간의 통신은 CNI 플러그인을 통해 클러스터 네트워크를 통해 전달됩니다. 이때, 노드 간의 라우팅이 필요합니다.
📌 파드 간 네트워크 구현 방식
🔹 1. CNI 플러그인 역할
- CNI 플러그인은 파드에 IP 주소를 할당하고, 파드 간의 네트워크 통신을 가능하게 합니다. 이를 통해 파드 간의 네트워크 연결, 라우팅, 정책 적용 등을 담당합니다.
🔹 2. 네트워크 네임스페이스
- 네트워크 네임스페이스는 파드 내에서의 네트워크 격리를 제공합니다. 파드마다 독립적인 네트워크 네임스페이스를 할당하여, 파드 간의 네트워크 통신을 가능하게 합니다.
📌 파드 내 컨테이너 간 통신
1️⃣ 파드 내 컨테이너 간 네트워크
- 파드 내에 여러 개의 컨테이너가 있을 경우, 같은 네트워크 네임스페이스를 공유하며 localhost로 서로 통신할 수 있습니다. 예를 들어, 파드 내의 A와 B 컨테이너는 **
localhost:port
**로 서로 통신합니다.
2️⃣ 예시:
- 컨테이너 A: 웹 서버 (80 포트)
- 컨테이너 B: 데이터베이스 클라이언트 (컨테이너 A에 접근)
컨테이너 B는 localhost:80
으로 컨테이너 A에 접근할 수 있습니다.
📌 서비스 (Service)를 통한 파드 간 통신
**서비스 (Service)**는 파드의 IP 주소 변경에 대응하여 일관된 접근점을 제공합니다. 서비스는 Cluster IP 또는 DNS 이름을 통해 동적인 파드 집합에 대한 접근을 가능하게 합니다.
🔹 서비스 예시
- 서비스는 파드들의 집합에 대한 고정된 IP를 제공하여, 파드 IP가 변경되더라도 서비스의 Cluster IP를 통해 안정적인 접근을 보장합니다.
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
🔹 서비스와 파드 간의 통신 흐름
1️⃣ 파드 A는 서비스의 Cluster IP를 통해 파드 B에 접근합니다.
2️⃣ 서비스는 파드 A의 요청을 적절한 파드 B로 라우팅합니다.
✅ 정리
✔ 파드 간 통신은 기본적으로 같은 네트워크 내에서 이루어짐.
✔ CNI 플러그인은 파드 간의 IP 할당, 라우팅 및 네트워크 연결을 관리함.
✔ 같은 파드 내 컨테이너들은 localhost를 사용하여 통신할 수 있음.
✔ 서비스를 통해 파드의 IP 변경에도 불구하고 일관된 접근을 보장.
🚀 파드 간 통신은 Kubernetes 클러스터 내에서 핵심적인 네트워크 동작을 관리하는 중요한 부분입니다!