为 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 命名空间的名称。

输出类似于以下内容:

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:数据库集群验证输出中的主端点值与负载平衡器的入站控制器值匹配

后续步骤