Load Balancer für AlloyDB Omni in Kubernetes konfigurieren

Wählen Sie eine Dokumentenversion 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 mit der externen IP-Adresse verknüpft, um Verbindungen aus dem Internet zuzulassen. Wenn die networking.gke.io/load-balancer-type: "internal" Annotation jedoch im Feld metadata.annotations[] des Load Balancer-Manifests enthalten ist, erstellt GKE einen internen Load Balancer.

Verschiedene Plattformen bieten eigene Annotationen zum Erstellen des jeweiligen Load Balancer-Typs. Mit AlloyDB Omni können Sie Load Balancer-Annotationen im Abschnitt spec des Datenbankcluster-Manifests angeben. Der Datenbankcontroller fügt diese Annotationen der Load Balancer-spec hinzu, wenn ein Datenbankcluster erstellt wird.

Internen Load Balancer mit der Datenbank-Spec erstellen

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

Kubernetes

Annotationen definieren den Typ und die Eigenschaften eines Load Balancers. 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:

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

Verwenden Sie den folgenden Befehl, um zu prüfen, 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 Wert des primären Endpunkts in der Überprüfungsausgabe des Datenbankclusters stimmt mit dem Wert des Ingress-Controllers des Load Balancers überein.

Nächste Schritte