GitHub

https://github.com/Choidongjun0830

클라우드

K8S 네트워킹

gogi masidda 2024. 10. 11. 01:45
  • 대부분은 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 내에서만 유효함.
  • K8S에서 Pod는 Network Namespace를 갖고 있다. 이 Network Namespace를 연결하려면 bridge를 쓰는 등 백그라운드 기능들이 필요하다. 
    • 내부적으로 NAT를 쓰지 않는다.
    • NAT 없이도 모든 컨테이너들은 다른 모든 컨테이너들과 통신이 가능하다. 
    • 클러스터 안에 있는 모든 요소들은 동일한 prefix를 갖도록 하여 NAT가 필요없게, 직접 통신이 가능하게 한다.
  • K8S의 네트워크는 기본적으로 FLAT한 구조이다. 
    • FLAT하는 것이란
      • 동일한 prefix를 공유하며 직접적으로 통신할 수 있는 구조
      • 라우팅이 필요하지 않거나 최소화
      • 동일한 네트워크 범위 내에서는 직접 통신 가능
    • K8S는 FLAT한 네트워크라는 것이란
      • 모든 Pod가 동일한 prefix를 가짐.
      • 동일한 prefix 내에서 고유한 IP 주소를 할당받고, NAT 없이 통신이 가능하다.
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