Come faccio a inviare i log dei container Docker a CloudWatch Logs tramite un proxy?

5 minuti di lettura
0

Desidero pubblicare i log del mio container Docker su Amazon CloudWatch tramite un proxy.

Breve descrizione

Puoi usare un proxy quando invii i log dei container Docker a CloudWatch. Questo passaggio aggiunge un ulteriore livello di sicurezza tra le istanze Docker e il traffico connesso a Internet.

Risoluzione

Innanzitutto, assicurati di configurare la tua infrastruttura Docker di base per il tuo caso d'uso specifico.

In questo esempio, l'infrastruttura include:

  • Un'istanza Amazon Elastic Compute Cloud (Amazon EC2) che fa parte di una sottorete privata che funge da istanza di container Docker.
  • Un'istanza Amazon EC2 che fa parte di una sottorete pubblica che funge da istanza proxy.
  • Un daemon Docker installato sull'istanza Amazon EC2 in una sottorete privata. Questo daemon è configurato per consentire a tutte le attività dei container di inviare i log di output standard a CloudWatch.
  • Amazon Linux 2 per il sistema operativo (OS).

Inoltre, assicurati che il tuo ruolo di AWS Identity and Access Management (IAM) abbia CloudWatchAgentAdminPolicy, CloudWatchAgentServerPolicy o una policy simile associata alla tua istanza privata. La policy deve consentire di creare un gruppo di log, creare un flusso di log ed effettuare chiamate PutLogEvents.

Prepara la tua istanza Docker

  1. Configura le variabili di ambiente Linux per indirizzare tutto il traffico dall'istanza di container Docker alla tua istanza proxy. Nell'esempio seguente, l'indirizzo IP si applica all'istanza EC2 che funge da istanza proxy:
$ export https_proxy=http://192.0.2.86:8888/
$ export http_proxy=http://192.0.2.86:8888/
$ export no_proxy=localhost,169.254.169.254

Nota: queste variabili sono i requisiti minimi per la configurazione no_proxy. Assicurati di includere qualsiasi altro indirizzo IP di destinazione a cui non desideri che i client accedano tramite il proxy.

  1. Installa il container Docker nella tua istanza Docker. Guarda il seguente esempio:
$ sudo yum update -y
$ sudo yum install docker -y
$ sudo docker version
  1. Aggiorna la tua istanza Docker alla versione più recente.

  2. Avvia il daemon Docker con il seguente comando:

sudo systemctl start docker
  1. Per consentire a Docker di funzionare senza i privilegi sudo, esegui il seguente comando:
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
docker run hello-world
  1. Per verificare l'installazione di Docker, controlla l'output. Assicurati di visualizzare un messaggio di verifica dell'installazione simile al seguente:
"Hello From Docker!"
"This message shows that your installation appears to be working correctly."

Aggiungi la tua configurazione proxy a Docker

Per le configurazioni in cui il motore Docker è installato in Linux init (incluse le distribuzioni Amazon Linux, RHEL 6 o CentOS 6):

  1. Apri il file di configurazione /etc/sysconfig/docker usando il tuo editor preferito.

  2. Aggiungi la tua configurazione proxy al file. Usa l'indirizzo IP privato dell'istanza pubblica o proxy. Guarda il seguente esempio:

# Setup proxy
export http_proxy="http://192.0.2.86:8888/"
export https_proxy="http://192.0.2.86:8888/"
export no_proxy="/var/run/docker.sock,localaddress,localhost,169.254.169.254"

Nota: questi sono i requisiti minimi per la configurazione no_proxy. Assicurati di includere qualsiasi altro indirizzo IP di destinazione a cui non desideri che i client accedano tramite il proxy.

  1. Salva il tuo file di configurazione.

  2. Riavvia il servizio Docker:

$ sudo service docker restart

Per le configurazioni in cui il motore Docker è installato nel daemon di gestione del sistema Linux systemd (incluse le distribuzioni Amazon Linux 2 e RHEL 7):

  1. Crea una directory systemd per il servizio Docker. Guarda il seguente esempio:
$ sudo mkdir -p /etc/systemd/system/docker.service.d
  1. Crea un file proxy HTTP o HTTPS, a seconda della configurazione. Guarda il seguente esempio:
$ sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://192.0.2.86:8888/" "NO_PROXY=localhost,127.0.0.1,169.254.169.254"
$ vim /etc/systemd/system/docker.service.d/https-proxy.conf
[Service]
Environment="HTTPS_PROXY=http://192.0.2.86:8888/" "NO_PROXY=localhost,127.0.0.1,169.254.169.254"

Nota: questi sono i requisiti minimi per la configurazione no_proxy. Assicurati di includere qualsiasi altro indirizzo IP di destinazione a cui non desideri che i client accedano tramite il proxy.

  1. Per eliminare le modifiche, usa il seguente comando:
$ sudo systemctl daemon-reload
  1. Per riavviare Docker, usa il seguente comando:
$ sudo systemctl restart docker
  1. Verifica la tua nuova configurazione:
$ systemctl show --property=Environment docker
  1. Rivedi l'output:
Environment="HTTPS_PROXY=http://192.0.2.86:8888/" "NO_PROXY=localhost,127.0.0.1,169.254.169.254"

Verifica che i tuoi log Docker vengano inviati a CloudWatch

  1. Esegui l'immagine nginx in Docker.

  2. Usa il driver di log Docker awslogs per inviare i log di output standard dell'attività a CloudWatch Logs. Guarda il seguente esempio:

$ sudo docker run -d --name nginx --log-driver=awslogs --log-opt awslogs-region=eu-west-1 --log-opt awslogs-group=DockerLogGroupWithProxy --log-opt awslogs-create-group=true -p 8112:80 nginx
  1. Genera log per la tua prima attività Docker usando curl. Guarda il seguente esempio:
curl localhost:8112
  1. Visualizza i dati inviati al tuo gruppo di log nella console CloudWatch.

  2. Verifica che il log eventi per la tua attività Docker sia inviato al gruppo di log di CloudWatch. Ad esempio, cerca un log eventi simile al seguente:

198.51.100.100 - - [19/Sep/2018:10:13:38 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.53.1" "-"

Informazioni correlate

Monitoraggio delle istanze dei container

Creazione di un'immagine del container da utilizzare su Amazon ECS

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa