복수개의 도커에 다양한 도메인이 할당되어 도커에 접근이 되어야하기때문에 , 라우팅을 잘 관리하는 것은 중요한요소입니다.
도메인 → 공유기 → 포트포워딩 → VMOS → PROXY → 도커 인스턴스
홈 네트워크라고 하면 위와같이 접근정책을 해야하며, VMOS까지 라우터설정은 제공된 ISP(인터넷제공업체) or IDC(관리센터)등에 영향을 받습니다.
Rancher 에서 복수개의 컨테이너 관리를 할수 있지만, 도메인 규칙에따라 컨테이너에 연결하는 기능은 포함되어 있지않습니다.
로드 밸런싱이 포함하여 이러한 기능은 하드웨어 혹은 소프트웨어 레벨에서 처리할수 있으며 ( 하드웨어 레벨 L5 , 소프트웨어 레벨 L7 으로 구분되기도 한다.)
L5에 대표적인 솔류션으로 BigIP가 있으며 L7에는 Nginx/Haproxy 등이 있다. AWS에서는 ELB 가 제공되기도 한다.
여기서는 온프레미스에서 소규모 네트워크이기때문에 Nginx 에 Admin기능을 입힌 Nginx Proxy Manager를 사용할것이다.
소규모 개발환경에서도 Proxy가 중요한 이유는 ,먼저 Proxy관리가 없는 환경을 생각해보자
- 도메인 설정이 산발적으로 되어,그룹단위 개발환경의 전체 레이아웃을 볼수가 없다. -Bad
- 개발 도메인 신청에서 빌드업까지 개발시간보다 더 긴시간이 사용됨 - Bad
- 관리가 어렵다고 해서, 도메인 개발환경을 포기한 경우, 그냥 Ip:port기반으로 제공하고 Hostfile을 통한 QA- Too Bad
Nginx Proxy Manager
- 인입되는 도메인의 패턴(PROXY감지)에 따라 특정 IP로(도커 컨테이너) 유도
version: '2' services: nginx: image: jlesage/nginx-proxy-manager restart: always volumes: - /docker/appdata/nginx-proxy-manager:/config:rw ports: - 8080:8181/tcp - 8081:8080/tcp labels: io.rancher.scheduler.affinity:host_label: server=main io.rancher.container.hostname_override: container_name
초기 계정
- Email address:
admin@example.com
- Password:
changeme
더자세한 기능 참고 : https://github.com/jlesage/docker-nginx-proxy-manager
위 도커 슼크립트를 추가하게 되면, Rancher에서 server가 main 인 인스턴스 한곳에 proxy 서버가 구동되게 된다.
참고로 label에따라 2중화를 포함하여 무중단 배포도 가능하다. 명령예> apitype이 api인곳에 2 인스턴스를 뛰워라