Configure um balanceador de carga para o AlloyDB Omni no Kubernetes

Selecione uma versão da documentação:

Esta página resume como configurar um equilibrador de carga no AlloyDB Omni através da CLI do AlloyDB Omni spec. No Google Kubernetes Engine (GKE), um balanceador de carga criado por predefinição é do tipo externo e está associado ao endereço IP externo para permitir ligações a partir da Internet. No entanto, se a anotação networking.gke.io/load-balancer-type: "internal" estiver incluída no campo metadata.annotations[] do manifesto do balanceador de carga, o GKE cria um balanceador de carga interno.

As diferentes plataformas fornecem as suas próprias anotações para criar o tipo específico de um equilibrador de carga. O AlloyDB Omni permite-lhe especificar anotações do equilibrador de carga através da secção spec do manifesto do cluster da base de dados. O controlador da base de dados adiciona essas anotações ao equilibrador de carga spec quando cria um cluster de base de dados.

Crie um balanceador de carga interno com a especificação da base de dados

Pode criar um equilibrador de carga interno configurando o campo dbLoadBalancerOptions na secçã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 ligaçõ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 o seguinte:

  • DB_CLUSTER_NAME: o nome do cluster da base de dados. É o mesmo nome do cluster da base de dados que declarou quando o criou.

Neste manifesto:

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

Obtenha os detalhes do cluster da base de dados e da conetividade

Kubernetes

Para verificar se o recurso do cluster de base de dados está no estado Ready, use o seguinte comando:

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

O resultado é semelhante ao seguinte:

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 existem no serviço do balanceador de carga, da seguinte forma:

kubectl get svc LOAD_BALANCER_SERVICE_NAME -n NAMESPACE -o yaml

Substitua o seguinte:

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

O resultado é semelhante ao seguinte:

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: tem de existir um balanceador de carga interno no serviço de balanceador de carga
  • ip: o valor do ponto final principal na saída de validação do cluster da base de dados corresponde ao valor do controlador de entrada do equilibrador de carga

O que se segue?