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
3번째 상황이 왜 가장 최악의 상황이되냐하면, Hostfile은 로컬에서 지정하여 구동되는 환경이여서 관리및 통제가 안되며 크로스도메인 문제를 해결하기위해 운영과 다른 코드처리까지 필요한 상황이된다.
Nginx Proxy Manager
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 인스턴스를 뛰워라