도메인 경로를 각각의 도커에 할당하기 위한 최소 구성도
복수개의 도커에 다양한 도메인이 할당되어 도커에 접근이 되어야하기때문에 , 라우팅을 잘 관리하는 것은 중요한요소입니다.
접근과정 : 도메인 → 공유기 → 포트포워딩 → VMOS → PROXY → 도커 인스턴스
홈 네트워크라고, 하면 위와같은 순서로 도커가 제공하는 서비스에 접근을 할것이며,
VMOS에 유입되는 Endpoint를 패턴별로 , Proxy(Nginx)를 통해 도커 인스터로 유도해야할것입니다.
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 서버가 구동되게 된다.