네트워크 기본
전세계의 전자기기들은 물리적인 인터넷 선으로 연결되어 있고, 이 통신망이 네트워크이다.
컴퓨터가 인터넷에 연결될 때 고유한 IP주소를 할당받고, 이 주소로 서로에게 네트워크 신호를 보낼 수 있다.
IP주소는 외부에서 사용되는 공인IP가 있고, 이를 공유기나 라우터에 연결하여 내부에서 사용되는 여러개의 사설IP가 있다.
네트워크 인터페이스는 인터넷에 연결하기 위해서 컴퓨터에 장착하는 부품이다.
네트워크 인터페이스는 무선으로 와이파이에 연결하거나, 유선으로 랜선에 연결하여 IP를 할당받는다.
또한 한 IP주소 안에 여러 서버가 올라가있다면, 각 서버가 지정한 포트번호로 접근할 수 있다.OutBound, InBound
공인IP는 외부에서 IP주소로 찾아갈 수 있지만, 사내IP는 내부에서만 사용되기 때문에 외부에서 찾아올 수 없다.
따라서 공인IP와 사내IP를 맵핑하는 NAT기술을 사용한다.
즉, OutBound에서 사설망은 라우터에 할당된 공인망에 NAT에 기록되어 있는 랜덤 포트번호를 추가하여 사용한다.
하지만 InBound때 외부에서 내부망으로 접근할 때 랜덤 포트를 사용하는 것보다 미리 지정해둔 포트번호를 사용하는 것이 자연스러우므로 포트 포워딩을 사용한다.
포트 포워딩이란 사용자가 직접 매핑 테이블을 관리하여, 외부에서 공인IP의 포트에 접근할 때, 포트 포워딩 룰에 맞는 사설 IP로 변환하여준다.
NAT는 자동으로 설정되는 기술이고, 포트포워딩은 사용자가 설정하여야 한다.DNS
도메인 주소와 IP주소를 매핑한 데이터들을 가지고 있 는 서버
외부 DNS 서버는 온라인 상에서 모두 연동되어 있기 때문에 어느 DNS서버를 사용하더라도 같은 정보를 얻을 수 있다.
내부 DNS 서버(192.168.0.7)는 설정에 따라 내부 DNS에 등록된 도메인만 사용할 수 있거나, 내부 DNS 서버에 없는 도메인의 정보는 외부 DNS 서버에 물어봄으로써 모든 도메인을 사용할 수 있다.
도커 가상 네트워크
가상 네트워크란?
서버 한대 안에서 인터넷이나 공유기 없이 여러 논리적인 네트워크를 구성하는것
즉, 실제로 존재하지 않는 IP를 컨테이너들에 부여하면서 컨테이너들이 통신을 할 수 있도록 만들어 주는 것SDN이란?
한 서버에 가상 네트워크 브릿지(172.17.0.1)를 설정하고, 서버 내의 컨테이너들에게 논리적 IP를 부여하는 기술
한 서버에 한개의 물리 인터페이스를 연결하고, 네트워크 브릿지용 가상 인터페이스 1개와(docker0) 생성한 컨테이너의 갯수만큼 가상 인터페이스(Veth)를 생성한다.
그 이후 같은 브릿지 네트워크에게 가상 IP를 할당받은 컨테이너들끼리는 Host OS에 정의된 iptables의 규칙에 따라 통신이 가능해진다.
이 때, 한 서버 내에 여러개의 브릿지 네트워크를 생성할 수 있는데, 서로 다른 브릿지 네트워크에 있는 컨테이너끼리는 통신이 불가능하다.서브넷이란?
서브넷의 네트워크 안에서 생성되는 컨테이너들이 할당받는 IP의 범위.
예를 들어 Subnet이 "172.17.0.0/16"이면 IP의 범위가 CIDR방식으로 16이라는 것을 의마하고, 할당 가능한 IP의 범위가 (172.17.0.0~172.17.255.255)가 된다.
가상 네트워크와 포트포워딩
포트포워딩으로 HostOS의 네트워크와 컨테이너를 연결할 수 있다.docker run -p HostOS의포트:컨테이너포트
즉, Host서버의 포트와 내부 컨테이너의 포트를 매핑한다고 보면 된다.
이렇게 하는 이유는 내부 컨테이너에 할당된 IP는 가상 네트워크이므로, Host서버와 포트포워딩을 하지 않으면 외부에서 접근할 수 없기 때문이다.
즉, 위의 그림에서 Host서버의 8081포트로 요청을 보내면 nginx컨테이너의 80포트로 전달된다.(이때, nginx컨테이너의 80포트가 열려있어야 한다.)docker run -d -p 8001:80 --name mynginx nginx
가상 네트워크와 DNS
기본 bridge는 DNS기능이 없지만, 직접 생성한 bridge는 DNS를 포함하기 때문에 컨테이너들이 DNS에 등록할 수 있다.
또한, 이 DNS는 외부DNS와 연결되어 있기 때문에 외부와 도메인으로 통신이 가능해진다.도커 네트워크 드라이버 종류
웹, WAS, DB 배포 예시
컨테이너들을 새롭게 생성한 네트워크에 연결하였으므로 DNS에 각 도메인들이 등록되어 WAS컨테이너에 DB컨테이너를 연결할 때 IP주소를 사용할 필요 없다.