Executar e se conectar ao AlloyDB Omni

Selecione uma versão da documentação:

Nesta página, descrevemos como executar e se conectar ao AlloyDB Omni depois de implantá-lo no cluster do Kubernetes.

As instruções específicas do Kubernetes nesta página pressupõem um conhecimento básico da operação do Kubernetes.

Executar o AlloyDB Omni

Os procedimentos usados para executar o AlloyDB Omni dependem de você estar executando o AlloyDB Omni em um cluster do Kubernetes.

Iniciar o AlloyDB Omni

Para iniciar um cluster de banco de dados interrompido, defina isStopped como false na definição do manifesto.

É possível fazer isso na linha de comando usando kubectl:

  kubectl patch dbclusters.alloydbomni.dbadmin.goog DB_CLUSTER_NAME \
  -p '{"spec":{"primarySpec":{"isStopped":false}}}' --type=merge  -n DB_CLUSTER_NAMESPACE

Substitua:

  • DB_CLUSTER_NAME: o nome do cluster de banco de dados, por exemplo, my-db-cluster.
  • DB_CLUSTER_NAMESPACE (opcional): o namespace em que você criou esse cluster de banco de dados, por exemplo, my-db-cluster-namespace.

Verificar o status do AlloyDB Omni

  kubectl get dbclusters.alloydbomni.dbadmin.goog DB_CLUSTER_NAME  -n DB_CLUSTER_NAMESPACE

Substitua:

Interromper o AlloyDB Omni

Para interromper um cluster de banco de dados, defina isStopped como true na definição do manifesto.

É possível fazer isso na linha de comando usando kubectl:

  kubectl patch dbclusters.alloydbomni.dbadmin.goog DB_CLUSTER_NAME -p '{"spec":{"primarySpec":{"isStopped":true}}}' --type=merge -n DB_CLUSTER_NAMESPACE

Substitua:

*   `DB_CLUSTER_NAME`: the name of this database cluster—for example, `my-db-cluster`.
*   `DB_CLUSTER_NAMESPACE` (Optional): the namespace where you created this database cluster—for example, `my-db-cluster-namespace`.

Conectar-se ao AlloyDB Omni em execução no Kubernetes

O operador AlloyDB Omni no Kubernetes permite conexões com o cluster de banco de dados no mesmo cluster do Kubernetes, opcionalmente usando certificados para autenticação.

Conectar-se usando o psql pré-instalado

É possível fazer uma conexão de teste usando um cliente psql já instalado no pod que executa o banco de dados.

Para fazer isso, execute os seguintes comandos:

export DBPOD=`kubectl get pod --selector=alloydbomni.internal.dbadmin.goog/dbcluster=DB_CLUSTER_NAME,alloydbomni.internal.dbadmin.goog/task-type=database -n DB_CLUSTER_NAMESPACE -o jsonpath='{.items[0].metadata.name}'`
kubectl exec -ti $DBPOD -n DB_CLUSTER_NAMESPACE -c database -- psql -h localhost -U postgres

Substitua DB_CLUSTER_NAME pelo nome do cluster de banco de dados. É o mesmo nome de cluster de banco de dados que você declarou quando você o criou.

É possível pular a definição de DB_CLUSTER_NAMESPACE se você criou o cluster de banco de dados no namespace padrão.

Depois de inserir o comando, o servidor de banco de dados solicita uma senha. Insira a senha cuja versão codificada em Base64 você forneceu como um secret do Kubernetes ao criar o banco de dados cluster. Por exemplo, se você criou o cluster de banco de dados com um secret de Q2hhbmdlTWUxMjM=, a senha de login a ser usada aqui é ChangeMe123.

O operador do AlloyDB Omni conecta você ao servidor como a postgres função do usuário e mostra um postgres=# prompt de comando. Agora é possível executar psql comandos e consultas SQL.

Para sair do psql, execute o comando \q.

Conectar-se de um pod separado no mesmo cluster

O pod que executa o cluster de banco de dados do AlloyDB Omni permite conexões no mesmo cluster do Kubernetes, por padrão. Como prática recomendada, sugerimos proteger todas as conexões com o cluster de banco de dados usando o TLS.

Para fornecer seu próprio certificado TLS do servidor, especifique um secret de certificado ao configurar o cluster de banco de dados. Se você não especificar um Secret de certificado, o operador AlloyDB Omni no Kubernetes vai criar um Secret de certificado TLS para você com base em um certificado assinado por uma autoridade certificadora autoassinada. Em ambos os casos, é possível exigir que o pod do cliente de banco de dados exija a validação do certificado em todas as conexões, garantindo a segurança do TLS.

