프록시를 통해 Docker 컨테이너 로그를 CloudWatch Logs에 푸시하려면 어떻게 해야 합니까?

3분 분량
0

프록시를 통해 Docker 컨테이너 로그를 Amazon CloudWatch에 게시하려고 합니다. 어떻게 해야 하나요?

간략한 설명

프록시를 사용하여 Docker 컨테이너 로그를 CloudWatch에 푸시할 수 있습니다. 이 단계는 Docker 인스턴스와 인터넷에 바인딩된 트래픽 간에 추가 보안 계층을 추가합니다.

해결 방법

시작하기 전에 특정 사용 사례에 대해 필요한 기본 Docker 인프라를 설정해야 합니다.

이 예제에서 인프라에는 다음 사항이 포함됩니다.

  • Docker 컨테이너 인스턴스로 작동하는 프라이빗 서브넷의 일부인 Amazon EC2(Amazon Elastic Compute Cloud) 인스턴스
  • 프록시 인스턴스로 작동하는 퍼블릭 서브넷의 일부인 Amazon EC2 인스턴스
  • 프라이빗 서브넷의 Amazon EC2 인스턴스 상단에 설치된 Docker 데몬. 이 데몬은 모든 컨테이너 작업이 표준 출력 로그를 CloudWatch에 푸시하는 것을 허용하도록 구성됩니다.
  • OS(운영 체제)에 대한 Amazon Linux 2

Docker 인스턴스 준비

1.     모든 트래픽을 Docker 컨테이너 인스턴스에서 프록시 인스턴스로 라우팅하도록 Linux 환경 변수를 설정합니다. 예를 들면 다음과 같습니다.

$ 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

참고: 이러한 변수는 no_proxy 구성에 대한 최소 요구 사항입니다. 클라이언트가 프록시를 통해 이동하지 않도록 할 다른 대상 IP 주소를 포함해야 합니다.

2.     Docker 인스턴스에 Docker 컨테이너를 설치합니다. 예를 들면 다음과 같습니다.

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

3.    Docker 인스턴스를 최신 버전으로 업데이트합니다.

4.     Docker 설치를 확인합니다.

$ docker run hello-world

5.     출력을 검토합니다. 다음과 비슷한 설치 확인 메시지가 수신되어야 합니다.

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

Docker에 프록시 구성 추가

Docker 엔진이 Linux init에 설치된 구성의 경우(Amazon Linux, RHEL 6 또는 CentOS 6 배포 포함):

1.     선호하는 편집기를 사용하여 구성 파일 /etc/sysconfig/docker를 엽니다.

2.     이 파일에 프록시 구성을 추가합니다. 예를 들면 다음과 같습니다.

# 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"

참고: 이는 no_proxy 구성에 대한 최소 요구 사항입니다. 클라이언트가 프록시를 통해 이동하지 않도록 할 다른 대상 IP 주소를 포함해야 합니다.

3.     구성 파일을 저장합니다.

4.     Docker 서비스를 다시 시작합니다.

$ sudo service docker restart

Docker 엔진이 Linux systemd 시스템 관리 데몬에 설치된 구성의 경우(Amazon Linux 2 및 RHEL 7 배포 포함):

1.     Docker 서비스에 대한 systemd 디렉터리를 생성합니다. 예를 들면 다음과 같습니다.

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

2.     구성에 따라 HTTP 또는 HTTPS 프록시 파일을 생성합니다. 예를 들면 다음과 같습니다.

$ 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"

참고: 이는 no_proxy 구성에 대한 최소 요구 사항입니다. 클라이언트가 프록시를 통해 이동하지 않도록 할 다른 대상 IP 주소를 포함해야 합니다.

3.     변경 사항을 플러시합니다.

$ sudo systemctl daemon-reload

4.     Docker를 다시 시작합니다.

$ sudo systemctl restart docker

5.     새 구성을 확인합니다.

$ systemctl show --property=Environment docker

6.     출력을 검토합니다.

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

Docker 로그가 CloudWatch에 푸시되었는지 확인

1.    Docker에서 nginx 이미지를 실행합니다.

2.    Docker awslogs 로그 드라이버를 사용하여 작업의 표준 출력 로그를 CloudWatch Logs에 푸시합니다. 예를 들면 다음과 같습니다.

$ 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.     curl을 사용하여 첫 번째 Docker 작업에 대한 로그를 생성합니다. 예를 들면 다음과 같습니다.

curl localhost:8112

4.     CloudWatch 콘솔의 로그 그룹에 전송된 데이터를 봅니다.

5.     Docker 작업에 대한 로그 이벤트가 CloudWatch Logs그 그룹에 푸시되었는지 확인합니다. 예를 들어, 다음과 비슷한 로그 이벤트를 찾습니다.

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

관련 정보

컨테이너 인스턴스에 CloudWatch Logs 사용

Amazon ECS용 Docker 기본 사항

AWS 공식
AWS 공식업데이트됨 일 년 전