為 Kubernetes 中的 AlloyDB Omni 設定負載平衡器

選取說明文件版本:

本頁面將摘要說明如何使用 AlloyDB Omni spec 在 AlloyDB Omni 中設定負載平衡器。在 Google Kubernetes Engine (GKE) 中,系統預設建立的負載平衡器屬於外部類型,並繫結外部 IP 位址,允許來自網際網路的連線。不過,如果負載平衡器資訊清單的 metadata.annotations[] 欄位中包含 networking.gke.io/load-balancer-type: "internal" 註解,GKE 就會建立內部負載平衡器。

不同平台會提供各自的註解,用於建立特定類型的負載平衡器。您可以使用資料庫叢集資訊清單的 spec 區段,在 AlloyDB Omni 中指定負載平衡器註解。建立資料庫叢集時,資料庫控制器會將這些註解新增至負載平衡器 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:資料庫叢集驗證輸出中的主要端點值,與負載平衡器的 Ingress 控制器值相符

後續步驟