Load Balancer für AlloyDB Omni in Kubernetes konfigurieren

Wählen Sie eine Dokumentationsversion aus:

Wenn Sie Ihren AlloyDB Omni-Datenbankcluster für Clients außerhalb Ihres Kubernetes-Clusters freigeben möchten, können Sie im Manifest DBCluster einen LoadBalancer-Dienst konfigurieren. Dieses Dokument richtet sich an Datenbankadministratoren und Kubernetes-Operatoren, die AlloyDB Omni-Bereitstellungen in Kubernetes verwalten und das Load-Balancer-Verhalten anpassen müssen.

Wenn Sie in Ihrem DBCluster-Manifest externen eingehenden Traffic aktivieren, erstellt der AlloyDB Omni Kubernetes-Operator ein Kubernetes-Service-Objekt vom Typ LoadBalancer. Verschiedene Kubernetes-Plattformen verwenden benutzerdefinierte Annotationen, um Load-Balancer-Eigenschaften wie die Zuweisung interner oder externer IP-Adressen zu steuern. Mit AlloyDB Omni können Sie diese Annotationen im Feld spec.primarySpec.dbLoadBalancerOptions.annotations Ihres DBCluster-Manifests angeben. Wenn Sie den Datenbankcluster erstellen oder aktualisieren und spec.allowExternalIncomingTraffic auf true gesetzt ist, wendet der AlloyDB Omni-Operator diese Annotationen auf das Feld metadata.annotations des LoadBalancer-Objekts Service an.

Load Balancer mit der Datenbankspezifikation konfigurieren

Sie können benutzerdefinierte Load-Balancer-Annotationen konfigurieren, indem Sie das Feld dbLoadBalancerOptions im Abschnitt spec.primarySpec des DBCluster-Manifests festlegen.

Kubernetes

Mit Annotationen werden der Typ und die Attribute des Load-Balancer-Objekts Service in Ihrer Kubernetes-Umgebung definiert. In der Dokumentation zu Ihrer Kubernetes-Plattform oder Load-Balancer-Implementierung finden Sie die unterstützten Annotationsschlüssel und -werte.

Wenn Sie einen Datenbankcluster mit benutzerdefinierten Load-Balancer-Annotationen erstellen und eingehenden Traffic von außerhalb des Kubernetes-Clusters zulassen möchten, wenden Sie das folgende Manifest an:

kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
  name: db-pw-DB_CLUSTER_NAME
  namespace: NAMESPACE
type: Opaque
data:
  DB_CLUSTER_NAME: "ENCODED_PASSWORD"
---
apiVersion: alloydbomni.dbadmin.goog/v1
kind: DBCluster
metadata:
  name: DB_CLUSTER_NAME
  namespace: NAMESPACE
spec:
  databaseVersion: "18.4.0"
  primarySpec:
    adminUser:
      passwordRef:
        name: db-pw-DB_CLUSTER_NAME
    resources:
      memory: 5Gi
      cpu: 1
      disks:
      - name: DataDisk
        size: 10Gi
    dbLoadBalancerOptions:
      annotations:
        ANNOTATION_KEY: "ANNOTATION_VALUE"
  allowExternalIncomingTraffic: true
EOF

Ersetzen Sie Folgendes:

  • DB_CLUSTER_NAME: Ein Name für Ihren Datenbankcluster, z. B. my-db-cluster.
  • NAMESPACE: der Kubernetes-Namespace für Ihren Datenbankcluster.
  • ENCODED_PASSWORD: Das Passwort für den postgres-Administrator, codiert als Base64-String.
  • ANNOTATION_KEY und ANNOTATION_VALUE: Ein Load-Balancer-Annotationsschlüssel und ein Stringwert, die von Ihrer Kubernetes-Umgebung unterstützt werden. Setzen Sie den Wert in doppelte Anführungszeichen, auch bei booleschen oder numerischen Werten wie "true". Sie können unter annotations ein oder mehrere Schlüssel/Wert-Paare angeben.

