Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.


도메인 경로를 각각의 도커에 할당하기 위한 최소 구성도

draw.io Diagram
bordertrue
viewerToolbartrue
fitWindowfalse
diagramNamenginxproxy
simpleViewerfalse
width
diagramWidth1001
revision2


복수개의 도커에 다양한 도메인이 할당되어 도커에 접근이 되어야하기때문에 , 라우팅을 잘 관리하는 것은 중요한요소입니다.

접근과정 : 도메인 → 공유기 → 포트포워딩 → VMOS → PROXY → 도커 인스턴스

홈 네트워크라고 하면 위와같이 접근정책을 해야하며,  VMOS까지 라우터설정은 제공된 ISP(인터넷제공업체) or IDC(관리센터)등에 영향을 받습니다.

Rancher 에서 복수개의 컨테이너 관리를 할수 있지만,  도메인 규칙에따라 컨테이너에 연결하는 기능은 포함되어 있지않습니다.

로드 밸런싱이 포함하여 이러한 기능은 하드웨어 혹은 소프트웨어 레벨에서 처리할수 있으며  (  하드웨어 레벨 L5 , 소프트웨어 레벨 L7 으로 구분되기도 한다.) 

L5에 대표적인 솔류션으로 BigIP가 있으며 L7에는 Nginx/Haproxy 등이 있다. AWS에서는 ELB 가 제공되기도 한다.

여기서는 온프레미스에서 소규모 네트워크이기때문에 Nginx 에 Admin기능을 입힌 Nginx Proxy Manager를 사용할것이다.

소규모 개발환경에서도 Proxy가 중요한 이유는 ,먼저 Proxy관리가 없는 환경을 생각해보자

...

, 하면 위와같은 순서로 도커가 제공하는 서비스에 접근을 할것이며, 

VMOS에 유입되는 Endpoint를 패턴별로 ,  Proxy(Nginx)를 통해 도커 인스터로 유도해야할것입니다.



도메인을 공유기에 연결

가정인터넷일 경우 유동IP일 경우가 대부분이며 IP가 변경되어도 도메인이 대상을 찾을수 있게 고정해주는 기능이

DDNS 기능입니다. 

Image Added

-IPTIME DDNS


Image Added

도메인을 생성해주는 도메인생성 대행 플랫폼(여기의 샘플은 가비아)을 통해 도메인 생성이 가능하며

도메인 생성후 CNAME규칙으로 서브도메인을 모두 동일한 DDNS의  도메인으로 연결합니다.



Image Added

외부 웹으로 연결되는 포트(80,443)를 내부IP로 모두 포트포워드를 합니다.

다음에 설명될 NGINX가 띄워질 포트입니다.

...


Nginx Proxy Manager

  • 인입되는 도메인의 패턴(PROXY감지)에 따라 특정 IP로(도커 컨테이너) 유도 

...

Code Block
themeEmacs
version: '2'
services:
  nginxapp:
    image: jlesagejc21/nginx-proxy-manager:2.9.11
    restart: alwaysenvironment:
      DB_MYSQL_HOST: db
      DB_MYSQL_NAME: npm
      DB_MYSQL_PASSWORD: npm
      DB_MYSQL_PORT: '3306'
      DB_MYSQL_USER: npm
    volumes:
    - /mnt/datac/docker/nginx/data:/data
    - /mnt/datac/docker/appdata/nginx-proxy-manager:/config:rw/nginx/letsencrypt:/etc/letsencrypt
    ports:
    - 9980:80/tcp
    - 9981:81/tcp
    - 9443:443/tcp
    labels:
      io.rancher.scheduler.affinity:host_label: server_name=main
    ports:
   io.rancher.container.hostname_override: container_name
  db:
    image: jc21/mariadb- 8080:8181/tcparia:latest
    environment:
      MYSQL_DATABASE: npm
      MYSQL_PASSWORD: npm
      MYSQL_ROOT_PASSWORD: npm
      - 8081:8080/tcpMYSQL_USER: npm
    volumes:
    - /mnt/datac/docker/nginx/mysql:/var/lib/mysql
    labels:
      io.rancher.scheduler.affinity:host_label: server_name=main
      io.rancher.container.hostname_override: container_name


초기 계정

더자세한 기능 참고 : https://github.com/jlesage/docker-nginx-proxy-manager


위 도커 슼크립트를 추가하게 스크립트를 실행 하게 되면, Rancher에서 server가 main 인 인스턴스 한곳에 server의 main영역에 1 인스턴스로 proxy 서버가 구동되게 된다.

참고로 label에따라 2중화를 포함하여 무중단 배포도 가능하다. 명령예> apitype이 api인곳에 2 인스턴스를 뛰워라 

이제 서브도메인 규칙에따라 다양한 서비스의 도커에 연결이 가능합니다.



웹노리 도메인화면 샘플

Image Added


  •  서브도메인 규칙에의해 다양한 도커로 작성된 서비스로 연결이 가능합니다.


Image Added

자동갱신되는 무료 SSL(Let's Encrypt) 도 지원하기때문에 서비스를 띄울때  각 웹서비스마다 SSL을 탑재하여 띄울필요없이 Nginx에서 SSL을 자동관리합니다.