Como armazenar dados em um secret do Kubernetes

Neste tópico, explicamos como armazenar dados confidenciais em um secret do Kubernetes e recuperar os dados das variáveis de fluxo em um fluxo de proxy de API.

Introdução

Há momentos em que você quer armazenar dados para recuperação no ambiente de execução, sem expor dados que não devem ser codificados na lógica do proxy de API. Uma opção é usar o recurso híbrido de mapa de chave-valor (KVM). Se você já estiver usando o Kubernetes para gerenciamento de secrets em um cofre personalizado para dados confidenciais, considere usar o recurso de secret do Kubernetes descrito neste tópico. Assim como os dados do KVM, é possível acessar os dados do secret do Kubernetes nas variáveis de fluxo do proxy de API.

Quais tipos de dados podem ser armazenados em um secret do Kubernetes?

A Apigee híbrida limita o armazenamento dos seguintes tipos de arquivos de dados em um secret do Kubernetes. Veja alguns tipos:

Formato do arquivo Extensões de arquivo compatíveis
Arquivos de chave e certificado TLS *.crt, *.key e *.pem
Arquivos de propriedade *.properties

Os arquivos de propriedade contêm pares de chave-valor. Exemplo:

username=admin
password=1f2d1e2e7df

Como criar um secret do Kubernetes

Nesta seção, explicamos como criar um secret do Kubernetes para armazenar dados confidenciais no cluster.

  1. Crie os arquivos que você quer armazenar no secret do Kubernetes. Os arquivos precisam ser um dos formatos compatíveis com as extensões de arquivo listadas em Quais tipos de dados podem ser armazenados em um secret do Kubernetes?
  2. Execute o comando kubectl create secret generic. Exemplo:
    kubectl -n namespace create secret generic org-env-policy-secret \
      --from-file=filepath/prop-file.properties \
      --from-file=filepath/key-file.key \
      --from-file="filepath/cert-file.pem
    

    Em que:

    • namespace: o namespace do Kubernetes em que os componentes do ambiente de execução são implantados.
    • org: o nome da organização da Apigee.
    • env: o nome de um ambiente na organização.
    • filepath: o caminho para o arquivo que você quer incluir no secret. É preciso especificar pelo menos um arquivo para incluir no secret.
    • prop-file: o nome de um arquivo de propriedades a ser incluído no secret.
    • key-file: o nome de um arquivo de chave TLS a ser incluído no secret.
    • cert-file: o nome de um arquivo de certificado TLS a ser incluído no secret.

    É possível incluir um ou mais arquivos no secret. Exemplo:

    kubectl -n apigee create secret generic myorg-test-policy-secret \
      --from-file="$policy_secrets_path"/credential.properties \
      --from-file="$policy_secrets_path"/secrets.properties \
      --from-file="$policy_secrets_path"/public.key \
      --from-file="$policy_secrets_path"/fullchain.pem
    
  3. Após a criação, pode levar até 90 segundos para que a alteração seja refletida em todos os clusters. Os processadores de mensagens pesquisam mudanças de secrets a cada 30 segundos. Se eles detectarem uma alteração, o cache será atualizado.

Como recuperar dados de um secret

Depois que o secret for criado e disponibilizado (geralmente cerca de 90 segundos após a criação), será possível acessar os dados do secret em uma variável de fluxo em um fluxo de proxy de API na organização/ambiente em que o secret está armazenado. Por exemplo, suponha que seu secret contenha um arquivo *.properties chamado credentials.properties com uma chave de API, da seguinte maneira:

apikey=OrxYQptBMlY1TqmiGLTtyFiaLzzrD25Z

Em seguida, você pode recuperar a chave de API de uma variável de fluxo usando uma política como Atribuir mensagem. Exemplo:

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>my-apikey</Name>
    <Ref>private.secret.credential.properties.apikey</Ref>
  </AssignVariable>
</AssignMessage>

O nome da variável referenciada no elemento de Ref private.secret.credential.properties.apikey é composto destas partes:

Parte do nome da variável Descrição
private.secret O namespace fixo da variável. Todos os secrets do Kubernetes armazenados no cluster híbrido compartilham esse namespace.
credential.properties O nome de um arquivo armazenado no secret do Kubernetes.
apikey O nome de uma chave armazenada em um arquivo de propriedades.

Neste exemplo, a política "Atribuir mensagem" recupera o valor de apikey OrxYQptBMlY1TqmiGLTtyFiaLzzrD25Z e o armazena na variável de fluxo my-apikey.

Como atualizar um secret

Como o kubectl não é compatível com a atualização de secrets do Kubernetes, é necessário primeiro excluir o secret atual e recriá-lo seguindo as etapas em Como criar um secret do Kubernetes.