[AWS] ELB: 온프레미스 라우팅 설계

AWS 같은 클라우드를 쓰다보면. 항상 비용적 딜레마에 시달리게 된다.

클라우드가 좀 비싸긴 하지만, 가용성, 편의성, 리소스 탄력성, 하드웨어 이슈에서 자유롭다는 점에서 그 단점이 상쇄되는 면이 커서 쓰는 경우가 대부분이다.

하지만 비싼 비용이 그런 클라우드의 이점을 상쇄하다못해 초월하는 구간들이 드물지 않게 존재한다. 그 중 대표적인 사용사례가 AI 관련 리소스들이다.

그래서, 경우에 따라서는 AWS 리소스와 온프레미스 리소스를 결합해서 하이브리드로 사용하는 것도 하나의 방법이 될 수 있다.




문제

AWS 같은 클라우드들은 당연히, 온프레미스에 대한 지원을 제대로 해주지 않는다.
뭐가 좋다고 해주겠는가? 당연히 AWS 안에서만 쓰게 해야 이득이 되는데.

온프레미스 관련 서비스라고 영업하는 것도 전부 자기들이 직접 장비 팔거나 대여해주는 영역에 한정된다. 일반적으로는 불가능하다.

예를 들어, 온프레미스 서버의 외부 IP를 Application LoadBalancer로 연결하는 것은 지원되지 않는다. 프록시 구성을 자체적으로 지원하는 것도 없다.




방법 1: 단일 Target Group

그래서 온프레미스 환경을 통합하려면, 통상적으로는 해당 연결을 위한 프록시 인스턴스가 하나는 필요하다.
대충 이런 식으로 구성할 수 있을 것이다.

EC2를 통해 접근할 수만 있으면 IP Targetgroup이나 EC2 targetgroup 양쪽에서 모두 이러한 구성이 가능하다. 단, Autoscailinggroup으로 인스턴스를 관리한다면 EC2 targetgroup만 사용 가능하다.

Proxy -> Onpremise LB의 네트워크 구성을 어떻게 할지는 보안 정책이나 네트워크 구성 등에 따라서 달라질 수 있을 것이다.

이 구성의 장점은 헬스체크 기반으로 살아있는 서버에만 유연하게 라우팅을 하고, 온프레미스 서버가 다운되더라도 가용성을 보장할 수 있다는 것이다.

단점도 있다.
일반 EC2 서버와 프록시 EC2 서버가 다른 VPC에 있는 경우에는 사용할 수 없고, 모니터링 지표도 뒤섞여서 파악이 어렵다.
그리고 온프레미스와 EC2의 처리량이 다를 경우, 스펙에 따른 효율적인 분산이 불가능하다. 단일 타겟그룹 안에서는 인스턴스끼리 가중치 설정이 불가능하기 때문이다.




방법 2: 다중 Target Group

온프레미스 리소스에 대한 타겟그룹과 AWS 리소스에 대한 타겟그룹을 분리한다면, 좀 더 관리하기에 용이한 부분리 여럿 있다.

온프레미스용 타겟그룹을 IP 타입으로 만들고

EC2의 Private IP를 넣는 식으로 구성하면 된다.
이러면 다른 VPC에 있어도 교차 통신이 된다. (VPC Peering이 되어있다는 가정 하에)

그리고 로드밸런서의 단일 리스너에는, 여러개의 타겟그룹을 설정할 수 있다.

단, 분배 비율은 명시적으로 설정해줘야 한다. 라운드로빈이나, leastconnection 같은 것처럼 동적으로 분배하는건 없다.
사용량 보면서 적절하게 조정해줘야 한다.

이 구성의 장점은, 각 AWS/온프레미스의 모니터링 지표를 별도로 유연하게 파악할 수 있고, 스펙에 따른 가중치 설정이 가능하다는 것이다.
단점은.. 가용성을 확보하기 어렵다는 것이다. 단일 타겟그룹 내에서는 어떤 인스턴스가 다운되었을때 자동으로 라우팅을 살아있는 쪽으로 옮길 수 있지만, 다중 타겟그룹 간에는 그게 안된다.
Onpremise 타겟그룹이 통째로 다운될 경우 자동으로 AWS 타겟그룹으로만 자동 라우팅한다거나 하는 동작이 없다는 것이다. 그런게 필요하다면 메트릭 기반으로 직접 가중치를 조절하는 보조 시스템을 만들어야 한다.




+ VPN 구성

온프레미스 리소스를 사용한다면, 대개는 서버실이 따로 있고 네트워크 보안 규정이 빡빡한 경우가 많다.
이런 경우에는 사실 네트워크에 포트포워딩 등으로 public endpoint를 뻥 뚫어놓고 쓰기는 어렵다. IP가 바뀔 수 있기도 하고.

이런 경우에는 VPN을 중간에 두고 쓰는게 모범사례에 가깝다.

통신을 해야하는 양자가 각각 VPN에 피어로 등록하고, 서로 통신 가능하게 VPN 자체 트래픽 설정을 해주면, VPN에서 제공한 피어별 IP를 통해 안전하게 통신할 수 있다.

VPN은 직접 만드는 것도 가능은 한데, 보통은 오픈소스나 서비스를 쓰는게 편하다. 요즘 유명한건 tailscale이나 netbird 등이 있다. 난 netbird를 썼다.