Kubernetes

공용 네트워크, 외부 DNS 및 카우치베이스 자율 운영자

퍼블릭 네트워크에 Couchbase 데이터베이스를 노출하는 이유는 무엇인가요?

다음은 몇 가지 예입니다:

  • 고가용성 및 재해 복구를 위한 데이터 센터 간 복제(XDCR)

  • 카우치베이스 클러스터에 대한 클라이언트 SDK 액세스

  • 서비스형 데이터베이스(DBaaS) 플랫폼

*참고 - 이 모든 사용 사례는 공통된 목표를 공유하는데, 클라이언트가 Kubernetes 인스턴스에 VPN을 설정할 필요 없이 데이터베이스 인스턴스에 액세스할 수 있게 해줍니다. 또한 일반적인 Kubernetes 아키텍처로는 달성하기 어려운 TLS 보호 보안 통신이 필요합니다.

쿠버네티스 외부 DNS를 사용하여 퍼블릭 네트워킹을 어떻게 해결했나요?

Kubernetes에 앱을 배포할 때, 일반적으로 서비스 및 인그레스와 같은 Kubernetes 리소스를 사용하여 원하는 도메인에서 Kubernetes 클러스터 외부에 앱을 노출합니다. 여기에는 많은 수동 구성이 필요하며 공급자의 DNS 레코드도 포함되므로 시간이 많이 걸리고 오류가 발생할 수 있습니다. 애플리케이션이 복잡해지고 외부 IP가 변경되면 그에 따라 DNS 레코드를 업데이트해야 하므로 이는 곧 걸림돌이 될 수 있습니다.

이 문제를 해결하기 위해 쿠버네티스 시그-네트워크 팀 를 만들었습니다. 외부 DNS 솔루션을 사용하여 Kubernetes 클러스터 내에서 자율적인 방식으로 외부 DNS 레코드를 관리할 수 있습니다. 외부 DNS를 배포하면 백그라운드에서 작동하며 추가 구성이 거의 필요하지 않습니다. 외부 DNS 공급자를 통해 쿠버네티스 리소스를 검색할 수 있도록 쿠버네티스 외부의 DNS 공급자에 DNS 레코드를 생성하며, DNS 공급자에 구애받지 않고 동적으로 DNS 레코드를 제어할 수 있습니다. 서비스 또는 인그레스가 생성 또는 업데이트되는 것을 발견할 때마다 외부 DNS 컨트롤러는 레코드를 즉시 업데이트합니다.

네트워크 아키텍처를 위해 외부 DNS 전략과 함께 공용 네트워킹을 사용하여 Couchbase 데이터베이스를 배포하는 동안 Couchbase 클러스터 노드는 공용 IP 주소가 할당된 로드 밸런서 서비스를 사용하여 노출됩니다. 그런 다음 외부 DNS 컨트롤러는 클라우드 기반 제공업체에서 동적 DNS(DDNS)를 관리하여 안정적인 주소 지정과 TLS의 기반을 제공합니다.

이제 실제로 확인해 보겠습니다!

이제 EKS에서 Autonomous Operator 2.0을 사용하여 Couchbase 클러스터를 배포하고 외부 DNS를 통해 관리되는 공용 네트워킹을 통해 Couchbase 클러스터에 액세스하는 단계를 살펴보겠습니다. 다음은 배포 아키텍처에 대한 간략한 개요입니다.

Public Networking with Couchbase Autonomous Operator using Kubernetes External DNS

쿠버네티스 외부 DNS를 사용하는 카우치베이스 자율 운영자와의 퍼블릭 네트워킹

전제 조건

시작하기 전에 몇 가지 중요한 전제 조건이 있습니다.

  1. 설치 및 설정 kubectl 로컬 머신에서 - kubectl은 쿠버네티스 클러스터에 대한 명령을 실행하기 위한 명령줄 인터페이스입니다. 
  2. 최신 설치 AWS CLI - AWS CLI는 명령줄 셸에서 명령을 사용하여 AWS 서비스와 상호 작용할 수 있는 통합 도구입니다. 여기서는 AWS에서 실행 중인 Kubernetes 클러스터와 안전하게 통신하기 위해 AWS CLI를 사용하겠습니다.
  3. EKS 클러스터를 배포합니다. 그리고 EKS 클러스터 를 사용하여 배포할 수 있습니다. AWS 콘솔 또는 eksctl. 이 문서에서는 EKS 클러스터를 다음과 같이 배포합니다. US-EAST-1 리전에는 아래와 같이 3개의 가용 영역에 3개의 워커 노드가 있습니다.

