Como usar secrets para armazenar dados confidenciais

Use um Secret para armazenar informações confidenciais de configuração, como senhas e chaves de acesso, no seu cluster GKE. Nesta página, descrevemos como o Config Connector usa valores de secret ao configurar seus recursos do Google Cloud.

Visão geral

Nesta seção, apresentamos uma visão geral sobre o uso de Secrets com o Config Connector.

Como fazer referência a um Secret ao criar um recurso

Ao criar um recurso, é possível fazer referência a um Secret. Para saber mais, consulte Como passar um Secret para um recurso.

Como atualizar Secrets

Quando você aplica uma atualização a um Secret, o Config Connector atualiza o recurso na próxima reconciliação do estado pretendido. Por exemplo, se você atualizar o Secret que contém a senha para um SQLUser, o Config Connector atualizará a senha do usuário.

Como excluir Secrets

Se você excluir um Secret que está sendo usado por um recurso, o Config Connector não atualizará o recurso.

Como solucionar problemas

Se você criar um recurso que faça referência a um Secret inexistente o Config Connector criará um Evento DependencyNotFound ou DependencyInvalid.

Secrets e vários projetos

Como o Kubernetes não permite acesso a secrets nos Namespaces, se você estiver usando o Config Connector para gerenciar vários projetos, aplique secrets em todos os Namespaces que mapeiam para um projeto.

Como passar um Secret para um recurso

Nesta seção, você criará um servidor Cloud SQL e definirá a senha do usuário padrão com um Secret.

Como criar o Cloud SQL Server

  1. Copie o YAML abaixo para um arquivo chamado sql-server-example.yaml. Isso cria um servidor do Cloud SQL chamado sqlserver-1 e um usuário chamado sqluser-sample. A senha de sqluser-sample é definida por uma referência de recurso para um secret chamado secret-1.

    apiVersion: sql.cnrm.cloud.google.com/v1beta1
    kind: SQLInstance
    metadata:
      labels:
        label-one: "sql-server-example"
      name: sqlserver-1
    spec:
      region: us-central1
      databaseVersion: MYSQL_5_7
      settings:
        tier: db-g1-small
    ---
    apiVersion: sql.cnrm.cloud.google.com/v1beta1
    kind: SQLUser
    metadata:
      name: sqluser-sample
    spec:
      instanceRef:
        name: sqlserver-1
      host: "%"
      password:
        valueFrom:
          secretKeyRef:
            name: secret-1  # Name of the Secret object to extract a value from
            key: password   # Key that identifies the value to be extracted
    
  2. Copie o YAML abaixo para um arquivo chamado example-secret.yaml. Edite o valor de password antes de salvar. Isso declara secret-1, mencionado na seção anterior.

    apiVersion: v1
    kind: Secret
    metadata:
      name:  secret-1
    stringData:
      password: [PASSWORD]
    
  3. Aplique as configurações ao cluster.

    kubectl apply -n [PROJECT_ID] -f example-secret.yaml
    kubectl apply -n [PROJECT_ID] -f sql-server-example.yaml
    

    O Config Connector cria a instância do Cloud SQL e um usuário com a senha que você especificou. Isso pode levar alguns minutos.

  4. Aguarde alguns minutos e confirme se a instância está disponível com gcloud.

     gcloud sql instances list \ 
      --filter="name=sqlserver-1"

    O resultado precisa incluir um servidor com STATUS de RUNNABLE.

  5. Confirme se é possível se conectar à instância SQL com gcloud.

    gcloud sql connect sqlserver-1 --user=sqluser-sample

    Sua senha será solicitada.

Como limpar

Se você não quer manter a instância, exclua essa instância, o usuário e o secret do Cloud SQL com kubectl.

    kubectl delete -n [PROJECT_ID] -f sql-server-example.yaml
    kubectl delete -n [PROJECT_ID] -f example-secret.yaml

A seguir