Configura un bilanciatore del carico per AlloyDB Omni su Kubernetes

Questa pagina riassume come configurare un bilanciatore del carico in AlloyDB Omni utilizzando spec AlloyDB Omni. In Google Kubernetes Engine (GKE), un bilanciatore del carico creato per impostazione predefinita è di tipo esterno e associato all'indirizzo IP esterno per consentire le connessioni da internet. Tuttavia, se l'annotazione networking.gke.io/load-balancer-type: "internal" è inclusa nel campo metadata.annotations[] del manifest del bilanciatore del carico, GKE crea un bilanciatore del carico interno.

Le diverse piattaforme forniscono le proprie annotazioni per creare il tipo specifico di bilanciatore del carico. AlloyDB Omni ti consente di specificare le annotazioni del bilanciatore del carico utilizzando la sezione spec del manifest del cluster di database. Il controller del database aggiunge queste annotazioni al bilanciatore del carico spec durante la creazione di un cluster di database.

Creare un bilanciatore del carico interno utilizzando la specifica del database

Puoi creare un bilanciatore del carico interno configurando il campo dbLoadBalancerOptions nella sezione spec del manifest DBCluster.

Kubernetes

Le annotazioni definiscono il tipo e le proprietà di un bilanciatore del carico. Un bilanciatore del carico interno richiede la presenza della seguente annotazione:

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

Per creare un bilanciatore del carico interno che consenta le connessioni dall'esterno del cluster GKE all'interno dello stesso progetto, applica il seguente manifest:

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

Sostituisci quanto segue:

  • DB_CLUSTER_NAME: il nome del cluster di database. Si tratta dello stesso nome del cluster di database che hai dichiarato quando lo hai creato.

In questo manifest:

  • networking.gke.io/load-balancer-type: "internal": l'annotazione del bilanciatore del carico interno GKE per il cluster di database
  • allowExternalIncomingTraffic: true: il campo allowExternalIncomingTraffic è impostato su true per consentire il traffico in entrata dall'esterno del cluster Kubernetes

Ottenere i dettagli del cluster e della connettività del database

Kubernetes

Per verificare che la risorsa del cluster di database sia nello stato Ready, utilizza il seguente comando:

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

L'output è simile al seguente:

NAME               PRIMARYENDPOINT   PRIMARYPHASE   DBCLUSTERPHASE
DB_CLUSTER_NAME    10.95.0.84        Ready          DBClusterReady

Verifica che l'annotazione e l'indirizzo IP del bilanciatore del carico interno esistano nel servizio del bilanciatore del carico, come segue:

 $ kubectl get svc LOAD_BALANCER_SERVICE_NAME -n NAMESPACE -o yaml
 

Sostituisci quanto segue:

  • LOAD_BALANCER_SERVICE_NAME: il nome del servizio di bilanciamento del carico che crea un indirizzo IP univoco accessibile dalle reti esterne.
  • NAMESPACE: il nome dello spazio dei nomi Kubernetes per il servizio del bilanciatore del carico.

L'output è simile al seguente:

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

L'output ha i seguenti attributi:

  • networking.gke.io/load-balancer-type: internal: nel servizio bilanciatore del carico deve esistere un bilanciatore del carico interno
  • ip: il valore dell'endpoint principale nell'output della verifica del cluster di database corrisponde al valore del controller di ingresso del bilanciatore del carico

Passaggi successivi