캠퍼스페이에서는 하나의 EC2 안에서 여러 컨테이너를 띄워서 컨테이너끼리 소통을 하였고, COA 프로젝트에서는 여러개의 EC2안에 분리되어있는 컨테이너 끼리 소통을 해야 한다. 이때 어떤 차이점이 있고 Docker끼리의 네트워크 연결 방식이 어떻게 될 지 정리해보고자 한다.
하나의 EC2안에 11개의 Container
같은 EC2 안의 컨테이너들은 기본적으로 브릿지 네트워크를 통해 통신한다.
즉, 가상 이더넷 인터페이스로 서로 연결되어 있고, 실제로는 리눅스 커널 수준의 내부 네트워크 통신이다.
그래서 NAT, 라우팅이 불필요하고, Docker가 내부 IP를 자동 할당한다.
Docker는 대표적으로 3가지 네트워크 드라이버가 있다.
bridge : 기본값, EC2 내부의 가상 네트워크 통신 (docker0, custom bridge)
host : 컨테이너가 호스트(EC2) 의 네트워크를 그대로 사용
none : 네트워크 아에 없음 (보안, 실험용)
이건 우리가 논리적 MSA를 했을 때 각 컨테이너의 docker-compose 파일의 네트워크 부분에 설정을 해놓은 것이다. 우리는 custom bridge 를 사용했다.
networks:
solsol-net:
external: true
이 의미는 이미 존재하는 네트워크 (external: true)인 solsol-net을 사용하라 라는 뜻이다.
그렇게 solsol-net에 연결된 모든 컨테이너들은 컨테이너 이름으로 접근 가능하게 된다!
예를들면, Nginx 설정에서 proxy_pass http://spring1:8080; 라고 하게 된다면 Docker가 자동으로 spring1이라는 컨테이너명을 solsol-net 내의 IP로 변환해준다. (내부 DNS 동작)
만약에 driver: bridge 로 설정해서 새로 만들게 되었을 때는 새롭게 만들어지기 때문에 서로 다른 네트워크가 된다.
그렇기에 Nginx는 외부 트래픽을 받는 단일 진입점이기에
networks:
solsol-net
external-net
이렇게 외부 네트워크가 연결될 수 있는 유일한 Docker Container가 되도록 설정하여 외부에서 다른 서비스로 직접 접근을 막고 보안성 높은 설계를 하였습니다.
EC2 12대 안에 각각 존재하는 container
이제 docker container 끼리가 아닌 EC2 인스턴스 간의 통신을 신경써야 한다.
EC2 간의 통신은 AWS VPC 네트워크 상에서 이루어진다.
VPC는 Virtual Private Cloud 의 약자로 AWS 내부의 가상 데이터센터로 네트워크 최상위 단위이다. 같은 VPC에 있으면 사설 IP로 통신이 가능하다.
VPC 내에서 Subnet으로 작은 네트워크 블록을 나누고 퍼블릭 서브넷으로 인터넷 게이트웨이 연결을 하고 프라이빗 서브넷을 통해 내부 전용 통신을 따로 설정한다.
VPC는 특정 리전에 종속되어서 서울 리전에서 만든 VPC는 미국에서는 접근 불가능 함
그렇게 Security Group (인바운드/ 아웃바운드)를 설정해서 길을 터주기만 하면 연결이 가능하다.
Security Group 은 EC2 단위 가상 방화벽으로 기본적으로 인바운드 모든 트래픽 차단, 아웃바운드 : 모든 트래픽 허용 으로 되어있음
만약 우리가 docker-compose 를 사용하고 각 EC2 안에 container를 하나만 사용할 거라면 network_mode : host 를 통해서 EC2의 IP를 그대로 사용하면 된다.
docker-compose가 아닌 각 EC2를 EKS로 관리
Kubernates 에서는 컨테이너 단위가 아니라 Pod 단위로 네트워크를 관리한다.
Pod간 통신은 CNI (Container Network Interface) 플러그인이 담당하기 때문에 굳이 hostNetwork를 사용한다는 명시 없이 VPC 내 다른 Pod/EC2와 통신이 가능하다.
그렇게 Kubernates를 사용하면서 달라진 점은
Pod 단위 네트워크를 CNI 플러그인이 VPC IP를 관리하여 hostNetwork 설정이 불필요하다.
Pod spec, Service, Security Group만 설정하면 자동으로 처리된다.
장점으로는 EC2 단위에서 스케일링이 가능해지고, Pod가 죽으면 자동 재배치가 가능하다.
쿠버네티스까지 쓰신건가요ㄷㄷ