본문 바로가기

devops

하나의 SSLVPN 여러 VPC 접근하도록 Reverse-Proxy 구성

반응형

현재 SSLVPN이 Prod VPC에는 직접 연결할 수 없음.

SSLVPN은 Dev VPC에만 붙어있기 때문이다. 원래 같으면 VPC당 SSLVPN을 사용해야함.클라우드비용도 비용이지만... 개발자가 각 VPC에 접근할 때 매번 로그인과 문자인증을 해야함... 하루에 얼마나 많이 왔다갔다하는데...

Reverse-Proxy 구성

docker-compose를 이용하여 nginx를 설치함. (리버시 프록시 특성상 80포트를 사용해야함.)

 

docker-compose.yaml

version: '3'
services:
  nginx:
    image: nginx:latest
    ports:
      - 80:80
    volumes:
      - ./proxy/nginx.conf:/etc/nginx/nginx.conf
    container_name: reverse-proxy

docker-compose.yaml이 있는 경로에서 proxy 디렉토리를 생성하고 안에 nginx.conf를 생성.

mkdir proxy
cd proxy
vi nginx.conf

nginx.conf

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;
    include /etc/nginx/conf.d/*.conf;
}

docker-compose.yaml이 있는 경로로 돌아가서.. docker-compose 실행

docker-compose up -d

ACG나 방화벽으로 포트 80, SSLVPN IP가 정상적으로 뚫어졌다면 아래와 같이 뜨면 성공! (ACG 설정은 생략)

위에 까지는 nginx가 정상적으로 뜨고 커넥션이 잘 되는 것을 테스트한 것이고 이제 Prod로 요청을 전달하는 역할을 하도록 설정을 해야함.

다시 ./proxy/nginx.conf를 아래와 같이 수정한다. 

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    upstream prod-ingress-nginx {
        server ingress-LB주소.com:80;
    }

    server {
        listen 80;

         location / {
            proxy_pass         http://prod-ingress-nginx/;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
        }
    }

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

리버시 프록시 역할을 하도록 모든 경로(”/”)로 요청이 nginx로 들어오면 모두 http://prod-ingress-nginx/로 프록시 패스를 처리하도록 한다. prod-ingress-nginx는 nginx에서 사용하는 변수이며 실제 주소는 위에 upstream prod-ingress-nginx statement에 작성된

ingress-LB주소.com:80 이다.

이렇게 설정하면 nginx가 실행되는 10.140.1.6 에서 Prod Kuberenetes ingress의 private load balancer인 ingress-LB주소.com:80로 패스된다.

10.140.6   ingress-LB주소.com:80

nginx 서버를 재실행하기 위해서 docker-compose.yaml이 있는 곳에서 아래와 같이 down, up 시키면된다.

docker-compose down
docker-compose up -d

 

그리고 Global DNS 서비스에서 아래와 같이 추가한다.

 

 

 

캡처에서 밑에 rancher, kafka.dev 등등의 레코드 값을 보면 모두 ingress load balancer 주소가 적혀있다. 프록시가 없다면 이렇게 하는 것이 맞다.

하지만 빨간박스는 Prod 쪽이므로 레코드값으로 프록시 주소를 작성하여 주었다.

argocd.prod.도메인명.com를 요청을 하면 10.140.1.6 주소로 던진다는 뜻이다.

그러면 10.140.1.6 VM안에 있는 nginx docker이 요청을 받고 nginx 내부적으로 설정된 프록시 패스를 통해서 운영에 있는 argocd ingress를 통하여 운영 argocd 서비스에 접속하게 되는 것이다.

아래와 같이 argocd.prod.도메인명.com 주소로 접속하면 아래와 같이 운영의 Argo CD에 정상적으로 접속된다.

 

 

 

 

 

 

 

 

 

반응형

'devops' 카테고리의 다른 글

Grafana Loki 성능 이슈 & 튜닝  (0) 2023.07.07
Database용 TCP Reverse-Proxy  (0) 2023.07.07
Docker-compose 설치하기  (0) 2023.07.07
Docker 설치하기  (0) 2023.07.07
GitLab 레포지토리 마이그레이션  (0) 2023.07.07