DEVOPS
9 posts
Untagged Docker Image 삭제 및 Exited된 Process 삭제

현재 저희 회사의 CI/CD 구조를 간략히 살펴보면 아래와 같습니다. 하루는 서버를 배포하며 로그를 확인하고 있는데 라는 익숙한 문구가 나오는 것이였습니다. 바로 서버에 남은 용량이 없다는 것이였습니다. 원인 빌드 서버는 빌드 파이프라인을 실행하는 서버라 용량이 부족할 일이 없는데 이게 왜 이럴까 생각하면서 빌드 코드를 확인하는 순간 전 머리를 탁 칠 수밖에 없었습니다. image3 바로 도커 이미지를 에 Push하고 지우는 코드가 존재하지 않았던 겁니다. 일단 빌드 스크립트 상에서 에 Push하고 로컬 도커 이미지를 지우는 로직을 추가했지만, 남은 이 이미지들을 어떻게 다 지우지하는 생각이 들었습니다. Tag가 인 이미지를 조회하고 거기서 나온 도커 이미지 ID를 이용해서 삭제하는 스크립트를 작성해서 다 지울까? (수동으로 지운다는 생각은 하지 않았습니다. 갯수가 어마무시해서…) 해결 그러던 중 Docker image를 조회할 때 옵션을 사용할 수 있다는 것을 알고 좀 …

December 15, 2023
DEVOPS
Terraform으로 AWS Infra 구축하기

요즘 를 논할 때 빠질 수 없는 용어가 있습니다. 바로 IaC(Infrastructure as Code) 입니다. 수동으로 인프라를 구축하는 것이 아닌 코드를 통해 인프라를 생성하고 관리하는 것을 말합니다. IaC를 사용하면 인프라 사양을 담은 구성 파일이 생성되므로 구성을 편집하고 배포하기가 더 쉬워집니다. 또한 IaC는 매번 동일한 환경을 하도록 보장합니다. IaC를 사용하면 버전 관리, 재사용, 공유할 수 있는 리소스 구성을 정의하여 안전하고 일관되게 인프라를 구축, 변경, 관리할 수 있습니다. 그중 가장 많이 쓰는 도구로 하시코프(Hashcorp)에서 개발중인 이 있습니다. 테라폼의 경우 AWS, GCP, Azure와 같은 주요 클라우드 서비스를 비롯한 다양한 서비스를 프로바이더 방식으로 제공하고 있습니다. 이를 틍해 테라폼만으로 멀티 클라우드의 리소스들을 선언하고 관리하는 것도 가능합니다. 이번에는 Terraform을 이용하여 AWS 인프라를 간단하게 구축해보도록 하겠습니…

November 26, 2023
DEVOPS
Drone CI와 Portainer를 이용한 CI/CD

Drone CI 글과 연결되니 한번 읽어보시는 것을 추천합니다. Portainer란? Accelerate container adoption 다양한 환경에서 쿠버네티스, 도커, 스웜 등을 쉽게 배포하고 관리할 수 있는 경량화된 관리 도구로서, 웹 UI를 제공합니다. 실행 중인 컨테이너, 이미지, 볼륨 등을 직관적으로 확인 가능 CLI로 작업했던 Docker 관련 작업을 손쉽게 사용 가능 Architecture Portainer는 와 두 가지 요소로 구성됩니다. 이들은 기존에 구축된 컨테이너 환경에서 가볍게 운영되는 컨테이너로 실행됩니다. 클러스터 내의 각 노드에 Portainer Agent를 설치해야 하며, 이는 Portainer Server 컨테이너에 정보를 전달하도록 설정되어야 합니다. 는 여러 Agent의 연결을 수용할 수 있으며, 이를 통해 하나의 중앙화된 인터페이스에서 여러 클러스터를 관리할 수 있습니다. 이를 위해 Portainer Server 컨테이너는 데이터 지속성이…

November 24, 2023
DEVOPS
무작위 로그인 시도 (Invalid user {name} from {ip address} port {port})

로그를 확인하던 중 아래와 같은 심상치않은 로그를 발견했습니다. 😱 이게 뭐야? 열심히 구글링을 해보니 이것은 매우 일반적인 상황으로 많은 봇넷들이 이런식의 무차별 대입 공격을 하는 것으로 파악됐습니다. 해결 방법은? 해결 방법은 다음과 같습니다. 무차별 대입으로도 찾을 수 없는 엄청 복잡한 password 설정 root에 대한 ssh login 비활성화 password 기반 인증 비활성화 22번이 아닌 다른 포트에서 ssh 서버 실행 fail2ban를 사용하여 공격자의 IP를 자동으로 차단 화이트리스트에서만 ssh 허용 etc… 이렇듯 많은 방법들이 있지만, 사내 상황에 맞는 화이트리스트만 ssh를 허용하는 방법을 채택했습니다. 이유는 저희는 사내 클라우드 인스턴스에 접속 시 password를 사용하지 않고 public/private key 방식으로 로그인하고 있기 때문에 해당이 되지 않고, 나머지 사항은 혹시나 싶을 이슈가 발생할 수도 있기 때문입니다. 처음에 로그를 봤을 …

November 20, 2023
DEVOPS
Private Nexus Docker Repository

