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.
- 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.
- 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
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.