Armazenar dados num secret do Kubernetes

Este tópico explica como armazenar dados confidenciais num segredo do Kubernetes e obter os dados das variáveis de fluxo num fluxo de proxy de API.

Introdução

Há alturas em que quer armazenar dados para obtenção no tempo de execução, ou seja, dados que não expiram e que não devem ser codificados na lógica do proxy da API. Uma opção é usar a funcionalidade de mapa de chaves-valores (KVM) híbrido. Se já estiver a usar o Kubernetes para a gestão de segredos num cofre personalizado para dados confidenciais, é recomendável considerar a utilização da funcionalidade de segredos do Kubernetes descrita neste tópico. Tal como acontece com os dados KVM, pode aceder aos dados secretos do Kubernetes nas variáveis de fluxo do proxy de API.

Que tipos de dados podem ser armazenados num segredo do Kubernetes?

O Apigee hybrid limita o armazenamento dos seguintes tipos de ficheiros de dados num segredo do Kubernetes. Estas incluem:

Formato de ficheiro Extensões de ficheiros suportadas
Ficheiros de chave e certificado TLS *.crt, *.key e *.pem
Ficheiros de propriedades *.properties

Os ficheiros de propriedades são ficheiros que contêm pares de chave/valor. Por exemplo:

username=admin
password=1f2d1e2e7df

Criar um Secret do Kubernetes

Esta secção explica como criar um segredo do Kubernetes para armazenar dados confidenciais no cluster.

  1. Crie o ficheiro ou os ficheiros que quer armazenar no segredo do Kubernetes. Os ficheiros têm de estar num dos formatos suportados com as extensões de ficheiros indicadas em Que tipos de dados podem ser armazenados num segredo do Kubernetes.
  2. Execute o comando kubectl create secret generic. Por 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
    

    Onde:

    • namespace: o namespace do Kubernetes onde os componentes de tempo de execução estão implementados.
    • org: o nome da sua organização Apigee.
    • env: o nome de um ambiente na sua organização.
    • filepath: o caminho para o ficheiro que quer incluir no segredo. Tem de especificar, pelo menos, um ficheiro a incluir no segredo.
    • prop-file: o nome de um ficheiro de propriedades a incluir no segredo.
    • key-file: o nome de um ficheiro de chave TLS a incluir no segredo.
    • cert-file: o nome de um ficheiro de certificado TLS a incluir no segredo.

    Pode incluir um ou mais ficheiros no segredo. Por 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 demorar até 90 segundos para que a alteração seja refletida em todos os clusters. Os processadores de mensagens sondam alterações secretas a cada 30 segundos. Se detetarem uma alteração, a cache é atualizada.

A obter dados de um segredo

Assim que o segredo for criado e estiver disponível (normalmente, cerca de 90 segundos após a criação), pode aceder aos dados secretos numa variável de fluxo num fluxo de proxy de API na organização/ambiente em que o segredo está armazenado. Por exemplo, suponha que o seu segredo contém um ficheiro *.properties denominado credentials.properties com uma chave da API, da seguinte forma:

apikey=OrxYQptBMlY1TqmiGLTtyFiaLzzrD25Z

Em seguida, pode obter a chave de API de uma variável de fluxo através de uma política como Assign Message. Por exemplo:

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

O nome da variável referenciado no elemento Ref, private.secret.credential.properties.apikey, é composto pelas seguintes partes:

Parte do nome da variável Descrição
private.secret O espaço de nomes fixo da variável. Todos os segredos do Kubernetes armazenados no cluster híbrido partilham este espaço de nomes.
credential.properties

O nome de um ficheiro armazenado no secret do Kubernetes.

apikey O nome de uma chave armazenada num ficheiro de propriedades.

Neste exemplo, a política Assign Message obtém o valor apikey OrxYQptBMlY1TqmiGLTtyFiaLzzrD25Z e armazena-o na variável de fluxo my-apikey.

Atualizar um segredo

Uma vez que o kubectl não suporta a atualização de segredos do Kubernetes, tem primeiro de eliminar o segredo existente e recriá-lo seguindo os passos em Criar um segredo do Kubernetes.