Kubernetes에서 AlloyDB Omni용 부하 분산기 구성

이 페이지에서는 AlloyDB Omni spec를 사용하여 AlloyDB Omni에서 부하 분산기를 구성하는 방법을 요약합니다. Google Kubernetes Engine (GKE)에서 기본적으로 생성된 부하 분산기는 외부 유형이며 외부 IP 주소에 바인딩되어 인터넷에서 연결을 허용합니다. 하지만 networking.gke.io/load-balancer-type: "internal" 주석이 부하 분산기 매니페스트의 metadata.annotations[] 필드에 포함된 경우 GKE는 내부 부하 분산기를 만듭니다.

플랫폼마다 특정 유형의 부하 분산기를 만들기 위한 자체 주석을 제공합니다. AlloyDB Omni를 사용하면 데이터베이스 클러스터 매니페스트의 spec 섹션을 사용하여 부하 분산기 주석을 지정할 수 있습니다. 데이터베이스 컨트롤러는 데이터베이스 클러스터를 만들 때 이러한 주석을 부하 분산기 spec에 추가합니다.

데이터베이스 사양을 사용하여 내부 부하 분산기 만들기

DBCluster 매니페스트의 spec 섹션에서 dbLoadBalancerOptions 필드를 구성하여 내부 부하 분산기를 만들 수 있습니다.

Kubernetes

주석은 부하 분산기의 유형과 속성을 정의합니다. 내부 부하 분산기에는 다음 주석이 있어야 합니다.

networking.gke.io/load-balancer-type: "internal"

동일한 프로젝트 내에서 GKE 클러스터 외부에서 연결을 허용하는 내부 부하 분산기를 만들려면 다음 매니페스트를 적용합니다.

kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
  name: db-pw-DB_CLUSTER_NAME
type: Opaque
data:
  DB_CLUSTER_NAME: "ENCODED_PASSWORD"
---
apiVersion: alloydbomni.dbadmin.goog/v1
kind: DBCluster
metadata:
  name: DB_CLUSTER_NAME
spec:
  databaseVersion: "15.5.0"
  primarySpec:
    adminUser:
      passwordRef:
        name: db-pw-DB_CLUSTER_NAME
    resources:
      memory: 5Gi
      cpu: 1
      disks:
      - name: DataDisk
        size: 10Gi
    dbLoadBalancerOptions:
      annotations:
        networking.gke.io/load-balancer-type: "internal"
  allowExternalIncomingTraffic: true
EOF

다음을 바꿉니다.

이 매니페스트에서 각 항목은 다음을 수행합니다.

  • networking.gke.io/load-balancer-type: "internal": 데이터베이스 클러스터에 대한 GKE 내부 부하 분산기 주석
  • allowExternalIncomingTraffic: true: allowExternalIncomingTraffic 필드가 true로 설정되어 Kubernetes 클러스터 외부에서 들어오는 트래픽을 허용합니다.

데이터베이스 클러스터 및 연결 세부정보 가져오기

Kubernetes

데이터베이스 클러스터 리소스가 Ready 상태인지 확인하려면 다음 명령어를 사용합니다.

kubectl get dbclusters.alloydbomni.dbadmin.goog -n NAMESPACE -w

출력은 다음과 비슷합니다.

NAME               PRIMARYENDPOINT   PRIMARYPHASE   DBCLUSTERPHASE
DB_CLUSTER_NAME    10.95.0.84        Ready          DBClusterReady

다음과 같이 부하 분산기 서비스에 내부 부하 분산기의 주석과 IP 주소가 있는지 확인합니다.

 $ kubectl get svc LOAD_BALANCER_SERVICE_NAME -n NAMESPACE -o yaml
 

다음을 바꿉니다.

  • LOAD_BALANCER_SERVICE_NAME: 외부 네트워크에서 액세스할 수 있는 고유한 IP 주소를 만드는 부하 분산기 서비스의 이름입니다.
  • NAMESPACE: 부하 분산기 서비스의 Kubernetes 네임스페이스 이름입니다.

출력은 다음과 비슷합니다.

apiVersion: v1
kind: Service
metadata:
  annotations:
    cloud.google.com/neg: '{"ingress":true}'
    networking.gke.io/load-balancer-type: internal
  creationTimestamp: "2024-02-22T15:26:18Z"
  finalizers:
  − gke.networking.io/l4-ilb-v1
  − service.kubernetes.io/load-balancer-cleanup
  labels:
    alloydbomni.internal.dbadmin.gdc.goog/dbcluster: DB_CLUSTER_NAME
    alloydbomni.internal.dbadmin.gdc.goog/dbcluster-ns: NAMESPACE
    alloydbomni.internal.dbadmin.gdc.goog/instance: ad98-foo
    alloydbomni.internal.dbadmin.gdc.goog/task-type: database
    egress.networking.gke.io/enabled: "true"
  name: LOAD_BALANCER_SERVICE_NAME
  namespace: NAMESPACE
 ownerReferences:
  − apiVersion: alloydbomni.dbadmin.goog/v1
    blockOwnerDeletion: true
    controller: true
    kind: DBCluster
    name: DB_CLUSTER_NAME
    uid: 2dd76c9f-7698-4210-be41-6d2259840a85
  resourceVersion: "33628320"
  uid: 1f45362b-6d6f-484d-ad35-11c14e91933e
spec:
  allocateLoadBalancerNodePorts: true
  clusterIP: 10.60.4.76
  clusterIPs:
  − 10.60.4.76
  externalTrafficPolicy: Cluster
  internalTrafficPolicy: Cluster
  ipFamilies:
  − IPv4
  ipFamilyPolicy: SingleStack
  loadBalancerSourceRanges:
  − 0.0.0.0/0
  ports:
  − name: db
    nodePort: 31453
    port: 5432
    protocol: TCP
    targetPort: 5432
  selector:
    alloydbomni.internal.dbadmin.gdc.goog/dbcluster: DB_CLUSTER_NAME
    alloydbomni.internal.dbadmin.gdc.goog/dbcluster-ns: NAMESPACE
    alloydbomni.internal.dbadmin.gdc.goog/instance: ad98-foo
    alloydbomni.internal.dbadmin.gdc.goog/task-type: database
    egress.networking.gke.io/enabled: "true"
  sessionAffinity: None
  type: LoadBalancer
status:
  loadBalancer:
    ingress:
    − ip: 10.95.0.84

출력에는 다음과 같은 속성이 있습니다.

  • networking.gke.io/load-balancer-type: internal: 부하 분산기 서비스에 내부 부하 분산기가 있어야 합니다.
  • ip: 데이터베이스 클러스터의 확인 출력에서 기본 엔드포인트 값이 로드 밸런서의 인그레스 컨트롤러 값과 일치함

다음 단계