本页面简要介绍了如何使用 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
:数据库集群验证输出中的主端点值与负载平衡器的入站控制器值匹配