4. 4. 공개 DNS 도메인이 필요합니다. 도메인은 다음과 같은 등록기관에서 구매할 수 있습니다. GoDaddy, AWS 루트 53, Namecheap등 이 글에서는 제가 직접 등록한(GoDaddy) 도메인을 사용하고 있습니다. balajiacloud.guru 계속 진행하기 전에 여러분의 것을 가져오는 것이 좋습니다.

5. 마지막으로 외부 DNS 공급자가 필요합니다. Couchbase 클러스터의 수명 주기 동안 클러스터 확장, 업그레이드 또는 장애 복구를 위해 노드를 추가 및 제거할 수 있습니다. 각 인스턴스에서 새로 생성되는 모든 Couchbase 파드에 대해 새 DNS 이름을 만들거나 삭제되는 파드에서 DNS 이름을 제거해야 합니다. DDNS 공급자는 쿠버네티스의 외부 DNS 컨트롤러가 쿠치베이스 클러스터의 모양을 공용 DNS와 동기화할 수 있는 REST API를 노출한다. 

다음은 문서화되고 알려진 모든 목록입니다. 외부 DNS 솔루션을 소개합니다. 이 문서에서는 다음을 사용할 것입니다. Cloudflare 를 외부 DNS 공급업체로 지정합니다. Cloudflare를 외부 DNS 공급업체로 사용하려는 경우, Cloudflare 계정을 만들고 해당 계정에 DNS 도메인을 추가해야 합니다.

Couchbase Autonomous Operator using Kubernetes External DNS

TLS 인증서 만들기

운영자는 사용자가 Couchbase 클러스터를 안전하게 구성하도록 보장합니다. 운영자는 클러스터가 공용 인터넷에 노출되는 것을 감지하면 TLS 암호화를 적용합니다. 

TLS 인증서를 생성하기 전에 Couchbase 클러스터가 어떤 DNS 도메인에 속할지 결정해야 합니다. 저희의 balajiacloud.guru 를 직접 사용할 수 있지만, 이 도메인은 단일 Couchbase 클러스터에서만 사용할 수 있습니다. 따라서 다음과 같은 하위 도메인을 사용해야 합니다. cbdemo.balajiacloud.guru 를 클러스터의 고유 네임스페이스로 사용합니다. 일반적으로 와일드카드 DNS 이름(*.cbdemo.balajiacloud.guru)은 운영자가 생성한 모든 공개 DNS 이름을 처리합니다. 이 이름을 Couchbase 클러스터 인증서에 추가해야 합니다.

우리는 EasyRSA 를 클릭해 TLS 인증서를 생성합니다. OpenVPN의 EasyRSA는 공개 키 인프라(PKI)를 비교적 간단하게 운영할 수 있으며, 빠르게 시작하고 실행하는 데 권장되는 방법입니다.

1. 라는 디렉터리를 만들어 보겠습니다. tls 를 클릭하고 EasyRSA 리포지토리를 복제합니다.

2. CA 인증서/키를 초기화하고 생성합니다. 다음과 같이 개인 키 비밀번호와 CA 일반 이름(CN)을 입력하라는 메시지가 표시됩니다. Couchbase CA 로 충분합니다. CA 인증서는 pki/ca.crt로 사용할 수 있습니다.

3. 카우치베이스 클러스터 서버 인증서를 생성합니다.

서버 와일드카드 인증서와 Couchbase Server 포드에서 사용할 키를 만들어야 합니다. 이 문서에서는 아래 명령을 사용하여 Couchbase 클러스터에 대한 인증서를 생성합니다. cbopedns 에서 데모 네임스페이스를 사용하고 cbdemo.balajiacloud.guru 하위 도메인.

참고: 비밀번호로 보호된 키는 Couchbase Server 또는 운영자에서 지원하지 않습니다.