Para estabelecer conexões de banco de dados seguras usando o TLS, realize as seguintes ações:

  • No manifesto que define o pod que faz as conexões do cliente, especifique um secret de certificado TLS. Pode ser um destes:

    • Um secret de certificado TLS que você já criou no cluster do Kubernetes. Para mais informações sobre como trabalhar com secrets de certificado TLS no Kubernetes, consulte Secrets TLS.

    • O secret de certificado padrão que o operador AlloyDB Omni no Kubernetes cria para você, chamado DB_CLUSTER_NAME-ca-cert, se você não especificar um secret TLS como parte do manifesto do cluster de banco de dados.

  • Sempre que o pod do cliente se conectar ao cluster de banco de dados, ele precisará definir as seguintes variáveis de ambiente antes de estabelecer a conexão:

    • Defina PGSSLMODE como "verify-ca".

    • Defina PGSSLROOTCERT como o caminho absoluto, no sistema de arquivos do pod do cliente, do arquivo ca.crt relevante.

O exemplo de manifesto a seguir mostra como configurar um pod que instala a imagem oficial do PostgreSQL, que inclui o cliente de linha de comando psql. O exemplo pressupõe que você não especifique nenhuma configuração de secret TLS no manifesto que define o cluster de banco de dados. Portanto, o operador AlloyDB Omni no Kubernetes usa o secret TLS padrão, chamado dbs-al-cert-DB_CLUSTER_NAME.

apiVersion: v1
kind: Pod
metadata:
  name: postgres
  namespace: DB_CLUSTER_NAMESPACE
spec:
  containers:
  - image: "docker.io/library/postgres:latest"
    command:
      - "sleep"
      - "604800"
    imagePullPolicy: IfNotPresent
    name: db-client
    volumeMounts:
    - name: ca-cert
      mountPath: "/DB_CLUSTER_NAME-ca-cert"
      readOnly: true
  volumes:
  - name: ca-cert
    secret:
      secretName: dbs-al-cert-DB_CLUSTER_NAME
  restartPolicy: Always

Substitua:

  • DB_CLUSTER_NAME: o nome do cluster de banco de dados. É o mesmo nome de cluster de banco de dados que você declarou quando você o criou.
  • DB_CLUSTER_NAMESPACE (opcional): o namespace em que você criou o cluster de banco de dados.

Agora é possível usar o pod para se conectar com segurança ao cluster de banco de dados seguindo estas etapas:

  1. Determine o endereço IP interno do cluster de banco de dados:

    kubectl get dbclusters.alloydbomni.dbadmin.goog -n DB_CLUSTER_NAMESPACE

    A saída será assim:

    NAME              PRIMARYENDPOINT   PRIMARYPHASE   DBCLUSTERPHASE
    DB_CLUSTER_NAME   IP_ADDRESS        Ready          DBClusterReady
    

    Anote IP_ADDRESS e use-o na próxima etapa.

  2. Use psql para se conectar ao cluster do pod do cliente, definindo as variáveis de ambiente que ativam e exigem a verificação do certificado TLS:

    kubectl exec -it postgres -n DB_CLUSTER_NAMESPACE -- bash
    PGSSLMODE="verify-ca" PGSSLROOTCERT=/DB_CLUSTER_NAME-ca-cert/ca.crt psql -h IP_ADDRESS -p 5432 -U postgres -d postgres

    Substitua IP_ADDRESS pelo endereço IP interno determinado na etapa anterior.

  3. Opcional. Personalize a porta em que o banco de dados aceita solicitações de conexão recebidas. Para substituir a porta padrão 5432, use o atributo port. Os valores precisam estar entre 1024 e 65535.

    O exemplo a seguir mostra a configuração de um recurso DBCluster do AlloyDB Omni ao personalizar a porta do banco de dados.

    apiVersion: v1
    kind: Secret
    metadata:
      name: db-pw-dbcluster-sample
    type: Opaque
    data:
      dbcluster-sample: "Q2hhbmdlTWUxMjM=" # Password is ChangeMe123
    ---
    apiVersion: alloydbomni.dbadmin.goog/v1
    kind: DBCluster
    metadata:
      name: dbcluster-sample
    spec:
      databaseVersion: "18.1.0"
      primarySpec:
        port: 6789
        adminUser:
          passwordRef:
            name: db-pw-dbcluster-sample
        resources:
          memory: 5Gi
          cpu: 1
          disks:
          - name: DataDisk
            size: 10Gi
    

A seguir