애플리케이션을 Docker를 이용해 배포하다보면 Docker Build 후 생성된 Docker Image를 관리할 수 있는 Repository가 필요합니다. 이번 시간엔 Nexus를 이용한 사내 Docker Private Repository를 구축해보겠습니다. Running Nexus의 서버를 띄우는 건 Docker compose 파일로 간단하게 하실 수 있습니다. (물론 Docker와 Docker compose의 설치는 필수입니다.) 8081은 브라우저에서 접속할 포트이고, 8082는 API를 이용할 때 필요한 포트입니다. 이제 브라우저에서 접속해봅시다. () Setup 로그인을 위해서는 초기 비밀번호를 알아야합니다. 비밀번호는 위에서 설정한 volume 폴더에서 확인하실 수도 있고, 컨테이너 내부의 /nexus-data 폴더에서도 확인 하실 수 있습니다. Volume 폴더 지정한 Volume폴더로 이동 후 비밀번호를 확인합니다. Container 내부 Nexus의 C…

November 16, 2023
DEVOPS
Drone CI for Bitbucket

Drone CI는 도커(Docker)를 기반으로 harness에서 개발한 오픈 소스 CI 플랫폼입니다. 모든 구성 요소는 도커 컨테이너(Docker Container)로 되어 있으며 파이프라인 단계 실행도 도커 컨테이너로 수행됩니다. Go lang으로 작성되어 매우 가볍고 설정 파일도 간단한 YAML 파일로 구성할 수 있어 유지보수, 디버깅이 합니다. 또한 공통적인 파이프라인이 있을 경우 Template을 등록하여 공통적으로 사용할 수도 있습니다. Drone Server Drone Server는 저장소에서 변경 사항을 모니터링 합니다. 저장소에 저장된 구성 파일(.drone.yml)에 따라 Drone Runner에 task를 추가합니다. Drone Runner Drone Runner는 Drone Server에서 task들을 polling합니다. 후에 지정된 pipeline을 실행합니다. For Bitbucket 이 글에서는 Drone CI에 Bitbucket을 연동하는 과정을 설명…

October 21, 2023
DEVOPS
Jenkins 취약점 이슈 (Script Security sandbox bypass vulnerability in Email Extension Plugin)

Jenkins 서버에서 취약점이 발견되었다? 하루는 클라우드 서비스의 에서 Jenkins 서버가 떠있는 인스턴스에 심각한 취약점이 발견되었다고 알람이 왔습니다. 원인을 파악해보니 해당 플러그인에서 취약점이 발견되었다는 것입니다. (이슈 번호 CVE-2023-25765) 해결해보자 해당 플러그인의 2.93버전 이하에서 발견되는 이슈였습니다. 간단하게 버전을 2.93.1 이상으로 업그레이드하면 이슈가 해결될 것입니다. 따라서 jenkins 버전을 업그레이드 하기로 결정했습니다. 만약 jenkins 버전을 업데이트했는데 jenkins가 실행이 안된다면 을 확인해봐야 합니다. jenkins v2.375.1-1.1 버전부터는 jdk11버전 이상이 필요합니다. Jenkins 서버에서 취약점이 발견되었다? 해결해보자

October 14, 2023
DEVOPS
국가 간 API 통신 이슈

국가 간 API 통신은 일반적으로 느립니다. 예를 들어 한국에서 해외 사이트 접속 시 화면이 늦게 뜨는 등을 예로 들 수 있습니다. 이유가 무엇일까요? 이유를 하나만 꼽자면 바로 물리적인 거리를 대표적으로 꼽을 수 있겠습니다. 이번에는 국가 간 API 통신 이슈를 어떻게 해결했는지 공유해보도록 하겠습니다. 화면이 늦게 뜬다구? 서비스를 오픈하고 얼마 지나지 않아서 하루는 고객에게 화면이 너무 늦게 뜬다는 CS가 들어왔습니다. 처음엔 서버 코드의 이슈인지 파악하기 위해 API 들의 실행 시간을 체크했습니다. 하지만 이상이 API 상에는 문제가 없었습니다. DB를 조회하는 코드도 체크를 했기 때문에 가 발생한 것도 아니였습니다. 그러던 중 혹시 앱 페이지를 로드할 때 이미지를 가져오는 부분이 문제일 지 모른다고 생각했습니다. 그 이유는 현재 이미지들은 서울 리전의 스토리지에 업로드 되어 있고 앱에선 그 스토리지를 직접 바라보고 있었기 때문입니다. 또한 을 사용하고 있었기 때문에 N…

October 07, 2023
DEVOPS
ArgoCD err_too_many_redirects

하루는 ArgoCD 서버를 세팅하던 때였습니다. ArgoCD 서버를 무사히 띄운 후 https를 연결하여 브라우저에서 https로 접속하려고 보니 이슈가 발생하였습니다. err_too_many_redirects 넌 뭐야? 원인을 파악하니 아래와 같은 이슈가 있었습니다. 는 TLS를 자체적으로 종료하고 HTTP를 통해 백엔드 서비스와 통신 는 자체적으로 TLS를 종료하고 항상 HTTP 요청을 HTTPS로 리다이렉션 둘이 결합하면서 ArgoCD 서버는 HTTPS로 무한 리다이렉션이 발생하는 것이였습니다. 해결해보자 argocd-server deployment시 플래그 추가하는 것으로 간단하게 해결 참고 GITHUB ISSUE ArgoCD DOCS err_too_many_redirects 넌 뭐야? 해결해보자 참고

July 08, 2023
DEVOPS