키/인증서 쌍은 다음에서 찾을 수 있습니다. pki/private/couchbase-server.key 그리고 pki/issued/couchbase-server.crt 로 사용되며 pkey.key 그리고 chain.pem에서 각각 spec.networking.tls.static.serverSecret 클러스터 매개변수입니다.

4. 개인 키 포맷 - 다음과 같은 이유로 제한 카우치베이스 서버의 개인키를 처리하는 경우 서버 키는 PKCS#1 형식이어야 합니다.

먼저 .key 파일과 .pem 파일을 tls 디렉토리에 쉽게 액세스할 수 있습니다.

이제 서버 키를 포맷해 보겠습니다.

이 키를 사용하여 Couchbase 클러스터 서버 비밀을 생성합니다.

카우치베이스 자율 운영자 2.0 배포(최신)

Kubernetes용 Couchbase 자율 운영자는 클라우드 이동성을 가능하게 하고 Couchbase 배포 및 관리를 위한 운영 모범 사례를 자동화합니다.

오퍼레이터는 클러스터별 DAC(동적 허용 컨트롤러)와 네임스페이스별 오퍼레이터의 두 가지 구성 요소로 이루어져 있습니다. 오퍼레이터는 운영자 아키텍처 를 참조하여 필요한 사항 및 보안 고려 사항에 대한 자세한 내용을 확인하세요.

1. 운영자 패키지 다운로드

최신 카우치베이스 자율 운영자 패키지를 다운로드하여 로컬 컴퓨터에 압축을 풉니다. 오퍼레이터 패키지에는 오퍼레이터를 설치하는 데 사용할 YAML 구성 파일과 명령줄 도구가 포함되어 있습니다.

2. 사용자 지정 리소스 정의(CRD)를 설치합니다.

Operator를 설치하는 첫 번째 단계는 Couchbase 리소스 유형을 설명하는 사용자 정의 리소스 정의(CRD)를 설치하는 것입니다. Operator 패키지 디렉토리에서 아래 명령을 실행하면 됩니다:

3. 동적 입장 컨트롤러(DAC)를 설치합니다.

DAC를 사용하면 리소스를 수락하고 커밋하기 전에 사용자 지정 리소스를 수정하고 조사할 수 있습니다. etcd. DAC를 실행하면 Couchbase 클러스터 구성에 합리적인 기본값을 추가하여 사양의 크기를 최소화할 수 있습니다. 또한 새로운 속성이 추가되어 이를 채워야 할 때 이전 버전과의 호환성을 유지할 수 있습니다. 이를 통해 기본 리소스 유형과 유사한 Couchbase 리소스 사용 환경을 만들 수 있습니다.

이제 동적 입장 컨트롤러를 설치해 보겠습니다.

터미널 창을 열고 오퍼레이터 패키지의 압축을 푼 디렉터리로 이동한 다음 cd 를 bin 폴더에 복사합니다. 다음 명령을 실행하여 다음 폴더에 DAC를 설치합니다. 기본값 네임스페이스.

입장 컨트롤러가 성공적으로 배포되었는지 확인합니다.

4. 네임스페이스 만들기

네임스페이스는 클러스터 리소스를 할당하고 여러 애플리케이션 간에 네트워크 및 보안 정책을 설정하는 방법입니다. 다음과 같은 고유 네임스페이스를 만들겠습니다. 데모 를 사용하여 Operator를 배포하고 나중에 데모 네임스페이스를 사용하여 Couchbase 클러스터를 배포합니다.

다음 명령을 실행하여 네임스페이스를 만듭니다.

네임스페이스가 성공적으로 생성되었는지 확인합니다.

5. TLS 구성

비밀은 CouchbaseCluster 리소스에 지정되어 있으며, Couchbase 클러스터를 배포하는 동안 클러스터 정의 YAML에서 이를 확인할 수 있습니다.

서버 비밀

서버 시크릿은 특정 이름을 가진 Couchbase Server 포드 내에 볼륨으로 마운트해야 합니다. 인증서 체인의 이름은 chain.pem 로 설정하고 개인 키를 pkey.key. 아래 명령을 실행하여 Couchbase 서버 시크릿을 생성합니다.

운영자 비밀

