상황
글 작성하기 2년전 wss 통신에서 장애가 발생했다.
해당 서비스는 초당 50 만건 이상의 트래픽을 감당하고 있을만큼 장애가 발생할 경우 문제가 큰 서비스였다.
당시 서버 로그를 확인해서 SSL 인증서에 문제가 있다는 것을 확인했다.
원인을 확인했으니 2가지를 확인해봤다.
1. 인증서 기간 확인
2. OpenSSL 버전 확인
인증서 기간에는 문제가 없었지만 Host 에서 TLS 에 대한 이슈가 있다는 것을 확인했고 OpenSSL 1.0.2g 에서는 TLS 1.2 이상을 지원하지 않았으며 Docker Daemon 에서도 TLS 1.2 / 1.3 을 지원하지 않았다.
우선 원활한 서비스를 위해 wss 통신하던걸 모두 ws 통신으로 변경했더니 서비스가 정상으로 돌아왔다.
원인
TLS 1.0, TLS 1.1 지원 중단으로 인해 현재 사용하는 OS 와 Docker 에서 통신이 불가능한 문제였다.
현재 사용중인 OS 와 Docker 버전이 매우 낮은 상태였고 OpenSSL 마저 버전이 낮아 TLS 1.2 이상을 지원하지 않는 버전이었다.
즉, 모든 버전을 업그레이드 해야 하는 상황이었다.
TLS 1.0, TLS 1.1 지원 중단
https://letsencrypt.org/2020/11/06/own-two-feet.html
Standing on Our Own Two Feet [Updated] - Let's Encrypt
Update, July 10, 2023 See our new blog post for details on the September 2024 expiration of the newer ISRG Root X1 cross-sign from IdenTrust. Update, December 21, 2020 Thanks to community feedback and our wonderful partners at IdenTrust, we will be able to
letsencrypt.org
https://webkit.org/blog/8462/deprecation-of-legacy-tls-1-0-and-1-1-versions/
Deprecation of Legacy TLS 1.0 and 1.1 Versions
Transport Layer Security (TLS) is a critical security protocol used to protect web traffic.
webkit.org
해결 방법
다행히 운영준인 온프로미스 환경의 서버는 총 10대가 있었으며 3 / 6 / 1 으로 서비스가 분산배포 되어 있는 상황이었다.
우선 실험을 위해 3 으루 분리되어 있는 서버를 대상으로 했으며, 서비스 영향도가 적은 방법으로 문제를 해결해보려했다.
- OpenSSL 1.0.2g 에서 1.1.1g 으로 버전 업그레이드
- Docker Deamon 버전 업그레이드
- OS 버전 업그레이드
3 대의 서버에 분산 배포되어 있는 도커 컨테이너를 2곳으로 분산 배포하여 사용자에게 영향이 가지 않도록 이전을 했다.
이후 OpenSSL 버전을 업그레이드하고 리부트를 진행했는데 아무런 일도 발생하지 않았다.
그래서 Docker Deamon 버전을 업그레이드 했더니 TLS 1.2 / TLS 1.3 이 잘 지원되었다.
이를 이제 순차적으로 모든 서버에 반복했고, 이후 wss 으로 다시 변경했다.
조금만 늦게 작업했으면 HTTPS 에 대한 인증서 재발급도 못했을 것이고 이랬으면 대형 사고였다.
Will You Be Impacted by Let’sEncrypt DST Root CA X3 Expiration?
Today (Monday 5/17/2021) morning I got an email from Let’s Encrypt talking about its Root CA expiration on 9/30/2021. Thanks for this early…
medium.com
사후 처리
모든 어플리케이션의 버전을 최신 버전으로 올리기 시작했다.
버전이 가장 낮은건 Node 8 버전이었으며 중요 서비스 먼저 Node 18 까지 올리기 시작했다.
사용하는 라이브러리의 버전이 0.0.1 버전도 있으며 (마지막 업데이트 10년전) Deprecated 되었다.
이런 경우는 라이브러리를 리뷰하고 대체할 건 대체하고 대체 불가능한 경우는 새로 개발했다.
앞으로 올려야할 버전이 많지만 업무의 우선순위로 지연되고 있는 상황이라 모니터링 서비스를 구축해서 장애를 예방하지는 못하더라도 즉각적으로 대응할 수 있는 환경을 만들어 두었다.
회고
이러한 문제 직면을 하게된 이유는 유지보수를 소훌하게했기 때문이다.
유지보수를 잘했더라면 TLS 1.0, TLS 1.1 지원 중단된지도 모르고 운영과 개발 업무를 진행해 왔을 것이다.
추후 시간이 될 때마다 버전을 올려주고 마무리 작업으로 OS 까지 올리면 완벽하다.
언제나 느끼는거지만 한번에 많은 지식과 경험을 얻는 방법은 장애를 직면했을때 뿐인 것 같다.
새로운 기술을 학습하고 도입하는데에도 많은 것을 배울 수 있지만, 장애 대응만큼 스파르타한것은 없었다..
프로젝트의 우선순위로 외면당한 서비스의 경우 유지보수할 시간이 없다면 모니터링 시스템만 잘 구축해도 장애 예방은 안되더라도 즉각적인 대응을 할 수 있는 환경을 만들어둔건 참 잘한 행동이었다.
모니터링 시스템 덕분에 의도하지는 않았지만 Bulk Mail 시스템의 장애도 단번에 알아차릴 수 있었다.
이상.
'임시보관 > 실무 이슈' 카테고리의 다른 글
2022 - 휴가만 쓰면 PTSD.. (0) | 2024.02.29 |
---|---|
2023 - 모니터링을 구축해서 프로젝트 운영을 편하게 하자 (0) | 2024.02.29 |
2022 - 서버를 재분배하자 (0) | 2024.02.29 |
2024 - CVE-2024-21626 - runc Docker 취약점 (0) | 2024.02.29 |
2023 - Bulk Mailler 실종 사건 (0) | 2024.02.29 |