In diesem Manifest:

  • ANNOTATION_KEY: "ANNOTATION_VALUE": Gibt eine benutzerdefinierte Annotation an, die der AlloyDB Omni-Operator dem Load-Balancer-Service-Objekt für Ihren Datenbankcluster hinzufügt.
  • allowExternalIncomingTraffic: true: Legt das Feld allowExternalIncomingTraffic auf true fest, um eingehenden Traffic von außerhalb des Kubernetes-Clusters zuzulassen.

Details zum Datenbankcluster und zur Konnektivität abrufen

Kubernetes

Führen Sie den folgenden Befehl aus, um zu prüfen, ob die Datenbankcluster-Ressource den Status Ready hat:

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

Ersetzen Sie NAMESPACE durch den Kubernetes-Namespace für Ihren Datenbankcluster.

Die Ausgabe sieht etwa so aus:

NAME               PRIMARYENDPOINT   PRIMARYPHASE   DBCLUSTERPHASE
DB_CLUSTER_NAME    10.95.0.84        Ready          DBClusterReady

Führen Sie den folgenden Befehl aus, um zu prüfen, ob die benutzerdefinierte Annotation und der zugewiesene externe Endpunkt im Load-Balancer-Objekt Service vorhanden sind:

kubectl get svc LOAD_BALANCER_SERVICE_NAME -n NAMESPACE -o yaml

Ersetzen Sie Folgendes:

  • LOAD_BALANCER_SERVICE_NAME: der Name des vom Operator verwalteten LoadBalancer-Service-Objekts. Für den primären Lese-/Schreibendpunkt benennt der AlloyDB Omni-Operator diesen Service al-DB_CLUSTER_NAME-rw-elb (Sie können Service-Objekte auch mit kubectl get svc -n NAMESPACE auflisten).
  • NAMESPACE: der Name des Kubernetes-Namespace für Ihr Load-Balancer-Service-Objekt.

Die Ausgabe sieht etwa so aus:

apiVersion: v1
kind: Service
metadata:
  annotations:
    ANNOTATION_KEY: "ANNOTATION_VALUE"
  creationTimestamp: "2024-02-22T15:26:18Z"
  finalizers:
  - service.kubernetes.io/load-balancer-cleanup
  labels:
    alloydbomni.internal.dbadmin.goog/dbcluster: DB_CLUSTER_NAME
    alloydbomni.internal.dbadmin.goog/dbcluster-ns: NAMESPACE
  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
  ports:
  - name: db
    nodePort: 31453
    port: 5432
    protocol: TCP
    targetPort: 5432
  selector:
    alloydbomni.internal.dbadmin.goog/dbcluster: DB_CLUSTER_NAME
    alloydbomni.internal.dbadmin.goog/dbcluster-ns: NAMESPACE
    alloydbomni.internal.dbadmin.goog/task-type: database
    dbs.internal.dbadmin.goog/ha-role: Primary
  sessionAffinity: None
  type: LoadBalancer
status:
  loadBalancer:
    ingress:
    - ip: 10.95.0.84

Die Ausgabe enthält die folgenden Felder:

  • metadata.annotations: Enthält die Annotation ANNOTATION_KEY: "ANNOTATION_VALUE", die Sie in Ihrem DBCluster-Manifest konfiguriert haben.
  • status.loadBalancer.ingress: Zeigt den externen Endpunkt an, der dem Load-Balancer-Objekt Service zugewiesen ist. Je nach Kubernetes-Umgebung füllt der Load-Balancer-Controller entweder ip (entspricht dem PRIMARYENDPOINT-Wert Ihres Datenbankclusters) oder hostname (für DNS-basierte Load-Balancer wie AWS EKS, wobei status.primary.endpoints auf dem DBCluster den Hostnamen und den Port aufzeichnet).

Nächste Schritte