- 대부분은 Public 주소
- Private주소 영역
- [10.0.0.0 ~ 10.255.255.255]
- [172.16.0.0 ~ 172.31.255.255]
- [192.168.0.0 ~ 192.168.255.255]
- 내부에서는 Private IP 주소를 사용하고, 외부에서는 Public IP 주소를 사용한다.
- Public IP 주소 + Port 번호로 Private 주소를 구별한다. (NAT를 통해)
Network Namespace
- 각 컨테이너가 격리된 네트워크 환경을 갖게 한다.
- 각 네트워크 네임스페이스는 네트워크 스택을 갖고 있다.
- 동일한 호스트 머신 내에서 컨테이너들이 서로 다른 네트워크 환경에서 동작할 수 있게 한다.
- mysql container와 nginx container가 각각 다른 Network Namespace에 속해 있다.
- 각 컨테이너는 자신만의 네트워크 인터페이스(eth0)를 이용해 통신한다.
- 이 네트워크 인터페이스는 다른 네임스페이스와 완전히 격리되어 있다.
- 네트워크 네임스페이스 간의 통신은 veth(virtual ethernet)페어와 bridge가 중요하다.
- veth 페어
- 가상 네트워크 인터페이스 쌍. 두 네임스페이스 간의 통신을 가능하게 한다.
- 하나의 veth가 네트워크 네임스페이스에 연결되고, 다른 veth는 호스트나 다른 네트워크 네임스페이스에 연결된다.
- bridge
- veth를 서로 연결하여 두 네트워크 네임스페이스 간의 통신을 가능하게 한다.
- 실제 네트워크 스위치처럼 동작하고 패킷을 전달해준다.
- bridge는 컨테이너들이 같은 서브넷에서 동작할 수 있게 해주며, 서로 다른 네트워크 네임스페이스에 있는 컨테이너들 간의 통신을 가능하게 해준다.
- 동일한 prefix는 노드 간의 통신에 도움을 준다.
- 동일한 대역 내에서는 NAT가 필요 없다. (NAT는 서로 다른 네트워크 대역 간의 주소 변환이라서)
- 노드 1에서 노드 2로 패킷을 보낼 때는 라우팅 테이블을 참고해서 한다.
- bridge는 노드 내에서의 통신에 도움을 준다.
- 하나의 Node 내에서만 유효함.
- veth 페어
- K8S에서 Pod는 Network Namespace를 갖고 있다. 이 Network Namespace를 연결하려면 bridge를 쓰는 등 백그라운드 기능들이 필요하다.
- 내부적으로 NAT를 쓰지 않는다.
- NAT 없이도 모든 컨테이너들은 다른 모든 컨테이너들과 통신이 가능하다.
- 클러스터 안에 있는 모든 요소들은 동일한 prefix를 갖도록 하여 NAT가 필요없게, 직접 통신이 가능하게 한다.
- K8S의 네트워크는 기본적으로 FLAT한 구조이다.
- FLAT하는 것이란
- 동일한 prefix를 공유하며 직접적으로 통신할 수 있는 구조
- 라우팅이 필요하지 않거나 최소화
- 동일한 네트워크 범위 내에서는 직접 통신 가능
- K8S는 FLAT한 네트워크라는 것이란
- 모든 Pod가 동일한 prefix를 가짐.
- 동일한 prefix 내에서 고유한 IP 주소를 할당받고, NAT 없이 통신이 가능하다.
- FLAT하는 것이란
728x90
'클라우드' 카테고리의 다른 글
Kubernetes Principles (0) | 2024.10.15 |
---|---|
Kubernetes Volumes (0) | 2024.10.12 |
Deployment 리소스 생성시 흐름 (0) | 2024.10.10 |
Kubernetes Basic - 2 (2) | 2024.10.08 |
Restful API (1) | 2024.10.06 |