Configurar um balanceador de carga para o AlloyDB Omni no Kubernetes

Esta página resume como configurar um balanceador de carga no AlloyDB Omni usando o spec do AlloyDB Omni. No Google Kubernetes Engine (GKE), um balanceador de carga criado por padrão é do tipo externo e vinculado ao endereço IP externo para permitir conexões da Internet. No entanto, se a anotação networking.gke.io/load-balancer-type: "internal" for incluída no campo metadata.annotations[] do manifesto do balanceador de carga, o GKE vai criar um balanceador de carga interno.

Plataformas diferentes fornecem anotações próprias para criar o tipo específico de balanceador de carga. O AlloyDB Omni permite especificar anotações do balanceador de carga usando a seção spec do manifesto do cluster de banco de dados. O controlador de banco de dados adiciona essas anotações ao balanceador de carga spec ao criar um cluster de banco de dados.

Criar um balanceador de carga interno usando a especificação do banco de dados

Para criar um balanceador de carga interno, configure o campo dbLoadBalancerOptions na seção spec do manifesto DBCluster.

Kubernetes

As anotações definem o tipo e as propriedades de um balanceador de carga. Um balanceador de carga interno requer a presença da seguinte anotação:

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

Para criar um balanceador de carga interno que permita conexões de fora do cluster do GKE no mesmo projeto, aplique o seguinte manifesto:

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

Substitua:

  • DB_CLUSTER_NAME: o nome do cluster do banco de dados. É o mesmo nome do cluster de banco de dados que você declarou ao criar.

Nesse manifesto:

  • networking.gke.io/load-balancer-type: "internal": a anotação do balanceador de carga interno do GKE para seu cluster de banco de dados
  • allowExternalIncomingTraffic: true: o campo allowExternalIncomingTraffic é definido como true para permitir o tráfego de entrada de fora do cluster do Kubernetes.

Receber os detalhes de conectividade e do cluster do banco de dados

Kubernetes

Para verificar se o recurso de cluster de banco de dados está no status Ready, use o seguinte comando:

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

O resultado será assim:

NAME               PRIMARYENDPOINT   PRIMARYPHASE   DBCLUSTERPHASE
DB_CLUSTER_NAME    10.95.0.84        Ready          DBClusterReady

Verifique se a anotação e o endereço IP do balanceador de carga interno estão no serviço do balanceador de carga da seguinte maneira:

 $ kubectl get svc LOAD_BALANCER_SERVICE_NAME -n NAMESPACE -o yaml
 

Substitua:

  • LOAD_BALANCER_SERVICE_NAME: o nome do serviço de balanceador de carga que cria um endereço IP exclusivo acessível por redes externas.
  • NAMESPACE: o nome do namespace do Kubernetes para o serviço de balanceador de carga.

O resultado será assim:

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

A saída tem os seguintes atributos:

  • networking.gke.io/load-balancer-type: internal: um balanceador de carga interno precisa existir no serviço de balanceador de carga
  • ip: o valor do endpoint principal na saída de verificação do cluster de banco de dados corresponde ao valor do controlador de entrada do balanceador de carga.

A seguir