Kubernetes의 AlloyDB Omni 연결 개요

이 개요에서는 Kubernetes 클러스터에 배포된 AlloyDB Omni 데이터베이스의 중요한 연결 및 액세스 구성을 설명하고 유연하고 안전한 연결을 설정하는 방법을 자세히 설명합니다. 연결에는 다음 영역이 포함됩니다.

  • 네트워킹: Kubernetes ClusterIP 서비스를 사용한 내부 액세스 또는 LoadBalancer을 사용한 외부 액세스를 위해 AlloyDB Omni 데이터베이스 클러스터를 구성하는 방법을 알아봅니다. 여기에는 소스 클래스 없는 도메인 간 라우팅 (CIDR) 범위를 사용하여 외부 트래픽을 제한하는 방법이 포함됩니다.
  • 연결 풀링: PgBouncer 맞춤 리소스를 사용하여 효율적인 연결 관리와 데이터베이스 인스턴스의 부하 감소를 위한 연결 풀링을 구현합니다.
  • 인증 및 승인: 비밀번호 기반 및 Active Directory/Kerberos 통합과 같은 지원되는 방법을 사용하여 안전하게 액세스하고 Kubernetes 네트워크 정책 및 PostgreSQL 역할을 통해 세부적인 제어를 구현합니다.

네트워킹

DBCluster 커스텀 리소스에서 관리하는 AlloyDB Omni 데이터베이스 클러스터를 내부 또는 외부 액세스용으로 구성할 수 있습니다.

DBCluster 네트워킹 옵션에 관한 자세한 내용은 DBCluster CRD 참조를 참고하세요.

내부 연결

기본적으로 AlloyDB Omni 인스턴스는 Kubernetes ClusterIP 서비스를 사용하여 노출됩니다. 이렇게 하면 동일한 Kubernetes 클러스터에서 실행되는 다른 애플리케이션만 인스턴스에 액세스할 수 있습니다. 기본 인스턴스의 엔드포인트는 DBCluster 상태에서 확인할 수 있습니다.

외부 연결

Kubernetes 클러스터 외부에서 연결을 허용하려면 DBCluster 사양을 업데이트하세요.

  • 외부 트래픽 사용 설정: 일반적으로 LoadBalancer 서비스를 프로비저닝하는 spec.allowExternalIncomingTraffic: true를 설정합니다.
  • 세분화된 제어 구현: spec.primarySpec.dbLoadBalancerOptions 사용 예를 들어 Google Cloud에서 gcp.loadBalancerType: "External"를 설정하여 공개 인터넷에서 액세스할 수 있는 IP 주소를 가져옵니다.

액세스 제한

외부 연결을 보호하려면 spec.primarySpec.sourceCidrRanges를 사용하여 허용된 CIDR 범위 목록을 정의하세요. 시스템은 이러한 범위 밖의 IP 주소에서 시작되는 연결을 차단합니다.

PgBouncer를 사용한 연결 풀링

연결을 효율적으로 관리하고 인스턴스 부하를 줄이려면 PgBouncer를 사용하세요. AlloyDB Omni 연산자는 이 작업을 간소화하기 위해 PgBouncer 커스텀 리소스 (CR)를 제공합니다.

PgBouncer 구성에 관한 자세한 내용은 PgBouncer CRD 참조를 참고하세요.

배포 및 구성

PgBouncer 리소스를 만들고 spec.dbclusterRef에서 데이터베이스 클러스터를 참조합니다. spec.parameters의 주요 매개변수는 다음과 같습니다.

  • pool_mode: 연결이 재사용되는 시점을 결정합니다 (session, transaction 또는 statement).
  • default_pool_size: 사용자 및 데이터베이스당 서버 연결 수입니다.
  • max_client_conn: 허용되는 최대 클라이언트 연결 수입니다.
  • max_db_connections: AlloyDB Omni 인스턴스에 열린 최대 연결 수입니다.

PgBouncer 노출

spec.serviceOptions.type을 사용하여 공개 상태를 제어합니다.

  • ClusterIP: 내부 클러스터 액세스만 허용됩니다.
  • LoadBalancer: 외부 액세스 CIDR 블록을 사용하여 spec.serviceOptions.loadBalancerSourceRanges로 이를 제한할 수 있습니다.

인증 및 승인

AlloyDB Omni는 ID를 확인하고 액세스를 제어하는 여러 방법을 지원합니다.

인증 방식

  • 비밀번호 기반: 표준 PostgreSQL 사용자 이름 및 비밀번호 인증입니다. 관리자 비밀번호는 일반적으로 전체 DBCluster 샘플에 표시된 대로 Kubernetes 보안 비밀을 사용하여 제공됩니다.
  • Active Directory 및 Kerberos: UserDefinedAuthentication CR을 사용하여 관리됩니다. 이를 통해 다음을 사용하여 GSSAPI 및 LDAP 그룹 동기화를 지원합니다.

    • spec.keytabSecretRef: Kerberos keytab의 경우
    • spec.ldapConfiguration: 그룹 매핑 및 LDAP 설정
    • spec.pgHbaEntries: pg_hba.conf 규칙을 구성합니다(예: gss 또는 ldap).

    자세한 내용은 UserDefinedAuthentication CRD 참조를 참고하세요.

  • 인증서 기반 (계획됨): 비밀번호 없는 TLS 인증서 인증은 향후 출시에서 지원될 예정입니다.

승인 및 액세스 제어

  • Kubernetes 네트워크 정책: 애플리케이션과 AlloyDB Omni 또는 PgBouncer 포드 간 트래픽을 보호하기 위한 포드 수준 규칙을 정의합니다.
  • 소스 CIDR 범위: LoadBalancer 수준에서 트래픽을 제한합니다.
  • PostgreSQL 역할: 사용자가 인증된 후 표준 데이터베이스 역할과 권한을 사용하여 사용자 권한을 관리합니다.

다음 단계