오퍼레이터 클라이언트 비밀은 API에서 직접 읽습니다. 단 하나의 값만 존재할 것으로 예상합니다; ca.crt 는 모든 TLS 서버 인증서 체인을 인증하는 데 사용되는 최상위 CA입니다. 아래 명령을 실행하여 오퍼레이터 시크릿을 생성합니다.

6. 카우치베이스 운영자 설치

이제 오퍼레이터를 배포해 보겠습니다. 데모 네임스페이스를 생성하려면 Operator 패키지 디렉터리의 bin 폴더에서 다음 명령을 실행합니다.

위 명령을 실행하면 오퍼레이터 도커 이미지가 다운로드되고 배포는 오퍼레이터의 단일 인스턴스를 관리합니다. 오퍼레이터 파드는 장애 발생 시 쿠버네티스가 다시 초기화될 수 있도록 런-as 디플로이먼트입니다.

실행한 후 kubectl 생성 명령어를 사용하면 일반적으로 쿠버네티스가 오퍼레이터를 배포하고 오퍼레이터를 실행할 준비가 되는 데 1분도 채 걸리지 않습니다.

운영자 배포 상태 확인

다음 명령을 사용하여 배포 상태를 확인할 수 있습니다:

오퍼레이터가 배포된 직후에 이 명령을 실행하면 출력에는 사용 가능 열을 0으로 설정합니다. 그러나 AVAILABLE 필드는 값이 1이 아닌 0이므로 아직 파드가 준비되지 않았음을 나타냅니다.

다음 명령을 실행하여 오퍼레이터 파드가 성공적으로 시작되었는지 확인합니다. 오퍼레이터가 시작되고 실행 중이면, 이 명령은 출력을 반환하며, 이 출력은 READY 필드 표시 1/1와 같이:

또한 아래 명령을 실행하여 로그를 확인하여 운영자가 실행 중인지 확인할 수도 있습니다.

외부 DNS 배포

네임스페이스에 오퍼레이터를 배포하기 위해 위의 단계를 이미 완료했다고 가정합니다. 데모 네임스페이스를 설치했다면 다음으로 설치해야 할 것은 외부 DNS 컨트롤러입니다. 운영자가 Couchbase Server 포드에서 생성하기 전에 DNS 전파를 기다릴 것이므로 이 컨트롤러는 Couchbase 클러스터보다 먼저 설치해야 합니다. 이는 트래픽을 제공하고 애플리케이션 오류를 방지하려면 클라이언트가 Couchbase Server 포드에 연결할 수 있어야 하기 때문입니다.

1. 운영자를 설치할 네임스페이스에서 외부 DNS 컨트롤러에 대한 서비스 계정을 만듭니다.

2. 외부 DNS 컨트롤러가 리소스를 폴링하고 DDNS 공급업체에 복제할 DNS 레코드를 찾으려면 역할이 필요합니다. 

3. 이제 외부 DNS 역할을 서비스 계정에 연결합니다.

4. 마지막 단계는 외부 DNS를 배포하는 것입니다. 배포에 맞게 아래 값을 업데이트하는 것을 잊지 마세요.

    • 그리고 spec.template.spec.serviceAccountName 속성은 외부 DNS 포드가 설정한 서비스 계정으로 실행되도록 합니다. 이렇게 하면 컨트롤러에 리소스를 폴링하고 DDNS 요청을 찾을 수 있는 권한이 부여됩니다.
    • 그리고 -도메인 필터 인수를 지정하면 외부 DNS가 우리의 balajiacloud.guru 도메인.
    • 그리고 -txt-owner-id 인수는 외부 DNS가 외부 DNS 인스턴스 고유의 문자열로 TXT 관리 레코드에 레이블을 지정하도록 지시합니다. 외부 DNS는 TXT 레코드를 사용하여 메타데이터, 특히 관리 중인 DNS 레코드와 관련된 소유권 정보를 기록합니다. 만약 balajiacloud.guru 도메인을 소유권을 지정하지 않고 외부 DNS의 여러 인스턴스에서 사용하는 경우 서로 충돌하게 됩니다.
    • 그리고 CF_API_KEY 환경 변수는 Cloudflare 공급자가 Cloudflare API에 대해 인증하는 데 사용됩니다.
    • 그리고 CF_API_EMAIL 환경 변수는 Cloudflare 공급자가 Cloudflare API에 사용할 계정을 식별하는 데 사용됩니다.

