Ingress Controller Logs (인그레스 컨트롤러 로그)
Ingress 컨트롤러 로그는 인그레스 컨트롤러를 설치한 후에 볼 수 있는 로그입니다. 컨트롤러 팟 중 하나의 이름으로 kubectl logs를 호출하면 컨트롤러 버전, ConfigMap 값, 기본 TLS 인증서 등과 같은 시작 정보를 중요한 정보로 확인할 수 있습니다. 로그의 상세도는 --log 컨트롤러 인수를 사용하여 설정할 수 있으며, 이는 error, warning, info, debug 또는 trace 중 하나로 설정할 수 있습니다. 로그 레벨은 기본적으로 info로 설정되어 있지만, debug로 설정하면 상세로그를 기록할 수 있습니다.
HAProxy Logs (HAProxy 로그)
HAProxy는 다른 종류의 로그 메시지를 생성하며, 이는 트래픽의 트렌드 및 이상 현상을 식별하는 데 도움이 되는 정보를 포함하고 있습니다. HAProxy 액세스 로그는 syslog-server 및 log-format 어노테이션을 사용하여 구성할 수 있습니다. syslog-server 어노테이션을 설정하기 전까지는 액세스 로그를 볼 수 없습니다. 이를 설정하는 방법과 로그를 보는 방법을 참고할 수 있습니다.
로그 형식은 기본적으로 HTTP 로그 형식으로 설정되어 있으며, 필요에 따라 로그 형식을 변경할 수 있습니다. 또한 request-capture 어노테이션을 사용하여 사용자가 원하는 특정 정보를 로깅할 수 있습니다. 예를 들어 Authorization 헤더 또는 TLS 정보를 로깅하는 방법을 활용할 수 있습니다.
로그를 효과적으로 사용하려면 syslog 서버에 로그를 전송하거나 로그를 파일에 저장하는 로깅 드라이버를 구성하는 것이 중요합니다. Rate Limiting 및 TLS 정보와 같은 고급 로깅 기능도 있습니다. 이러한 설정은 프로덕션 환경에서 고려해야 할 중요한 사항이므로 로그 유형 및 형식을 적절하게 구성하여 원하는 정보를 얻을 수 있습니다.
로그 포맷은 기본 설정에서 사용자 정의 로깅 형식을 사용하여 업스트림, 응답 시간 및 상태와 관련된 추가 정보를 추가합니다. 다음은 로그 포맷과 해당 플레이스홀더(자리 표시자)에 대한 설명입니다.
log_format upstreaminfo
'$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" "$http_user_agent" '
'$request_length $request_time [$proxy_upstream_name] [$proxy_alternative_upstream_name] $upstream_addr '
'$upstream_response_length $upstream_response_time $upstream_status $req_id';
플레이스홀더(자리 표시자) 설명
$remote_addr
: 클라이언트의 소스 IP 주소$remote_user
: Basic 인증으로 제공된 사용자 이름$time_local
: Common Log Format의 로컬 시간$request
: 전체 원본 요청 라인$status
: 응답 상태 코드$body_bytes_sent
: 응답 헤더를 제외한 클라이언트로 보낸 바이트 수$http_referer
: Referer 헤더의 값$http_user_agent
: User-Agent 헤더의 값$request_length
: 요청 길이(요청 라인, 헤더 및 요청 본문 포함)$request_time
: 클라이언트에서 처음 바이트를 읽은 후 경과한 시간$proxy_upstream_name
: 업스트림의 이름. 형식은 upstream---$proxy_alternative_upstream_name
: 대체 업스트림의 이름. 형식은 upstream---$upstream_addr
: 업스트림 서버의 IP 주소 및 포트(또는 도메인 소켓의 경로). 여러 서버가 요청 처리 중에 연락되었으면 주소는 쉼표로 구분됩니다.$upstream_response_length
: 업스트림 서버에서 얻은 응답의 길이$upstream_response_time
: 업스트림 서버에서 응답을 수신하는 데 소요된 시간(초 단위, 밀리초 해상도)$upstream_status
: 업스트림 서버에서 얻은 응답의 상태 코드$req_id
: X-Request-ID HTTP 헤더의 값. 헤더가 설정되지 않으면 무작위로 생성된 ID.
추가로 사용 가능한 변수
$namespace
: 인그레스의 네임스페이스$ingress_name
: 인그레스의 이름$service_name
: 서비스의 이름$service_port
: 서비스의 포트
Ingress Controller Logs (인그레스 컨트롤러 로그)
Ingress 컨트롤러 로그는 HAProxy Kubernetes Ingress Controller를 설치한 후에 확인할 수 있는 정보로, 컨트롤러의 시작 및 구성과 관련된 핵심 정보를 제공합니다. 다음은 컨트롤러 로그의 예시 및 구성 방법에 대한 추가 설명입니다.
- 시작 로그 확인하기
위 명령을 통해 컨트롤러 팟의 로그를 확인할 수 있습니다.$ kubectl logs haproxy-kubernetes-ingress
- 로그 레벨 설정하기
로그의 상세도는 로그 레벨을 설정하여 조절할 수 있습니다. 아래 예시에서는 디버그 레벨로 로그를 설정하는 방법을 보여줍니다.
이제 디버그 레벨의 로그가 표시되며, 컨트롤러의 작업에 대한 자세한 정보를 확인할 수 있습니다.$ helm install haproxy haproxytech/kubernetes-ingress \ --set controller.logging.level=debug
HAProxy Logs (HAProxy 로그)
HAProxy는 풍부한 정보를 담고 있는 액세스 로그를 생성하며, 이를 구성하는 방법과 예시를 아래에서 설명합니다.
- Syslog 서버 설정하기
HAProxy 액세스 로그를 활성화하려면 syslog 서버를 설정해야 합니다. 아래는 ConfigMap을 사용하여 syslog 서버를 설정하는 예시입니다.
설정을 적용하려면:apiVersion: v1 kind: ConfigMap metadata: name: haproxy-kubernetes-ingress namespace: default data: syslog-server: "address:stdout, format:raw, facility:daemon"
Helm 차트를 사용하여 설치할 때는 다음과 같이 syslog 설정을 지정할 수 있습니다.$ kubectl apply -f configmap.yaml
$ helm install haproxy haproxytech/kubernetes-ingress \ --set controller.logging.traffic.address=stdout \ --set controller.logging.traffic.format=raw \ --set controller.logging.traffic.facility=daemon
- 로그 형식 설정하기
로그의 형식은log-format
어노테이션을 사용하여 설정할 수 있습니다. 기본적으로는 HTTP 로그 형식이지만, 필요에 따라 로그 형식을 변경할 수 있습니다.
이를 통해 HAProxy의 액세스 로그 형식을 사용자 정의할 수 있습니다.apiVersion: v1 kind: ConfigMap metadata: name: haproxy-kubernetes-ingress namespace: default data: log-format: "Your_Custom_Log_Format_String"
- 사용자 정의 정보 로깅하기
위 예시는 각각 헤더 정보, TLS SNI 값을, TLS 암호를 로깅하는 방법을 보여줍니다.apiVersion: v1 kind: ConfigMap metadata: name: haproxy-kubernetes-ingress namespace: default data: request-capture: "hdr(X-Amzn-Trace-Id), req.ssl_sni, ssl_fc_cipher"
- HAProxy는 request-capture 어노테이션을 통해 사용자가 원하는 정보를 로깅할 수 있습니다. 예를 들어, 헤더 정보나 TLS 세션과 관련된 정보를 로깅하려면 다음과 같이 설정할 수 있습니다.
이러한 설정을 통해 Ingress 컨트롤러와 HAProxy의 로그를 효과적으로 구성하여 클러스터에서 발생하는 이벤트 및 트래픽에 대한 자세한 정보를 얻을 수 있습니다. 이는 운영 및 디버깅에 유용하며, 필요에 따라 로그를 사용자 정의하여 특정 정보를 추적할 수 있습니다.
댓글