콤퓨우터/필기: KodeKloud CKA 강의

206. Docker Networking

파란화면 2024. 5. 17. 00:46
반응형

None

네트워크가 없다. 외부로 통신 불가.

Host

호스트의 네트워크에 그대로 노출한다. 컨테이너 안에서 80을 열면 호스트의 IP로 80에 접근해서 내용을 볼 수 있다.
두 개의 컨테이너가 같은 포트를 열 수는 없다.

Bridge

기본값으로 172.17.0.0/24의 브리지 네트워크가 생성되어 내부 private network 주소를 할당받는다.

기본값으로 "bridge"라는 이름의 네트워크가 생성된다. docker network ls를 찍어 보면 Network 이름이 bridge로 되어 있으나, 실제로 호스트에서 생성되는 네트워크 이름은 docker0이다.

Docker에서

docker inspect 명령의 NetworkSettings 부분을 보면, 컨테이너의 네트워크 네임스페이스를 볼 수 있다.

ip link 명령을 찍어보면, master를 docker0으로 하는 veth뭐시기@if뭐라는 인터페이스가 생겨 있음을 볼 수 있다.
ip -n 네임스페이스명 link 명령을 찍어보면, eth0@if뭐+1라는 인터페이스가 컨테이너의 네트워크 네임스페이스에 연결되어 있음을 볼 수 있다.

veth뭐시기@if뭐는 가상-스위치인 bridge(docker0)에 꽂혀있고, eth0@if뭐+1는 네트워크 네임스페이스(컨테이너)에 꽂혀있는 구성의 한 쌍의 가상-이더넷-케이블 구조를 생각하면 된다.

  • 는 자연수이다. 예를 들어 veth뭐시기@if5와 연결된 상대는 eth0@if6이라는 것이다.

이러한 구조는 네트워크가 bridge로 설정된 컨테이너가 켜질 때마다 계속 만들어진다.

포트 포워딩

아무것도 설정하지 않은 경우, 외부 네트워크에서 bridge 내부로 inbound로 들어올 수 없다.
docker run -p 8080:80 처럼 포트포워딩 매핑을 해 주면, 호스트로 들어오는 8080 트래픽이 해당 컨테이너의 80으로 포워딩된다.

이 때, 실제로는 docker에서 알아서 iptables NAT rule을 생성해주고 있는 것이다. iptables -nvL -t nat를 찍어보면 도커가 만들어놓은 DNAT rule을 확인할 수 있다.

ip link
ip adr
ip addr add 192.168.1.0/24 dev eth0
ip route
ip route add 192.168.1.0/24 via 192.168.2.1
cat /proc/sys/net/ipv4/ip_forward
arp
netstat -plnt
route
반응형