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

S3 가상 호스트 어드레싱 사용을 위한 lakeFS 구성

원문 보기 위키 갱신

가상 호스트 어드레싱 이해하기

출처: 문서

본문

일부 시스템은 S3 엔드포인트(예: lakeFS의 S3 Gateway)가 virtual-host style addressing을 지원하기를 요구해요.

lakeFS는 이를 지원하지만, 호스트 주소에서 버킷 이름(lakeFS 리포지토리 ID로 사용됨)을 추출하기 위한 추가 구성이 필요해요.

예를 들어:

GET http://foo.example.com/some/location

위 URL을 해석하는 방법은 두 가지예요:

  • virtual-host URL로 해석: 엔드포인트 URL은 example.com, 버킷 이름은 foo, 경로는 /some/location

  • path-based URL로 해석: 엔드포인트는 foo.example.com, 버킷 이름은 some, 경로는 location

기본적으로 lakeFS는 URL을 path-based로 읽어요. URL을 virtual-host 요청으로 읽으려면 lakeFS에 추가 구성이 필요한데, 여기에는 lakeFS S3 게이트웨이를 위한 명시적 DNS 레코드 집합 정의가 포함돼요.

S3 게이트웨이 구성에 명시적 S3 도메인 이름 추가하기

첫 단계는 lakeFS 설치에게 S3 게이트웨이에 사용되는 호스트명을 알려주는 것이에요. 이것은 예를 들어 UI나 API에 사용되는 것과는 다른 DNS 레코드여야 해요.

일반적으로 lakeFS 설치가 lakefs.example.com으로 서빙된다면 s3.lakefs.example.com이 좋은 선택이에요.

이것은 환경 변수로 할 수 있어요:

LAKEFS_GATEWAYS_S3_DOMAIN_NAME="s3.lakefs.example.com"

또는 lakeFS config.yaml 파일에 gateways.s3.domain_name 설정을 추가할 수 있어요:

---
database:
  connection_string: "..."

...

# This section defines an explict S3 gateway address that supports virtual-host addressing
gateways:
  s3:
    domain_name: s3.lakefs.example.com

Note

lakeFS 구성 방법에 대한 자세한 내용은 설정 레퍼런스를 참고하세요

적절한 DNS 레코드 설정

lakeFS 설치가 명시적 S3 게이트웨이 엔드포인트 주소로 구성되면, lakeFS 설치를 가리키는 2개의 DNS 레코드를 정의해야 해요. 2개의 CNAME 레코드가 필요해요:

  • s3.lakefs.example.com - lakefs.example.com으로의 CNAME. 클라이언트 구성 시 S3 엔드포인트로 사용되며 베어 도메인 역할을 해요.

  • *.s3.lakefs.example.com - 역시 lakefs.example.com으로의 CNAME. lakeFS가 이제 파싱할 줄 아는 example-repo.s3.lakefs.example.com 같은 virtual-host 요청을 해석해요.

더 알아보기

구성 방법에 대한 자세한 내용은 여러분의 DNS 제공자 공식 문서를 참고하세요. AWS에서는 로드밸런서용 ALIAS 레코드로도 이를 수행할 수 있어요.

테넌트가 있는 가상 호스트 어드레싱

테넌트가 사용 중이고 gateways.s3.resolve_tenant가 활성화되어 있으면, 버킷 이름은 리포지토리 이름만이 아니라 테넌트와 리포지토리 이름의 합성이 되고, 가상 호스트 어드레싱은 그 합성 이름을 다른 버킷 이름과 똑같이 다뤄요. 테넌트 team-a의 리포지토리 my-repo는 team-a--my-repo.s3.lakefs.example.com으로 접근하는데, 이것 역시 단일 DNS 라벨이므로 위에서 설명한 와일드카드 CNAME이 이미 커버해요. 따라서 테넌트 해석을 활성화해도 추가 DNS 레코드는 필요 없어요.

기억해야 할 유일한 제약은 길이예요. DNS 라벨은 63자로 제한되고, 가상 호스트 어드레싱에서는 테넌트 이름, 두 글자 구분자, 리포지토리 이름이 모두 그 단일 라벨 안에 들어가야 해요. path-based 어드레싱보다 리포지토리 이름에 쓸 수 있는 여유가 적어지는 셈이에요.

더 알아보기 (Learn more)

공식 문서의 가상 호스트 어드레싱 페이지는 https://docs.lakefs.io/admin/virtual-host-addressing 에서 확인할 수 있어요.