Configura un balanceador de cargas para AlloyDB Omni en Kubernetes

En esta página, se resume cómo configurar un balanceador de cargas en AlloyDB Omni con el spec de AlloyDB Omni. En Google Kubernetes Engine (GKE), un balanceador de cargas creado de forma predeterminada es del tipo externo y está vinculado con la dirección IP externa para permitir conexiones desde Internet. Sin embargo, si la anotación networking.gke.io/load-balancer-type: "internal" se incluye en el campo metadata.annotations[] del manifiesto del balanceador de cargas, GKE crea un balanceador de cargas interno.

Las diferentes plataformas proporcionan sus propias anotaciones para crear el tipo específico de balanceador de cargas. AlloyDB Omni te permite especificar anotaciones de balanceador de cargas con la sección spec del manifiesto del clúster de bases de datos. El controlador de la base de datos agrega esas anotaciones al balanceador de cargas spec cuando se crea un clúster de bases de datos.

Crea un balanceador de cargas interno con la especificación de la base de datos

Para crear un balanceador de cargas interno, configura el campo dbLoadBalancerOptions en la sección spec de tu manifiesto DBCluster.

Kubernetes

Las anotaciones definen el tipo y las propiedades de un balanceador de cargas. Un balanceador de cargas interno requiere la presencia de la siguiente anotación:

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

Para crear un balanceador de cargas interno que permita conexiones desde fuera del clúster de GKE dentro del mismo proyecto, aplica el siguiente manifiesto:

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

Reemplaza lo siguiente:

  • DB_CLUSTER_NAME: Es el nombre de tu clúster de bases de datos. Es el mismo nombre de clúster de base de datos que declaraste cuando lo creaste.

En el manifiesto se muestra lo siguiente:

  • networking.gke.io/load-balancer-type: "internal": La anotación del balanceador de cargas interno de GKE para tu clúster de bases de datos
  • allowExternalIncomingTraffic: true: El campo allowExternalIncomingTraffic se establece en true para permitir el tráfico entrante desde fuera del clúster de Kubernetes.

Obtén los detalles del clúster de bases de datos y la conectividad

Kubernetes

Para verificar que el recurso del clúster de bases de datos esté en el estado Ready, usa el siguiente comando:

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

El resultado es similar a este:

NAME               PRIMARYENDPOINT   PRIMARYPHASE   DBCLUSTERPHASE
DB_CLUSTER_NAME    10.95.0.84        Ready          DBClusterReady

Verifica que la anotación y la dirección IP del balanceador de cargas interno existan en el servicio del balanceador de cargas, de la siguiente manera:

 $ kubectl get svc LOAD_BALANCER_SERVICE_NAME -n NAMESPACE -o yaml
 

Reemplaza lo siguiente:

  • LOAD_BALANCER_SERVICE_NAME: Es el nombre de tu servicio de balanceador de cargas que crea una dirección IP única a la que pueden acceder las redes externas.
  • NAMESPACE: Es el nombre del espacio de nombres de Kubernetes para tu servicio de balanceador de cargas.

El resultado es similar a este:

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

El resultado tiene los siguientes atributos:

  • networking.gke.io/load-balancer-type: internal: Debe existir un balanceador de cargas interno en el servicio del balanceador de cargas.
  • ip: El valor del extremo principal en el resultado de la verificación del clúster de bases de datos coincide con el valor del controlador de entrada del balanceador de cargas.

¿Qué sigue?