CF_API_KEY는 Cloudfare 계정의 개요 페이지에서 얻을 수 있습니다. 아래 그림과 같이 "API 토큰 받기" 링크를 클릭한 후 글로벌 API 키.

External DNS provider

외부 DNS 배포

마지막으로 아래 명령을 실행하여 외부 DNS 배포를 설치합니다.

외부 DNS 배포 상태 확인

다음 명령을 사용하여 배포 상태를 확인할 수 있습니다:

다음 명령을 실행하여 external-dns가 성공적으로 시작되었는지 확인합니다. external-dns가 시작되고 실행 중이면 이 명령은 다음과 같은 출력을 반환합니다. 러닝 필드 표시 1/1와 같이:

로그를 확인하여 외부 DNS가 실행 중인지 확인할 수도 있습니다.

이제 외부 DNS를 성공적으로 배포했습니다.

Couchbase 클러스터 배포

이제 카우치베이스 자율 운영자와 외부 DNS를 EKS에 배포했으니 이제 카우치베이스 클러스터를 배포해 보겠습니다.

최소한의 필수 구성 매개변수를 사용하여 3개의 가용 영역에 3개의 데이터 노드가 있는 Couchbase 클러스터를 배포합니다. 이 경우 공용 네트워킹 구성 를 클릭해 필요한 구성 옵션을 확인하세요. 

카우치베이스 관리 콘솔용 시크릿 만들기

로그인 시 관리 웹 콘솔에서 사용할 비밀 자격 증명을 생성해 보겠습니다. 쿠버네티스 클러스터에서 아래 시크릿을 생성하면, 이 시크릿은 사용자 이름을 다음과 같이 설정합니다. 관리자 에 비밀번호를 입력하고 비밀번호.

Couchbase 클러스터 정의 배포하기

기본값을 사용하겠습니다. StorageClass 다음 명령을 실행하여 확인해 보겠습니다. 요구 사항을 충족하는 스토리지 클래스를 만들 수 있습니다.

오퍼레이터를 사용하여 Couchbase Server 클러스터를 배포하려면, 클러스터의 모양(예: 노드 수, 서비스 유형, 시스템 리소스 등)을 설명하는 Couchbase 클러스터 정의를 생성한 다음 해당 클러스터 정의를 Kubernetes에 푸시하기만 하면 됩니다. 

Operator 패키지에는 CouchbaseCluster 정의 파일(couchbase-cluster.yaml) 예제가 포함되어 있습니다.

아래 클러스터 정의는 퍼시스턴트 볼륨을 사용하여 3개의 서로 다른 영역에 3개의 데이터 파드가 있는 Couchbase 클러스터를 배포합니다. 이 클러스터는 카우치베이스 클러스터 리소스 문서에서 클러스터 구성의 전체 목록을 확인하세요.

구성을 받으면 운영자는 자동으로 클러스터를 만들기 시작합니다. 클러스터를 만드는 데 걸리는 시간은 구성에 따라 다릅니다. 클러스터 생성의 진행 상황을 추적하려면 클러스터 상태.

배포 확인

진행 상황을 확인하려면 아래 명령어를 실행하여 파드 생성 진행 상황을 감시(-w 인수)합니다. 모든 것이 정상적으로 진행되면 Couchbase 클러스터 정의에 따라 서비스를 호스팅하는 세 개의 Couchbase 클러스터 파드가 생깁니다.

어떤 이유로든 예외가 발생하면 couchbase-operator 로그 파일에서 예외에 대한 세부 정보를 확인할 수 있습니다. 로그의 마지막 20줄을 표시하려면 Operator 파드의 이름을 복사한 후 Operator 파드 이름을 사용자 환경의 이름으로 바꾸어 아래 명령을 실행하세요.

외부-dns 로그를 확인하여 Couchbase 포드에 대한 DNS 레코드가 생성되고 있는지 확인해 보겠습니다.

