Load Balancer für AlloyDB Omni in Kubernetes konfigurieren

Wählen Sie eine Dokumentationsversion aus:

Auf dieser Seite wird zusammengefasst, wie Sie einen Load-Balancer in AlloyDB Omni mit der AlloyDB Omni-spec konfigurieren. In Google Kubernetes Engine (GKE) ist ein standardmäßig erstellter Load Balancer vom externen Typ und an die externe IP-Adresse gebunden, um Verbindungen aus dem Internet zu ermöglichen. Wenn die Annotation networking.gke.io/load-balancer-type: "internal" jedoch im Feld metadata.annotations[] des Load-Balancer-Manifests enthalten ist, erstellt GKE einen internen Load Balancer.

Für die Erstellung des jeweiligen Load-Balancer-Typs stellen verschiedene Plattformen eigene Anmerkungen bereit. Mit AlloyDB Omni können Sie Load-Balancer-Annotationen im spec-Abschnitt des Datenbankclustermanifests angeben. Der Datenbankcontroller fügt diese Anmerkungen dem Load-Balancer spec beim Erstellen eines Datenbankclusters hinzu.

Internen Load Balancer mit der Datenbankspezifikation erstellen

Sie können einen internen Load-Balancer erstellen, indem Sie das Feld dbLoadBalancerOptions im Abschnitt spec Ihres DBCluster-Manifests konfigurieren.

Kubernetes

Mit Annotationen werden Typ und Eigenschaften eines Load-Balancers definiert. Für einen internen Load Balancer ist die folgende Annotation erforderlich:

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

Wenn Sie einen internen Load-Balancer erstellen möchten, der Verbindungen von außerhalb des GKE-Cluster im selben Projekt zulässt, wenden Sie das folgende Manifest an:

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

Ersetzen Sie Folgendes:

  • DB_CLUSTER_NAME: Der Name Ihres Datenbankclusters. Das ist derselbe Datenbankclustername, den Sie beim Erstellen des Clusters angegeben haben.

In diesem Manifest:

  • networking.gke.io/load-balancer-type: "internal": die GKE-Annotation für interne Load Balancer für Ihren Datenbankcluster
  • allowExternalIncomingTraffic: true: Das Feld allowExternalIncomingTraffic ist auf true gesetzt, um eingehenden Traffic von außerhalb des Kubernetes-Clusters zuzulassen.

Details zum Datenbankcluster und zur Konnektivität abrufen

Kubernetes

Prüfen Sie mit dem folgenden Befehl, ob sich die Datenbankclusterressource im Status Ready befindet:

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

Die Ausgabe sieht etwa so aus:

NAME               PRIMARYENDPOINT   PRIMARYPHASE   DBCLUSTERPHASE
DB_CLUSTER_NAME    10.95.0.84        Ready          DBClusterReady

Prüfen Sie, ob die Annotation und die IP-Adresse des internen Load-Balancers im Load-Balancer-Dienst vorhanden sind:

kubectl get svc LOAD_BALANCER_SERVICE_NAME -n NAMESPACE -o yaml

Ersetzen Sie Folgendes:

  • LOAD_BALANCER_SERVICE_NAME: der Name Ihres Load-Balancer-Dienstes, der eine eindeutige IP-Adresse erstellt, auf die über externe Netzwerke zugegriffen werden kann.
  • NAMESPACE: der Name des Kubernetes-Namespace für Ihren Load-Balancer-Dienst.

Die Ausgabe sieht etwa so aus:

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

Die Ausgabe hat die folgenden Attribute:

  • networking.gke.io/load-balancer-type: internal: Im Load-Balancer-Dienst muss ein interner Load-Balancer vorhanden sein.
  • ip: Der primäre Endpunktwert in der Überprüfungsausgabe des Datenbankclusters stimmt mit dem Ingress-Controller-Wert des Load Balancers überein.

Nächste Schritte