Como usar os segredos do Kubernetes no script Bash

Sep 13 2020

Tenho um segredo armazenado no pod do Kubernetes que pode ser acessado pelo comando a seguir.

kubectl exec -it pod_name -- printenv | grep SFTP_PASSWORD

que fornecerá a saída como

SFTP_PASSWORD=password

Estou acessando este segredo no script bash.

sftp_password=$(kubectl exec -it pod_name -- printenv | grep SFTP_PASSWORD)

Mas o problema que estou enfrentando é que o comando acima retornará os dois pares de valores-chave em vez de valor.

Respostas

1 DavidMaze Sep 13 2020 at 16:30

Se for uma variável de ambiente, você pode usar apenas a sintaxe de expansão de parâmetro do shell Bourne comum :

kubectl exec pod_name -- sh -c 'echo $SFTP_PASSWORD'

Observe as aspas simples, para evitar que o shell local expanda o parâmetro; o sh -cwrapper para que um shell remoto seja iniciado para fazer a expansão dos parâmetros; e neste uso não interativo as -itopções são desnecessárias.

É possível que seu administrador de cluster proíba kubectl exec, para evitar a cópia de valores secretos para fora do cluster exatamente dessa maneira. Isso também evita a printenvferramenta não padrão (é parte do GNU Coreutils e não da especificação POSIX, portanto, imagens baseadas em Alpine podem não ter).