Edit Files
Login Register

libnetwork

http://github.com/docker/libnetwork

libnetwork 는 docker 의 network 를 책임지고 있는 component이다. docker에서는 network를 일종의 추상화된 레이어로 바라보고 실질적인 할당은 libnetwork에서 담당하는 식이다. 다만 swarm mode에서는 libnetwork 뿐만 아니라 swarmkit도 network에 관여 하기 때문에 조금더 복잡하다.

개념/설계

https://github.com/docker/libnetwork/blob/master/docs/design.md

개념

  • Sandbox
    • linux container, 격리된 네트워크 sendbox를 의미한다.
    • 설계상 반드시 namspace로 구현되어야 하는 것은 아니기 떄문에 별도의 추상개체를 둔것이다.
  • Endpoint
    • linux의 Interface에 대응 되는 논리적 객체이다.
    • endpoint는 단 하나의 network에 포함되고 단 하나의 sand box에만 붙을수 있습니다.
    • 실질적으로는 veth pair로 구현될수도 있고, macvlan으로 구현될수도 있다.
  • Network
    • 여러개의 container가 서로 통신을 할수 있는 가상의 network를 의미한다. 따라서 같은 docker network를 사용해야 container간에 통신이 가능하고, discover도 가능하다.
    • 구현체는 linux의 bridge나 VLAN, 혹은 VPN 같은 것이 될수도 있다.

설계

  • NetworkController
    • libnetwork 에 대한 facade.
    • 되도록 간결한 API를 제공하는데에 목적이 있다.
  • Driver
    • 실질적인 구현체
    • 논리적인 개념을 실제적으로 구현하는 것이다.
    • mac, IP를 할당하고 linux interface를 제어한다.
    • docker plugin으로 확장 가능하게 설계 되어 있다.
  • Network
    • 위의 개념을 그대로 반영한 객체 사실 NetworkController는 Network 객체를 다루는 entry point 이다.
    • 실질적은 일은 driver에서 하지만, 필요한 data는 Network 가 가지게 된다.
    • scope가 두가지 존재한다.
      • local scope는 한 호스트 상에서 동작한다.
      • global scope는 여러호스트에 걸처서 동작한다.
  • Endpoint
    • 위의 개념을 그대로 구현한것이다.
    • 할당된 IP와 mac 주소등의 정보가 이 객체에 보관된다.
    • container 생성할때는 이 Endpoint를 참조하게 된다.
  • Sandbox
    • Endpoint의 정보를 바탕으로 실제로 네트워크를 동작하게 만든다. IP, Mac을 셋팅하고 컨테이너의 route 정보를 설정하며, DNS 설정도 셋팅한다. 즉 컨테이너 입장에서 보이는 네트워크 인터페이스이다.