Infra/IaC

[Docker] Network 관리

jykim23 2023. 10. 20. 19:27

docker network == linux bridge

 

리눅스의 네트워크 브릿지를 사용한다.

CNM 안의 libnetwork를 관리한다.

 

docker network ls

docker network inspect bridge

 

 

veth : virtual ethernet device

브릿지와 컨테이너의 네트워크의 한 쌍이다.

sudo apt install bridge-utils

brctl show

 

 

network driver 종류

host : 호스트의 네트워크를 사용. 컨테이너의 ip가 없다.

none : 네트워크 연결 안함

bridge : 기본값. 다른 도커서버와 클러스터링 등에 사용

mac : 맥주소만 생성한다.

사용자 정의 네트워크 : docker create [name]

 

예시 : https://docs.docker.com/engine/reference/commandline/network_create/

 

사용자 정의 네트워크 생성 오류

오류 : Error response from daemon: Failed to Setup IP tables: Unable to enable SKIP DNAT rule:

해소 : sudo systemctl restart docker

 

docker network connect | disconnet : 네트워크간 통신은 안된다.(당연.) 3-tier 계층 통신을 위해 각각의 컨테이너에 통신이 필요한 네트워크를 연결해서 사용한다.

 

ping test

docker exec -t [container] bash && ping -c 2 [다른 컨테이너]

 

docker network rm [name]

 

docker DNS

컨테이너의 DNS의 기본값은 도커 호스트이다.

그래서 컨테이너의 hostname으로 통신이 가능해진다.

 

사용자 지정 - 타겟 그룹(--net-alias 확인 가능) -> docker proxy(load balancing)

동일 타겟 그룹에 동일 서비스 컨테이너를 올려서 라운드로빈 부하분산 가능해진다.

 

컨테이너 Proxy(load balancing)

proxy server := 통신을 대신 해주는 서버

proxy 장점 : LB, caching static file(빠른 응답), 사내망에서 특정 사이트 접근 차단, 무중단 배포, SSL 암호화 적용

forward proxy : client의 정보가 server에게 노출되지 않는다.

reverse proxy : server의 정보가 client에게 노출되지 않는다.

 

Nginx proxy server

Reverse Proxy 로 사용할 수 있다.

Kubernetes ingress controller로 nginx ingress controller 선택 가능

API 트래픽 처리를 고급 HTTP 처리 기능으로 사용 가능한 'API Gateway' 구성 가능

MSA 트래픽 처리를 위한 MicroGateway 사용 가능

설정 파일 : nginx.conf

 

 

Host Nginx reverse : docker host 서버에 설치하여 사용

proxy_pass / upstream

 

Container Nginx reverse

host nginx 방법과 동일

가중치 설정 가능. weight.

 

 

 

HAproxy

주요기능 : ssl, lb, active health check, keepAlived(proxy 이중화)

 

HAproxy : L4(OSI 7)

특징 : IP, Port 기반 트래픽 전달

LB : 트래픽 전달.(round lobin)

 

HAproxy : L7(OSI 7)

특징 : HTTP 기반 URI 기반 트래픽 전달

동일한 도메인의 하위에 존재하는 여러 웹 애플리케이션 서버 사용 가능

 

0. network create & 서비스 컨테이너 생성

1. HAproxy.cnf 설정파일(도커 호스트에서 파일생성)

2. HAproxy.cnf 설정파일을 haproxy-container 로 올린다.