본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

이그레스 IP 주소 (Egress IP addresses)

원문 보기 위키 갱신

기본적으로 Fly Machines에서 나가는(이그레스) IP는 불안정해서 바뀔 수 있어요. 일부 외부 서비스는 소스 IP를 허용 목록(allowlist)으로 관리하기 때문에 고정 이그레스 IP가 필요할 수 있어요. 이 페이지에서는 앱 범위(app-scoped)와 머신 범위 고정 이그레스 IP의 할당, 관리, 마이그레이션 방법을 설명해요.

출처: 문서

본문

개요 (Overview)

  • 기본적으로 Fly Machines에서 나가는(아웃바운드, egress) IP는 불안정하며 바뀔 수 있어요.
  • fly ips allocate-egress로 앱에 고정 이그레스 IP(IPv4와 IPv6 모두)를 할당할 수 있어요.
  • 앱 범위 고정 이그레스 IP는 리전 단위로 적용돼요. Machines가 있는 각 리전마다 하나씩 필요해요.
  • 고정 이그레스 IP에는 트레이드오프가 있어요. 비용이 더 들고 동시에 실행할 수 있는 Machines 수가 제한돼요.
  • 레거시 머신 범위 고정 이그레스 IP도 여전히 사용할 수 있지만, 제한 사항과 괴로운 특성 때문에 더 이상 권장되지 않아요.

이그레스 IP가 왜 중요한가

일부 외부 서비스(API, 데이터베이스, 결제 제공자)는 소스 IP 허용 목록을 요구해요. 고정 이그레스 IP가 없으면 Machine 수명 주기나 인프라 변경으로 인해 Fly Machines의 아웃바운드 IP가 바뀔 수 있어요.

  • Machines는 대상에 AAAA 레코드가 있고 애플리케이션이 그것을 선호할 때 IPv6로 이그레스하는 경우가 많아요. 예를 들어 curl은 가능하면 IPv6를 먼저 시도하고 필요하면 IPv4로 폴백해요. Fly가 IPv6를 강제하지는 않지만 많은 앱이 사용 가능할 때 그것을 사용해요.
  • IPv4 트래픽은 NAT되며 변할 수 있어요. 즉 소스 IP 주소가 호스트에 의해 재작성되고, 어떤 IP를 얻게 될지는 머신이 어디에서 실행되거나 재시작되는지에 따라 달라질 수 있어요.
  • 타사 서비스에서 IP를 허용 목록으로 관리한다면 고정 이그레스가 필요해요.

고정 이그레스 IP (앱 범위, App-Scoped)

앱 범위 고정 이그레스 IP는 같은 앱에 속한 리전의 여러 Machines가 공유할 수 있고, Machines가 다시 생성되어도 삭제되지 않아요. 레거시 머신 범위 고정 이그레스 IP보다 이것이 권장돼요.

앱 범위 고정 이그레스 IP 할당

fly ips allocate-egress --app <app-name> -r <region>

이것은 해당 리전의 앱에 IPv4와 IPv6 고정 이그레스 주소 한 쌍을 할당해요.

앱에 Machines가 여러 리전에 있다면 리전마다 최소 1개의 앱 범위 고정 이그레스 IP 주소를 할당해야 해요. Machines는 자기 자신의 리전에 할당된 고정 이그레스 IP만 사용할 수 있어요.

같은 리전에 여러 쌍의 IPv4와 IPv6 고정 이그레스 주소를 할당할 수 있어요. Machines는 해당 리전에서 사용 가능한 모든 고정 이그레스 IP 중에서 한 쌍을 무작위로 선택해요.

조회 및 관리

fly ips list
fly ips release-egress <ip-address>

앱 범위 이그레스 IP는 명시적으로 fly ips release-egress를 실행할 때만 해제돼요. Machine 파괴와 배포를 거쳐도 유지돼요.

청구 (Billing)

각 앱 범위 IPv4 고정 이그레스 주소는 시간 단위로 청구되어 월 $3.60예요. IPv6 주소는 IPv4와 함께 할당되며 별도로 청구되지 않아요.

주의 사항 (Caveats)

  • 각 고정 이그레스 IP는 최대 64개의 Machines를 지원할 수 있어요. 한 리전에서 64개보다 많은 Machines가 필요하면 여러 고정 이그레스 IP를 할당해야 해요.
  • 앱 범위 고정 이그레스 IP를 사용할 때 Machine은 각 대상 IP 주소에 대해 최대 1024개의 동시 연결을 만들 수 있어요. 총 동시 연결 수에는 제한이 없어요.

