Abilitare HTTPS automatico con Caddy in un contenitore sidecar
Articolo
Questo articolo descrive come Caddy può essere usato come contenitore sidecar in un gruppo di contenitori e funge da proxy inverso per fornire un endpoint HTTPS gestito automaticamente per l'applicazione.
Caddy è un server Web open source potente e pronto per le aziende, con HTTPS automatico, scritto in Go e rappresenta un'alternativa a Nginx.
L'automazione dei certificati è possibile in quanto Caddy supporta l'API ACMEv2 (RFC 8555) che interagisce con Let's Encrypt per rilasciare i certificati.
In questo esempio, solo il contenitore Caddy viene esposto sulle porte 80/TCP e 443/TCP. L'applicazione dietro il proxy inverso rimane privata. La comunicazione di rete tra Caddy e l'applicazione avviene tramite localhost.
Nota
Questo è in contrasto con la comunicazione all'interno del gruppo di contenitori conosciuta da Docker Compose, dove è possibile fare riferimento ai contenitori in base al nome.
L'esempio monta il Caddyfile necessario per configurare il proxy inverso da una condivisione file ospitata in un account di Archiviazione di Azure.
Nota
Per le distribuzioni di produzione, la maggior parte degli utenti vuole creare il bake del Caddyfile in un'immagine Docker personalizzata basata su Caddy. In questo modo, non è necessario montare i file nel contenitore.
Se si preferisce eseguire i comandi di riferimento dell'interfaccia della riga di comando in locale, installare l'interfaccia della riga di comando di Azure. Per l'esecuzione in Windows o macOS, è consigliabile eseguire l'interfaccia della riga di comando di Azure in un contenitore Docker. Per altre informazioni, vedere Come eseguire l'interfaccia della riga di comando di Azure in un contenitore Docker.
Se si usa un'installazione locale, accedere all'interfaccia della riga di comando di Azure con il comando az login. Per completare il processo di autenticazione, seguire la procedura visualizzata nel terminale. Per altre opzioni di accesso, vedere Accedere tramite l'interfaccia della riga di comando di Azure.
Eseguire az version per trovare la versione e le librerie dipendenti installate. Per eseguire l'aggiornamento alla versione più recente, eseguire az upgrade.
Questo articolo richiede la versione 2.0.55 o successiva dell'interfaccia della riga di comando di Azure. Se si usa Azure Cloud Shell, la versione più recente è già installata.
Preparare Caddyfile
Creare un file denominato Caddyfile e incollare la configurazione seguente. Questa configurazione crea una configurazione del proxy inverso, che punta al contenitore dell'applicazione in ascolto su 5000/TCP.
È importante notare che la configurazione fa riferimento a un nome di dominio anziché a un indirizzo IP. Caddy deve essere raggiungibile da questo URL per eseguire il passaggio di verifica richiesto dal protocollo ACME e recuperare correttamente un certificato da Let's Encrypt.
Nota
Per la distribuzione di produzione, gli utenti potrebbero voler usare un nome di dominio che controllano, ad esempio api.company.com e creare un record CNAME che punta verso my-app.westeurope.azurecontainer.io, ad esempio. In tal caso, è necessario assicurarsi che il nome di dominio personalizzato venga usato anche nel Caddyfile, anziché quello assegnato da Azure (ad esempio, *.westeurope.azurecontainer.io). È inoltre necessario fare riferimento al nome di dominio personalizzato nella configurazione YAML di ACI descritta più avanti in questo esempio.
Creare le condivisioni file necessarie per archiviare lo stato del contenitore e la configurazione Caddy.
az storage share create \
--name proxy-caddyfile \
--account-name <storage-account>
az storage share create \
--name proxy-config \
--account-name <storage-account>
az storage share create \
--name proxy-data \
--account-name <storage-account>
Recuperare le chiavi dell'account di archiviazione e annotarle per un uso successivo
az storage account keys list -g <resource-group> -n <storage-account>
Distribuire il gruppo di contenitori
Creare un file YAML
Creare un file denominato ci-my-app.yaml e incollare il contenuto seguente. Assicurarsi di sostituire <account-key> con una delle chiavi di accesso ricevute in precedenza e <storage-account> di conseguenza.
Questo file YAML definisce due contenitori reverse-proxy e my-app. Il contenitore reverse-proxy monta le tre condivisioni file create in precedenza. La configurazione espone anche la porta 80/TCP e 443/TCP del contenitore reverse-proxy. La comunicazione tra entrambi i contenitori avviene solo in localhost.
Nota
È importante notare che la chiave dnsNameLabel definisce il nome DNS pubblico, in cui il gruppo di istanze del contenitore sarà raggiungibile, deve corrispondere al nome di dominio completo definito nel Caddyfile