Kubernetes で AlloyDB Omni のロードバランサを構成する

このページでは、AlloyDB Omni spec を使用して AlloyDB Omni でロードバランサを構成する方法について説明します。Google Kubernetes Engine(GKE)では、デフォルトで作成されるロードバランサは外部タイプで、外部 IP アドレスにバインドされ、インターネットからの接続を許可します。ただし、ロードバランサ マニフェストの metadata.annotations[] フィールドに networking.gke.io/load-balancer-type: "internal" アノテーションが含まれている場合、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

次のように置き換えます。

  • DB_CLUSTER_NAME: データベース クラスタの名前。これは、作成時に宣言したデータベース クラスタ名と同じです。

このマニフェストの内容:

  • 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 Namespace の名前。

出力は次のようになります。

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: データベース クラスタの検証出力内のプライマリ エンドポイント値が、ロードバランサの Ingress コントローラ値と一致している

次のステップ