Você edita a configuração do WireGuard dentro de um contêiner em execução, funciona, e a próxima atualização da imagem a apaga. Nada estava configurado errado. O arquivo vivia na camada gravável do contêiner, que existe apenas para aquela instância do contêiner. A comparação que importa não é qual ferramenta usar, mas quais entradas o seu deployment declara. Tudo o que você editou à mão é uma entrada que o deployment não conhece.

Dois tipos de estado, um é descartável

Um contêiner tem uma camada gravável para as alterações feitas em tempo de execução, e essa camada é descartada quando o contêiner é substituído. Não é um armazenamento de configuração nem um backup. A imagem mais as entradas declaradas formam a definição completa do que é executado.

Pergunte quais dos seus arquivos de VPN são entradas declaradas e quais são acidentes:

docker diff wg-vpn
docker inspect --format '{{json .Mounts}}' wg-vpn

O diff lista o que mudou na camada gravável, e esse é exatamente o conjunto de coisas que vão desaparecer. A listagem de montagens mostra o que sobrevive. Comparar os dois responde à pergunta antes de você perder algo.

Bind mount, volume nomeado ou segredo: o que cada um protege

Os três podem conter um perfil de VPN, e diferem em quem pode lê-lo e no que acontece na substituição.

MechanismSurvives recreationWho can read it
Writable layerNoAnyone with container access, until it is gone
Bind mountYes, while the host path existsWhatever the host permissions allow
Named volumeYes, until the volume is removedManaged by the runtime
SecretYes, as a declared inputThe container process, by design

Um bind mount mapeia um caminho do host, então o arquivo é tão protegido quanto esse caminho e tão visível quanto as permissões do host permitirem. Um volume nomeado é gerenciado pelo runtime e sobrevive à remoção do contêiner, o que o torna a opção padrão mais segura para o estado que o deployment possui. Um mecanismo de segredo é para material que você não quer em uma imagem ou em uma variável de ambiente.

Não trate cada variável de ambiente e cada arquivo do host como proteção equivalente, porque não são.

Editar dentro do contêiner é a armadilha

A armadilha não é a ferramenta, é a direção da edição. Uma alteração feita dentro de um contêiner em execução é invisível para o deployment, então a próxima recriação a desfaz silenciosamente e o sintoma parece uma regressão na imagem. Se você precisar fazer uma alteração ali para diagnosticar, copie-a para fora imediatamente e coloque-a na entrada declarada. Depois recrie para provar que o deployment a reproduz.

Um perfil pode carregar chaves privadas e material de conta, o que torna o backup desse arquivo uma tarefa de manuseio de segredos em vez de uma cópia de arquivo. Mantenha a propriedade e o acesso de leitura limitados ao processo real do contêiner, em vez de ampliar um diretório do host para que um erro de permissão desapareça.

Essa ampliação é como uma comodidade no contêiner se torna uma exposição do host.

Recrie deliberadamente e depois verifique quatro coisas

Anote a versão da imagem, o dispositivo e as capacidades necessários, a conexão de rede e as entradas persistentes. A lista de dispositivo e capacidades importa especialmente para um contêiner de VPN, porque o túnel precisa do dispositivo de rede e do privilégio para configurá-lo.

Confirme qual estado de execução gerado deve ser reconstruído em vez de salvo. As chaves que o túnel gerou no primeiro início são estado, e mantê-las ou regenerá-las é uma decisão com consequências para cada peer que conhece a chave pública antiga.

Após uma recriação controlada, verifique identidade, roteamento, DNS e o bloqueio de falha necessário. Um processo que inicia sem erros não prova nenhuma dessas quatro coisas. Verifique isso enquanto o túnel está ativo e de novo depois de pará-lo, porque o bloqueio de falha só se mostra quando o túnel desaparece.

Mantenha uma cópia de recuperação fora do contêiner

Mantenha uma cópia de recuperação que viva independentemente do contêiner e teste restaurá-la pelo processo documentado. Um backup não testado de um perfil de VPN é uma esperança, especialmente quando o caminho de restauração envolve permissões que o processo do contêiner precisa.

Se um contêiner proprietário de uma VPN for substituído, coordene as aplicações que compartilham sua pilha de rede dentro do ciclo de vida suportado pelo runtime.

Essa coordenação é a diferença entre um reinício e uma interrupção. O deployment deveria descrever de onde vem a configuração, e a documentação de volumes é o lugar para verificar o que o runtime realmente persiste.

Artigos relacionados