대부분의 앱에서 이는 문제가 되지 않을 거라고 생각해요. 하지만 이 제한이 사용 사례에 걸림돌이 된다면 언제든지 저희에게 얘기해 주세요!

  • 한 리전에 여러 고정 이그레스 IP가 할당된 경우, 현재 각 머신이 정확히 어떤 IP를 사용할지 지정할 방법이 없어요.
  • 이그레스 IP가 Machines에 적용될 때 지연이 있을 수 있어요:
  • 새 이그레스 IP를 할당한 직후, 짧은 지연 후 이 리전의 모든 기존 Machines에 적용돼요. 이런 경우 여러 쌍의 고정 이그레스 IP를 할당해도 도움이 되지 않아요.
  • 이미 이그레스 IP가 할당된 앱에서 새 Machine을 만들 때, Machine이 이그레스 IP를 사용할 수 있을 때까지 지연이 있을 수 있어요. 이 지연은 Machines가 많거나 블루그린 배포 중에 더 두드러질 수 있어요. 여러 쌍의 고정 이그레스 IP를 할당하면 이 문제를 완화하는 데 도움이 돼요.
  • flyctl은 Machine 생성, 배포, IP 관리 중에 이러한 제한에 가까워지면 경고를 표시해요.

머신 범위 이그레스 IP와의 상호작용

앱 범위와 머신 범위 이그레스 IP는 함께 사용하도록 의도되지 않았어요.

Machine에 머신 범위 이그레스 IP가 있다면 같은 리전의 앱 범위 이그레스 IP보다 우선해요. 이 동작은 향후 바뀔 수 있어요.


고정 이그레스 IP (머신 범위, Machine-Scoped)

과거에는 앱이 아니라 개별 머신에 정적으로 바인딩되는 머신 범위 이그레스 IP를 지원했어요. 이 기능은 더 이상 사용되지 않으며(deprecated), 새 앱은 모두 앱 범위 고정 이그레스 IP를 사용해야 해요.

하지만 이미 머신 범위 고정 이그레스 IP가 할당되어 있다면 계속 동작하며 조회하고 관리할 수 있어요. 또한 그것을 앱 범위 이그레스 IP로 "승격(promote)"할 수도 있어요.

조회 및 관리

fly machine egress-ip list --app <app-name>
fly machine egress-ip release <machine-id> --app <app-name>

앱 범위 이그레스 IP로 마이그레이션

기존 머신 범위 이그레스 IP의 일부를 "승격"해 앱 범위로 만들어 머신 범위 이그레스 IP에서 앱 범위 이그레스 IP로 마이그레이션할 수 있어요. 이렇게 하면 외부 허용 목록 설정을 변경하지 않고도 앱 범위 이그레스 IP로 전환할 수 있어요.

승격 과정은 대부분 매끄럽지만, 이그레스 IP가 원래 머신에서 제거되어 앱에 재할당되는 동안 짧은 가동 중단 창이 발생할 수 있어요.

fly machine egress-ip promote <machine-id> --app <app-name>

승격된 이그레스 IP는 원래 머신의 리전을 유지해요. 앱에 Machines가 여러 리전에 있다면 각 리전마다 최소 하나를 승격하세요.

더 이상 필요하지 않은 남은 머신 범위 이그레스 IP도 제거해야 해요.

주의 사항 (Caveats)

레거시 고정 이그레스 IP는 앱 단위가 아니라 **머신 단위(per-machine)**이기 때문:

  • 머신이 파괴되면 IP가 해제돼요.
  • IP는 배포 간에 자동으로 이전되지 않아요.
  • 블루그린 배포는 머신(과 그 IP)을 대체해요.
  • 배포 시점의 작업(job)은 이그레스 라우팅을 우회할 수 있어요.
  • 일부 리전에서는 추가 지연과 연결 문제가 발생할 수 있어요.

머신 범위 고정 이그레스 IP는 머신당 시간 단위로 청구돼요.


모범 사례 (Best Practices)

  • 필요한 경우에만 고정 이그레스를 사용하세요.
  • 이그레스 IP를 할당한 후 연결을 테스트하세요.
  • 배포 중 마이그레이션 동안 실패를 모니터링하세요.

더 알아보기 (Learn more)