Kubernetes
[ Kans 3 Study - 1w ] 컨테이너 네트워크 & IP Tables(3)
su''@
2024. 9. 1. 03:37
CloudNetaStudy - Kubernets Networtk 3기 실습 스터디 게시글입니다.
[2. 도커 네트워크 모델]
2.2 Host 모드
- 호스트의 환경을 그대로 사용 가능. 호스트 드라이버의 네트워크는 별도로 생성할 필요 없이 기존의 host 라는 이름의 네트워크를 사용 - 링크 링크2
- 컨테이너의 호스트 이름도 호스트 머신의 이름과 동일. 네트워크도 동일. 애플리케이션 별도 포트 포워딩 없이 바로 서비스 할 수 있음.
# 컨테이너 실행 docker run --rm -d --network host --name my_nginx nginx # HostConfig.NetworkMode "host" , Config.ExposedPorts "80/tcp" , NetworkSettings.Networks "host" 확인 docker inspect my_nginx # curl 접속 확인 curl -s localhost | grep -o '<title>.*</title>' # 호스트에서 tcp 80 listen 확인 ss -tnlp State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=3694,fd=7),("nginx",pid=3693,fd=7),("nginx",pid=3649,fd=7)) # 추가 실행 시도 docker run -d --network host --name my_nginx_2 nginx # 확인 docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 369c40cf6dfd nginx "/docker-entrypoint.…" 7 seconds ago Exited (1) 3 seconds ago my_nginx_2 ... # 삭제 docker container stop my_nginx
- 컨테이너의 호스트 이름도 호스트 머신의 이름과 동일. 네트워크도 동일. 애플리케이션 별도 포트 포워딩 없이 바로 서비스 할 수 있음.
|
2.3 컨테이너 외부에 노출
- 설정 및 확인 : bridge mode - 링크
https://youtu.be/SJFO2w5Q2HI # nginx:alpine 웹 컨테이너 3대 실행 # -p 옵션은 컨테이너 포트를 호스트 포트와 바인딩 연결 [호스트의 포트]:[컨테이너의 포트] ## -p 80 만 사용 시 호스트 포트 중 하나(랜덤)과 컨테이너의 80포트와 연결 ## -p 여러개 사용하여 여러개 포트 개방 docker run -d --name=web1 -p 10001:80 --rm nginx:alpine docker run -d --name=web2 -p 10002:80 --rm nginx:alpine docker run -d --name=web3 -p 10003:80 --rm nginx:alpine # 컨테이너 확인 docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5747f508fe0b nginx:alpine "/docker-entrypoint.…" About a minute ago Up About a minute 0.0.0.0:10003->80/tcp, :::10003->80/tcp web3 222390d43aa5 nginx:alpine "/docker-entrypoint.…" About a minute ago Up About a minute 0.0.0.0:10002->80/tcp, :::10002->80/tcp web2 b10d8e163c77 nginx:alpine "/docker-entrypoint.…" About a minute ago Up About a minute 0.0.0.0:10001->80/tcp, :::10001->80/tcp web1 # iptables 정보 확인 iptables -t nat -S | grep :80 -A DOCKER ! -i docker0 -p tcp -m tcp --dport 10001 -j DNAT --to-destination 172.17.0.2:80 -A DOCKER ! -i docker0 -p tcp -m tcp --dport 10002 -j DNAT --to-destination 172.17.0.3:80 -A DOCKER ! -i docker0 -p tcp -m tcp --dport 10003 -j DNAT --to-destination 172.17.0.4:80 iptables -t filter -S -A FORWARD -o docker0 -j DOCKER -A DOCKER -d 172.17.0.2/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 80 -j ACCEPT -A DOCKER -d 172.17.0.3/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 80 -j ACCEPT -A DOCKER -d 172.17.0.4/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 80 -j ACCEPT ... # 외부(자신의 PC)에서 접속(curl 혹은 웹브라우저) curl -s 192.168.50.10:10001 | grep -o '<title>.*</title>' curl -s 192.168.50.10:10002 | grep -o '<title>.*</title>' curl -s 192.168.50.10:10003 | grep -o '<title>.*</title>' # 연결 정보 확인 conntrack -L iptables -t nat -L -n -v # 삭제 docker stop $(docker ps -a -q)
실습 환경 삭제