logo
logo
데브옵스
Harbor
컨테이너 이미지를 저장하고 분배하는 기업용 레지스트리
StackOverflow 질문 수: 128
Github Stars : ★ 25217
사용 기업
금융/보험
소셜/컨텐츠
종합
부동산/인테리어
기타
직장
여행
이커머스
techstack-logo
비바리퍼블리카
techstack-logo
카카오뱅크
techstack-logo
하이퍼커넥트
techstack-logo
네이버
techstack-logo
버킷플레이스
techstack-logo
라인
techstack-logo
SK플래닛
techstack-logo
엔터플
techstack-logo
모두싸인
techstack-logo
하나투어
techstack-logo
사람인에이치알
techstack-logo
엔에이치엔커머스
techstack-logo
지마켓
techstack-logo
쿼타랩
techstack-logo
한글과컴퓨터
기술 블로그 글
스푼
Harbor(Private Container Registry)와 ECR 연동 및 LifeCycle 정책 관리하기
Photo by Bernd 📷 Dittrich on Unsplash안녕하세요 스푼라디오에서 SRE 팀에서 DevOps업무를 담당하고 있는 Paul(백영진)이라고 합니다. AWS EKS에 배포를 위한 Docker 이미지를 저장하기 위한 컨테이너 저장소를 구성합니다. 일반적으로 Docker Hub, AWS ECR(Elastic Container Registry), Google Container Registry, 또는 Private Container Registry(Harbor) 등의 옵션을 사용하여 구성할 수 있습니다.스푼라디오에서는 Public Docker 이미지인 경우는 Docker Hub 에 저장을 하고, 내부 서비스의 경우는 Private Container Registry (Harbor)와 ECR(Elastic Container Registry) 에 도커 이미지를 저장하고 있습니다.1. Docker Container Registry 환경 구성Harbor는 CNCF(클라우드 네이티브 컴퓨팅 재단)의 프로젝트 중 하나로, 자체 호스팅형 Docker 이미지 레지스트리 및 공유 서비스입니다. 이는 Docker Registry를 기반으로 하며 보안, 정책, 복제, 이미지 취약점 스캔 등을 포함한 다양한 기능을 제공합니다. AWS ECR은 Amazon Web Services(AWS)에서 제공하는 관리형 Docker 컨테이너 레지스트리입니다. 이들은 모두 컨테이너 이미지를 저장하기 위한 서비스로 볼 수 있습니다.1.1 AWS ECR 통한 Container Registry 구성AWS ECR 통한 Container Registry 구성AWS ECR을 사용하여 컨테이너 저장소를 설정하면 Bitbucket Pipeline을 통해 Docker 빌드로 생성된 이미지를 AWS OpenID Connect(OIDC) 자격 증명을 사용하여 AWS ECR에 푸시할 수 있습니다. 이후, AWS ECR Replication 기능을 통해 도커 이미지를 다른 리전으로 복제할 수 있습니다. 그리고 사용자는 AWS IAM 역할을 통해 권한을 부여하거나, IAM 역할을 Okta 또는 기타 인증 시스템을 통해 접근할 수 있습니다. 하지만 매번 AWS ECR 로그인을 해야 하는 불편한 부분이 있습니다.1.2 Harbor와 AWS ECR 통한 Container Registry 구성Harbor & AWS ECR 통한 Container Registry 구성Private Container Registry 환경을 구성을 위하여 Harbor를 구성하였습니다. Harbor는 사용자를 인증하고 사용자 계정을 관리하기 위한 다양한 모드를 지원합니다. (데이터베이스 인증, LDAP/Active Direcotry, OIDC Provider) 사용자 계정별 인증 토큰을 통해서 Bitbucket Pipeline 또는 오피스에서 도커 이미지를 Harbor에 Push/Pull 할 수 있습니다.또한 도커 이미지를 Harbor가 아닌 다양한 도커 레지스트리(Docker Hub, Azure ACR, AWS ECR
docker
harbor
SK텔레콤
컨테이너 이미지 저장소 HA(High Available) 로 구성하기 (feat. Harbor)
컨테이너 이미지 저장소를 독립적으로 구성하는 방법을 살펴본다.일반적으로 컨테이너 이미지는 CNCF 의 프로젝트 중에 하나인 Harbor 를 사용하여 구성한다.Helm chart 가 잘 되어 있어 쿠버네티스 위에서 설치하는 것은 매우 쉬운데 운영 환경에 걸맞는 HA 구성은 여러가지 고려해야 할 사항들이 있다.그래서 이번에는 Harbor 를 HA 로 구성하는 방법을 알아본다.Harbor 를 HA 로 구성하려면 아래의 전제 조건이 필요하다.이 중에서 1, 2, 3 번은 구성되어 있다고 가정하고 이후를 살펴본다.또한 Public Cloud 는 AWS 를 사용했고 쿠버네티스 클러스터는 EKS 를 사용했다.아키텍처는 아래 그림과 같다.AWS 의 RDS 를 사용했으며 Harbor 에서 사용할 필요한 user 생성과 권한을 부여한다.어드민 권한으로 데이터베이스에 접속하여 Harbor 에서 사용할 database 를 생성한다.user 는 이고 필요한 password 를 생성한 다음 registry 데이터베이스의 모든 권한을 harbor 유저에 부여한다.테이블과 스퀀스를 다루기 위해서는 아래 추가적으로 권한을 부여해야 한다. (아래 권한이 추가되지 않으면 harbor 유저로 테이블과 시퀀스에 대한 생성/조회/삭제/수정을 하지 못한다.Harbor 는 캐시로 레디스를 사용하며 이 때 레디스 구성은 독립 혹은 레디스 + 센티널(sentinel) 구성만을 지원한다. 한마디로 클러스터 모드의 레디스는 지원하지 않는다.AWS Elasticache Redis 서비스는 센티널을 지원하지 않아 굳이 Elasticache 서비스를 사용할 이유가 없다.Elasticache 서비스의 레디스 구성으로 1개의 컨트롤노드 - 멀티 워커노드 로 하여 데이터 복제는 가능하나 1개의 컨트롤 노드가 무너지면 역시 장애가 발생하므로 서비스를 사용하여 구성하지 않았다.이 후 살펴볼 Harbor Helm chart 에서 쿠버네티스 위에 레디스를 1개로 띄우는 internal 생성 방식을 사용한다.레디스 구성을 HA 로 하고 싶다면, 레디스를 멀티 노드 센티널 구성으로 쿠버네티스 위에 띄우는 방법도 있으니 이는 레디스 설치 문서를 참고하면 된다.AWS 에서 지원하는 공유 스토리지는 가 있다. EFS 는 프로토콜을 지원하니 공유 스토리지로 사용 가능하다.먼저 AWS EFS 서비스에서 파일스토리지를 생성한다.생성된 EFS 는 실제로 파일시스템의 스토리지가 생성된 것은 아니다. 일종의 정보를 생성한 것이며 필요에 따라 실제 스토리지를 생성하고 할당 받는 방식이다.쿠버네티스에서는 , , 라는 스토리지 표준 관리 방법이 있다.흔히 Provisioner 라고 말하는 를 설치한다.EKS 에서는 추가 기능으로 를 추가할 수 있다.이 때 권한에서 중요한 한가지가 있는데 EKS node 에서 사용하는 role 에 (role 명은 eks 의 태그 정보를 확인해 보면 된다)정책이 반드시 추가되어 있어야 한다.변경해야 할 것은 로 앞서 EFS 에서 생성한 파일스토리지의 값으로 변경해 준다.스토리지클래스가 잘 작동하는지
harbor
kubernetes
nodejs
redis
하이퍼커넥트
ImagePullSecrets 없이 안전하게 Private Registry 사용하기!
안녕하세요, DevOps팀 Cloud Platform Unit의 Sammie입니다. 이번 글에서는 Kubernetes 환경에서 ImagePullSecrets[1] 없이 안전하게 private registry를 사용할 수 있는 방법에 대해 소개해보려고 합니다. 많이 알려진 방법은 Kubernetes node의 /root/.docker/config.json이나 containerd의 설정 파일에 credentials를 추가하는 것입니다. 이렇게 하면, 아주 쉽게 ImagePullSecrets 없이 private registry에서 image를 pull 할 수 있습니다. 하지만, 이 방법은 관리의 용이성이나 보안 안전성 측면에서 문제가 있습니다. 그래서 Kubernetes 1.20부터 alpha feature로 추가된 Kubelet Credential Provider - KEP 2133를 소개하려고 합니다. 이전 몇 개의 글에서도 소개해드렸지만, Hyperconnect에서는 Bottlerocket[2]과 AmazonLinux 2 기반의 node를 사용하며, 각각에 대한 설정 방법까지 공유하려고 합니다. Bottlerocket에 대한 설명은 분량 관계상 생략했으며, 이전 기술 블로그 글 - Bottlerocket in Production Kubernetes Cluster을 참고하시기 바랍니다. THE QUICK WAY - /ROOT/.DOCKER/CONFIG.JSON ImagePullSecrets 없이 private repository의 image를 사용하기 위한, 가장 흔하게 알려져 있으며 동시에 가장 편한 방법은 /root/.docker/config.json에 credentials를 넣는 방법입니다. Hyperconnect에서도 역시 이 방법을 사용하고 있고, Bottlerocket에 이 기능을 넣기 위해 containerd 설정 파일을 변경하도록 OS를 수정하여 사용하고 있습니다. (자세한 내용은 이 글을 참고하시면 됩니다.) 다만, 이 방법은 관리나 보안 모두 문제가 있습니다. 1. Hard-coded 된 credentials를 변경하기 힘듭니다. Node group을 rollout 하거나, Ansible 등으로 일괄적으로 설정을 변경한 다음 container runtime을 재시작해야 합니다. 2. 보안에 취약합니다. 누군가 AMI나 snapshot에 접근할 수 있다면, 새 EC2를 launch 한 다음 cat /root/.docker/config.json 명령을 입력해서 credentials를 가져올 수 있습니다. Bottlerocket의 경우에는 AMI 자체에는 credentials 정보가 없지만, userdata를 읽을 수 있는 ec2:DescribeInstanceAttribute 권한이 있다면 바로 credentials를 얻을 수 있습니다. HINTS FROM ECR? ECR [3]은 AWS에서 제공하는 container image registry입니다. 당연히 private repository를 구축할 수 있으며, IAM을 사용
harbor
kubernetes
사람인에이치알
Private Docker Registry를 바꿔보자!
안녕하세요. 사람인HR IT연구소 SE팀 윤진주 입니다. SE팀은 사람인에서 운영되는 전체 서비스가 보다 안정적으로 운영될 수 있도록 운영되는 모든 시스템을 관리하고 있습니다. 전체 서비스의 안정적인 운영을 위해 모든 서버들을 오픈소스를 이용하여 이중화 구축 진행하고 있으며 시스템을 보다 안정적으로 관리하기 위해 자체 개발한 모니터링 시스템들을 개선해 나가고 있습니다. 또한 업무의 효율화를 위해 시스템 관리 자동화 등을 지속적으로 진행하고 있습니다. 도입목적 사람인에서 사용하고 있는 Docker Registry를 Harbor Registry로 바꿔보겠다고 팀에 이야기 했었는데 핑계아닌 핑계로 차일피일 미루고 있었습니다. 그리고 점차 컨테이너 운영 서비스는 많아지는데 기존에 구축된 Docker Registry는 싱글 서버로 구성되어 있었고, 인증절차 또한 없어서 누구나 도메인만 알게되면 접속해서 이미지를 볼수 있는 상황이었습니다. 또한 사용량이 많아지다보니 로컬 스토리지로 구축된 도커 레지스트리 용량은 종종 임계치를 넘어 이미지를 지우거나 수동으로 Garbage Collection 작업을 진행하는등 여러가지 불편한 점이 많았습니다. 이에 따라 충분한 사용량 확보 및 보안성 향상 그리고 사용자 친화 WEB UI 등 많은것들이 현재 사용하는 Docker Registry보다 향상된 Harbor Registry에 대한 니즈를 더이상 미룰수 없었습니다. Harbor란 무엇인가? 공식 홈페이지에서는 Harbor를 다음과 같이 설명하고 있습니다. Harbor is an open source registry that secures artifacts with policies and role-based access control, ensures images are scanned and free from vulnerabilities, and signs images as trusted.Harbor, a CNCF Graduated project, delivers compliance, performance, and interoperability to help you consistently and securely manage artifacts across cloud native compute platforms like Kubernetes and Docker. (Harbor는 정책 및 역할 기반 액세스 제어로 아티팩트를 보호하고 이미지를 스캔하고 취약성이 없는지 확인하며 이미지를 신뢰할 수있는 것으로 서명하는 오픈 소스 레지스트리입니다. CNCF Graduated 프로젝트인 Harbor는 규정 준수, 성능 및 상호 운용성을 제공하여 Kubernetes 및 Docker와 같은 클라우드 네이티브 컴퓨팅 플랫폼에서 아티팩트를 일관되고 안전하게 관리 할 수 있도록 지원합니다.) Harbor에서 제공하는 핵심 기능들 출처: https://goharbor.io/ Harbor의 시스템 아키텍처 출처: https://github.com/goharbor/harbor/wiki/Arc
awscodedeploy
docker
harbor
helm
kubernetes
storybook
vuejs
Copyright © 2025. Codenary All Rights Reserved.