이 시점에서 다음 주소로 로그인하여 DNS 페이지를 확인할 수도 있습니다. 클라우드 요금제 계정으로 이동합니다. 외부 DNS 공급업체에서 추가한 CNAME 및 TXT 레코드를 볼 수 있습니다.

External DNS provider

Couchbase 웹 콘솔에 액세스하기

이제 공개적으로 주소 지정이 가능한 클러스터가 생겼으니 사용을 시작할 수 있습니다. EKS 환경에서는 특정 파드의 노출된 LoadBalancer 서비스를 통해 Couchbase 웹 콘솔에 액세스할 수 있습니다. URL https://cbopedns-0000.cbdemo.balajiacloud.guru:18091/(환경에 따라 포드 이름과 DNS 도메인을 교체)을 사용하여 Couchbase 콘솔에 연결할 수 있어야 합니다.

다음을 참조하세요. Couchbase 서버 사용자 인터페이스에 액세스 문서를 참조하여 Couchbase 콘솔에 연결하는 방법에 대한 자세한 내용을 확인하세요. 또한 다음을 확인할 수 있습니다. 클라이언트 SDK 구성 외부 DNS로 DNS 기반 주소 지정을 사용하면서 클라이언트 SDK를 Couchbase 클러스터와 연결하는 방법에 대한 자세한 내용은 다음을 참조하세요.

Publicly addressable Couchbase cluster

결론

이 블로그에서는 쿠버네티스 외부 DNS와 함께 쿠치베이스 오퍼레이터를 사용하여 쿠치베이스 클러스터를 공개적으로 주소 지정할 수 있는 방법을 살펴보았습니다. 그리고 외부 DNS 솔루션이 어떻게 Kubernetes 클러스터 내에서 외부 DNS 레코드를 동적으로 관리하는 데 도움이 되는지에 대해 설명했습니다. 이 글에서는 Amazon EKS를 쿠버네티스 환경으로 사용했지만, AKS, GKE, OpenShift 등과 같은 다른 쿠버네티스 환경을 사용하는 경우에도 동일한 단계를 적용할 수 있습니다.

리소스

 

이 문서 공유하기
받은 편지함에서 카우치베이스 블로그 업데이트 받기
이 필드는 필수 입력 사항입니다.

작성자

게시자 발라지 나라야난, 솔루션 아키텍트, 카우치베이스

발라지 나라야난은 카우치베이스의 CoE 팀에서 솔루션 아키텍트로 일하고 있습니다. 그는 Java/Java EE 기술 및 클라우드 플랫폼을 사용한 엔터프라이즈 애플리케이션 설계, 개발 및 구현에 대한 깊은 전문 지식을 보유하고 있습니다. 그는 솔루션 아키텍처를 개발하고 AWS, Azure, GCP 클라우드 플랫폼을 사용하여 클라우드 아키텍처를 구현하기 위한 솔루션을 설계한 광범위한 경험을 보유하고 있습니다. 프라이빗, 퍼블릭 및 하이브리드 클라우드 모델을 위한 아키텍처 대안을 설계하고 평가하는 데 전문성을 보유하고 있습니다. 그는 AWS와 Kubernetes의 공인 전문가입니다. Couchbase에 합류하기 전에는 Microsoft에서 Azure 클라우드 네이티브 서비스를 위한 IaaS 및 PaaS 플랫폼을 구축하는 업무를 담당했습니다. 인도 안나 대학교에서 정보 기술 학사 학위를 받았습니다.

댓글 하나

  1. 감사합니다 발라지. 유용합니다.

    새 공인 DNS 도메인을 등록해야 하나요? aws 도메인(예: ap-south-1.elb.amazonaws.com)은 사용할 수 없고 하위 도메인을 사용할 수 있나요?

댓글 남기기

카우치베이스 카펠라를 시작할 준비가 되셨나요?

구축 시작

개발자 포털에서 NoSQL을 살펴보고, 리소스를 찾아보고, 튜토리얼을 시작하세요.

카펠라 무료 사용

클릭 몇 번으로 Couchbase를 직접 체험해 보세요. Capella DBaaS는 가장 쉽고 빠르게 시작할 수 있는 방법입니다.

연락하기

카우치베이스 제품에 대해 자세히 알고 싶으신가요? 저희가 도와드리겠습니다.