¿Cómo puedo enviar los registros de contenedores de Docker a CloudWatch Logs a través de un proxy?

5 minutos de lectura
0

Quiero publicar mis registros de contenedores de Docker en Amazon CloudWatch a través de un proxy.

Descripción corta

Puede utilizar un proxy al enviar registros de contenedores de Docker a CloudWatch. Este paso añade una capa adicional de seguridad entre las instancias de Docker y el tráfico con destino a Internet.

Resolución

En primer lugar, asegúrese de configurar la infraestructura básica de Docker para su caso de uso específico.

En este ejemplo, la infraestructura incluye:

  • Una instancia de Amazon Elastic Compute Cloud (Amazon EC2) que forma parte de una subred privada que actúa como una instancia de contenedor de Docker.
  • Una instancia de Amazon EC2 que forma parte de una subred pública que actúa como instancia de proxy.
  • Un daemon de Docker instalado sobre la instancia de Amazon EC2 en una subred privada. Este daemon está configurado para permitir que todas las tareas del contenedor envíen sus registros de salida estándar a CloudWatch.
  • Amazon Linux 2 para el sistema operativo (SO).

Además, asegúrese de que su rol de AWS Identity and Access Management (IAM) tenga CloudWatchAgentAdminPolicy, CloudWatchAgentServerPolicy o una política similar asociada a su instancia privada. La política debe permitirle crear un grupo de registro, crear un flujo de registro y realizar llamadas a PutLogEvent.

Preparación de la instancia de Docker

1.    Configure las variables de entorno de Linux para dirigir todo el tráfico de la instancia del contenedor de Docker a la instancia de su proxy. En el siguiente ejemplo, la dirección IP se aplica a la instancia de EC2 que actúa como instancia de 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: Estas variables son los requisitos mínimos para la configuración no_proxy. Asegúrese de incluir cualquier otra dirección IP de destino a la que no desee que los clientes accedan a través del proxy.

2.    Instale el contenedor de Docker en su instancia de Docker. Vea el siguiente ejemplo:

$ sudo yum update -y
$ sudo yum install docker -y
$ sudo docker version

3.    Actualice su instancia de Docker a la versión más reciente.

4.    Inicie el daemon de Docker con el siguiente comando:

sudo systemctl start docker

5.    Para permitir que Docker se ejecute sin privilegios de sudo, ejecute el siguiente comando:

sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
docker run hello-world

6.    Para verificar la instalación de Docker, revise el resultado. Asegúrese de ver un mensaje de verificación de instalación similar al siguiente:

"Hello From Docker!"
"This message shows that your installation appears to be working correctly."

Agregue su configuración de proxy a Docker

Para configuraciones en las que el motor Docker esté instalado en el inicio de Linux (incluidas las distribuciones de Amazon Linux, RHEL 6 o CentOS 6):

1.    Abra el archivo de configuración /etc/sysconfig/docker con su editor preferido.

2.    Añada la configuración de proxy al archivo. Utilice la dirección IP privada de la instancia pública o proxy. Vea el siguiente ejemplo:

# 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: Estos son los requisitos mínimos para la configuración no_proxy. Asegúrese de incluir cualquier otra dirección IP de destino a la que no desee que los clientes accedan a través del proxy.

3.    Guarde el archivo de configuración.

4.    Reinicie el servicio Docker:

$ sudo service docker restart

Para las configuraciones en las que el motor Docker esté instalado en el daemon de administración del sistema Linux systemd (incluidas las distribuciones Amazon Linux 2 y RHEL 7):

1.    Cree un directorio systemd para el servicio Docker. Vea el siguiente ejemplo:

$ sudo mkdir -p /etc/systemd/system/docker.service.d

2.    Cree un archivo proxy HTTP o HTTPS, según su configuración. Vea los siguientes ejemplos:

$ 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: Estos son los requisitos mínimos para la configuración no_proxy. Asegúrese de incluir cualquier otra dirección IP de destino a la que no desee que los clientes accedan a través del proxy.

3.    Para eliminar los cambios, utilice el siguiente comando:

$ sudo systemctl daemon-reload

4.    Para reiniciar Docker, utilice el siguiente comando:

$ sudo systemctl restart docker

5.    Compruebe la nueva configuración:

$ systemctl show --property=Environment docker

6.    Revise el resultado:

Environment="HTTPS_PROXY=http://192.0.2.86:8888/" "NO_PROXY=localhost,127.0.0.1,169.254.169.254"

Compruebe que sus registros de Docker estén subidos a CloudWatch

1.    Ejecute la imagen de nginx en Docker.

2.    Utilice el controlador de registro awslogs de Docker para enviar los registros de salida estándar de la tarea a CloudWatch Logs. Vea el siguiente ejemplo:

$ 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

3.    Genere registros para su primera tarea de Docker con curl. Vea el siguiente ejemplo:

curl localhost:8112

4.    Vea los datos enviados a su grupo de registro en la consola de CloudWatch.

5.    Compruebe que el evento de registro de su tarea de Docker esté insertado en el grupo de registro de CloudWatch. Por ejemplo, busque un evento de registro similar al siguiente:

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

Información relacionada

Monitoring your container instances (Supervisión de las instancias de sus contenedores)

Creating a container image for use on Amazon ECS (Creación de una imagen de contenedor para su uso en Amazon ECS)

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año