ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Docker (5) - 도커 네트워크
    Infra/Docker 2024. 1. 25. 15:46

     

    1. 네트워크 기본

     

    - 네트워크는 기계와 기계사이를 물리적 케이블로 연결 

    - 집과 도로의 관계 집과 집사이를 도로를 통해 연결하듯 기계들이 인터넷 선으로 연결 

    - 네트워크는 ip주소로 장치의 주소를 관리한다. (공인 ip와 사설 ip로 나뉜다)

     

    출처: 쉬운도커(데브위키) -인프런

     

    하나의 공인ip는 다시 내부의 사설 ip로 나뉜다. 이와 같이 ip주소를 나누기 위해선

        네트워크 장비가 필요하다. (라우터,공유기 등)

    - 공유기기를 보면,  WAN포트가 공인 ip가 들어오는 곳이고, 나머지 LAN은 사설 ip를 구성하는 포트이다.

    - 각 장비는 네트워크 인터페이스를 가지고 있다. 네트워크 인터페이스는 인터넷에 연결하기 위해 컴퓨터에 장착하는 부품 중 하나이다. (NIC,LAN카드)

    - 네트워크 인터페이스는 ip를 가질 수 있다. 네트워크 인터페이스가 ip를 할당받고 연결되기 위해선 유선 LAN선 혹은 무선 WIFI와 같이 네트워크 워크 장비와 연결되어 있어야한다.

     

    2. 포트포워딩과 NAT

     

    - 네트워크 통신은 아웃바운드와 인바운드로 나눌 수 있다. 

    - 아웃바운드는 내 서버(내가 클라이언트임)에서 출발한 요청으로, 요청을 보내고 다시 응답을 받는 흐름이다.

    - 인바운드는 다른 서버 혹은 클라이언트에서 출발한 흐름으로, 외부에서 요청이 들어오면 응답을 보내야한다.

     

    2.1 NAT 

    출처https://www.stevenjlee.net/  - NAT 테이블

    - 보통 아웃바운드에서 발생한다.

    - NAT테이블은 사설 ip를 공인 ip로 변환하는 기술을 의미하며, 공인포트번호를 통해 사설 ip를 구분한다.

       예시)

        -> 사설망 내의 특정 기기가 외부로 요청을 보낸다 (사설 ip 10.0.0.1) -> 사설 ip로는 외부 네트워크와 통신할 수 없다.

        -> 공인 ip로 변환해야한다. (150.150.0.1)

        -> 이때 1개의 공인 ip에는 여러 사설 ip가 연결되어 있음으로, 이를 구분할 포트번호를 붙인다 (70001) 

        -> 10.0.0.1:6000 -> 150.150.0.1:70001로 변환되어 외부로 요청이 나감 

        -> 다시 150.150.0.1:70001로 응답이 오고 NAT를 통해 사설 ip로 변환된다.

      

    - NAT에서 공인 포트 번호는 랜덤하게 관리한다. (필요시 고정포트를 사용해라)

     

    2.2 포트포워딩 

     

    출처: 쉬운도커(데브위키) -인프런

     

    - 포트포워딩은 인바운드 상황에서 자주 발생한다.

    - 외부에서 공인 ip로 보낸 요청을 사설 ip와 포트로 연결해주는 것이다.

    - NAT는 특별히 설정해주지 않아도 가능하지만, 포트포워딩은 어떤 사설 ip의 포트를 개방할 것인지 직접 설정해야한다.

     

    3. DNS

     

    출처: 쉬운도커(데브위키) -인프런

     

    - DNS서버는 ip주소를 도메인명으로 바꿔주는 역할을 수행한다.

    - 외부 DNS서버사설 DNS서버로 나눌 수 있다.

    - 외부 DNS서버는 공공 전화번호부, 사설  DNS서버는 회사 내 사설 연랑막이라고 생각해보자

    - 즉, 사설 DNS특정 사설 네트워크 내부에서만 사용하는 도메인 명을 엮어둔 테이블이다.

    - 외부 DNS서버는 온라인 상에서 서로 연동되고 업데이트된다.

    - 사설 DNS 서버는 내부의 등록된 정보만 받아서 사용하도록 할 수도 있고, 외부 DNS서버와 연동할 수도 있다.

     

    4. 도커 네트워크 

     

    출처: 쉬운도커(데브위키) -인프런

     

    - 사설 ip내에 다시 사설 네트워크를 구성하는 방식으로 

    - 도커를 실행하면 도커는 가상의 네트워크인 브릿지 네트워크가상의 도커 공유기 (도커제로)를 만들어낸다.

    - 가상의 네트워크 도커제로를 도커에선 브릿지라고 부른다.

    - 브릿지는 가상의 ip주소 하나 할당 받는다. (게이트 웨이는 172.17.0.1번)

    - 브릿지컨테이너에 사설 ip를 부여한다. 

    - 이와 같이 가상의 논리적 네트워크 구성을 SDN이라한다.

       

       -> 컨테이너간 통신 : 브릿지를 통해 LAN에서 통신과 유사하다 

                                        외부 네트워크로 나가는 것이 아니라, 사설 네트워크 안 통신이다.

                                        특별한 제약사항이 크게 없다.

     

        -> 외부 네트워크 간 통신 :  공인ip <-> NAT/포트포워딩 <-> 사설ip  <-> NAT/포트포워딩 <-> 도커네트워크 필요 

     

    * 도커는 여러 브릿지 네트워크를 만들 수 있다. (하나의 브릿지가 하나의 사설 네트워크라고 생각하면 좋다)

     

    출처: 쉬운도커(데브위키) -인프런

     

    - 물리적 인터페이스에 LAN 연결하 듯 pc에 도커를 설치 실행하면 -> 도커는 가상의 네트워크 인터페이스 생성

    - 가상의 네트워크 인터페이스 host os 위에서 생성됨 (도커제로와 같은 브릿지에 먼저 생김)

    - 이제 컨테이너를 실행할 때 마다 Veth라는 접두어의 가상 네트워크 인터페이스 만들어진다.

    - 이제 host os에서 veth의 인터페이스로 신호를 보내면, 해당 인터페이스와 연결된 컨테이너로 신호가 들어간다.

    - 이런 과정에서 내부적으로 iptables가 사용됨 

         >iptables: host os의 소프트웨어이다. 가상 네트워크간 통신을 어케해야하는 적혀있는 테이블

                         Docker가 컨테이너 추가시마다 iptables 규칙을 수정하여 Veth인터페이스의 트래픽 제어한다.

     

     

    * 같은 브릿지 네트워크 내에서는 별도의 설정 없이 통신 가능하다

     

    4.1 도커 네트워크 생성

    출처: 쉬운도커(데브위키) -인프런

     

    - 도커 생성시 기본 브릿지 네트워크 하나 있다.

    docker network create --driver birdge --subnet 10.0.0.0/24 --gatway 10.0.0.1 second-bridge

     

    - 위와 같은 명령어로 네트워크를 생성할 수 있다. (seconde-bridge라는 이름의 네트워크)

    - 이때 subnet은 /24는 앞에 8비트씩 3개는 네트워크 주소를 가리키는 숫자고, 나머지 8비트 한개가 네트워크에

       엔드포인트(컴퓨터 수)  갯수라는걸 표현한 식이다.

    - 컨테이너는 일단 같은 브릿지 혹은 host 사이에서 응답 및 요청이 자유롭고, 브릿지가 다른 컨테이너간 통신은 

      그리 자유롭지 않다! (아마 host를 한번 거쳐서 통신해야할 듯!)

    - HOST OS:GUEST OS간 포트포워딩은 아래와 같다 

    docker run -p HosOS의 포트: 컨테이너의 포트 
    
    //hostOS로의 네트워크 접근을 컨테이너로 포트포워딩

     

    출처: 쉬운도커(데브위키) -인프런

     

    * 포트 포워딩시 주의점컨테이너 내부 어플리케이션이 사용하지 않는 포트 지정시 애플리케이션이 작동하지 않는다.

      ex) 톰캣서버 8080으로 사용하기로하고, 배포파일 만든 후에 컨테이너 포트포워딩을 8001로 설정하면 작동 안한다.

     

    4.2 도커 네트워크의DNS

     

    출처: 쉬운도커(데브위키) -인프런

     

    - 기본 bridge 외에 네트워크를 새로운 네트워크를 조성해야 내부 DNS를 사용할 수 있다.

    - 도메인 명은 컨테이너 이름으로 자동 저장된다. 따라서 같은 네트워크 간 컨테이너 사이에 통신은 기본적으로 

    컨테이너 이름으로 통신 가능하다.  (외부 DNS와도 이미 연동되어 있다)

     

     

    5. 도커 네트워크 드라이버 종류

     

    1. 브릿지 네트워크 : 도커 브릿지를 활용해 컨테이너간 통신. NAT 및 포트포워딩 기술을 활용해 외부 통신 지원

     

    2. 호스트 네트워크 : 호스트의 네트워크를 공유, 모든 컨테이너는 호스트 머신과 동일한 IP 사용, 포트 중복 불가능

     

    3. 오버레이 네트워크: 쿠버네티스에서 사용, 호스트 머신이 다수일 때 네트워크 관리 기술  

     

    4. Macvaln 네트워크: 컨테이너에 MAC주소를 할당하여 물리 네트워크 인터페이스에 직접 연결

     

     

    참고자료:

    https://www.inflearn.com/course/%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%A5%BC-%EC%9C%84%ED%95%9C-%EC%89%AC%EC%9A%B4-%EB%8F%84%EC%BB%A4/dashboard

     

    [2024 NEW] 개발자를 위한 쉬운 도커 강의 - 인프런

    현업 개발자가 도커를 사용한 경험을 녹여낸 새로운 커리큘럼으로 기존 교재 및 강의와 차별된 강의를 제공합니다. 단순한 명령어 사용법이 아닌 도커를 왜 사용해야하는지 대한 근본적인 질문

    www.inflearn.com

     

    'Infra > Docker' 카테고리의 다른 글

    Docker (6) - 도커 볼륨  (0) 2024.01.25
    Docker (3) - 이미지 빌드  (0) 2024.01.24
    Docker(4) - 레지스트리  (0) 2024.01.24
    Docker (2) - 이미지와 컨테이너  (0) 2024.01.24
    Docker (1) - 가상화 기술  (0) 2024.01.24
Designed by Tistory.