본문 바로가기
Infra/Docker_K8S

HP교육센터-도커 네트워크 개념 이해

by 골든크랩 2022. 7. 30.
728x90
반응형

 

Nefilter : 방화벽

NAPT(Network Address Translation Table) : 사설ip가 공인ip로 주소변환

 

dnat : 목적지 주소가 바뀜

snat : 출발지 주소가 바뀜

 

source, desti(8.8.8.8), data => snat.....

netfilter  를 지나면서, ip 가 바뀜, 구글까지 패킷이 감

 

dnat 

동일 포트 번호를 사용하는 컨태이너가 2개 이상이라면???

물리적 콤퓨터의 port 를 서로 다르게 해서, 식별해야 한다.

 

예) -p 옵션으로 정함

docker ryn -d --name www2 -p 8080:80 nginx

                                              -p 8081:80

                                              -p 8082:80

 

 

root@template:~# docker run -d --name www1 -p 8080:80 nginx
43e19db0b572fd34f7d699a8a1fe3ff4d8ced4b3340cfb837d332cbc0ae2975a

 

넷필터 방화벽 3요소.

가. 필터 테이블 (이게 디펄트)

나. NAT 테이블

다. 맹글 테이블

 

각 테이블은 체인이 있다.

 

NAT 테이블 보는법

root@template:~# iptables -nL -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
DOCKER     all  --  0.0.0.0/0            0.0.0.0/0            ADDRTYPE match dst-type LOCAL

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
DOCKER     all  --  0.0.0.0/0           !127.0.0.0/8          ADDRTYPE match dst-type LOCAL

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
MASQUERADE  all  --  172.17.0.0/16        0.0.0.0/0
MASQUERADE  tcp  --  172.17.0.2           172.17.0.2           tcp dpt:80

Chain DOCKER (2 references)
target     prot opt source               destination
RETURN     all  --  0.0.0.0/0            0.0.0.0/0
DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8080 to:172.17.0.2:80

 

룰들이 구멍안에 들어감.

 

PREROUTING :  내부로 들어오면

POSTROUTING : 외부로 나갈때(SNAT)

 

웹브라우저 기동후 변화 확인

root@template:~# docker run -d --name www2 -p 8081:80 httpd

 

root@template:~# iptables -nL -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
DOCKER     all  --  0.0.0.0/0            0.0.0.0/0            ADDRTYPE match dst-type LOCAL

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
DOCKER     all  --  0.0.0.0/0           !127.0.0.0/8          ADDRTYPE match dst-type LOCAL

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
MASQUERADE  all  --  172.17.0.0/16        0.0.0.0/0
MASQUERADE  tcp  --  172.17.0.2           172.17.0.2           tcp dpt:80
MASQUERADE  tcp  --  172.17.0.3           172.17.0.3           tcp dpt:80

Chain DOCKER (2 references)
target     prot opt source               destination
RETURN     all  --  0.0.0.0/0            0.0.0.0/0
DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8080 to:172.17.0.2:80
DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8081 to:172.17.0.3:80

 

 

 

 

 

1. 동일 host

2. 기본네트웍(docker0)

 

--link 옵션(컨테이너에 ip 대신 이름을 사용)

도커와 쿠버는 내부적으로 DNS가 있다.

 

 

 

컨테이너를 정지시키면...사용하던 IP 는 반납되고, 새로 생성되는 컨테이너에게 할당됨

 

root@template:~#
root@template:~# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED              STATUS              PORTS     NAMES
1c68a12312be   centos    "/bin/bash"   42 seconds ago       Up 41 seconds                 web
5e171ed84d6e   centos    "/bin/bash"   About a minute ago   Up About a minute             db
root@template:~#
root@template:~#
root@template:~#
root@template:~#
root@template:~#
root@template:~# docker inspect db | grep IPAddr
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAddress": "172.17.0.2",
root@template:~# docker inspect web | grep IPAddr
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.3",
                    "IPAddress": "172.17.0.3",
root@template:~#
root@template:~#
root@template:~#
root@template:~# docker exec -it web /bin/bash
[root@1c68a12312be /]# ps -ef
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 03:17 pts/0    00:00:00 /bin/bash
root          15       0  0 03:19 pts/1    00:00:00 /bin/bash
root          28      15  0 03:19 pts/1    00:00:00 ps -ef
[root@1c68a12312be /]# cat /etc/hosts
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2      db 5e171ed84d6e
172.17.0.3      1c68a12312be

 

--link 옵션을 쓰면 ip가 바뀌어도 자동 갱신된다.

 

root@template:~#
root@template:~# docker image prune -a  ===> 이미지 다 지움
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
Deleted Images:
untagged: nginx:1.12
untagged: nginx@sha256:72daaf46f11cc753c4eab981cbf869919bd1fee3d2170a2adeac12400f494728
deleted: sha256:4037a5562b030fd80ec889bb885405587a52cfef898ffb7402649005dfda75ff
deleted: sha256:8b8d76e24d92203bae8c1184f5c94f607c92e87ff5f836780f0d1301e4073111

 

 

 

 

 

728x90
반응형

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

Docker 테스트 1  (0) 2022.07.30
HP교육센터-도커 네트워크 종류  (0) 2022.07.30
nginx tomcat 연동하기  (0) 2022.04.01
Docker 설치하기  (0) 2021.12.07
도커 설치후, VS Code 에서 인식한 플러그인들  (0) 2021.06.17

댓글