Load Balancer für AlloyDB Omni in Kubernetes konfigurieren

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

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

Internen Load Balancer mithilfe der Datenbankspezifikation erstellen

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

Kubernetes

Anmerkungen definieren den Typ und die Eigenschaften eines Load Balancers. Für einen internen Load Balancer ist die folgende Anmerkung erforderlich:

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

Wenn Sie einen internen Load Balancer erstellen möchten, der Verbindungen von außerhalb des GKE-Clusters innerhalb desselben Projekts 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. Dies ist der Name des Datenbankclusters, den Sie beim Erstellen angegeben haben.

In diesem Manifest:

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

Datenbankcluster und Verbindungsdetails abrufen

Kubernetes

Verwenden Sie den folgenden Befehl, um zu prüfen, ob die Datenbankclusterressource den Status Ready hat:

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

Die Ausgabe sieht in etwa so aus:

NAME               PRIMARYENDPOINT   PRIMARYPHASE   DBCLUSTERPHASE
DB_CLUSTER_NAME    10.95.0.84        Ready          DBClusterReady

Prüfen Sie, ob die Anmerkung 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, die von externen Netzwerken erreichbar ist.
  • NAMESPACE: Der Name des Kubernetes-Namespace für Ihren Load Balancer-Dienst.

Die Ausgabe sieht in 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 Bestätigungsausgabe des Datenbankclusters stimmt mit dem Wert des Ingress-Controllers des Load Balancers überein.

Nächste Schritte