프라이빗 레지스트리는 내부의 제어된(그리고 잠재적으로 더 안전한) 인프라에 애플리케이션의 Linux 컨테이너 이미지를 저장하는 데 유용할 수 있습니다.
Linux 컨테이너는 실행에 필요한 모든 파일을 포함한 전체 런타임 환경에서 애플리케이션의 패키징 및 분리를 가능하게 하는 기술로서, 여러 환경(개발, 테스트, 프로덕션 등) 간에 포함된 애플리케이션을 손쉽게 이동할 수 있게 해줍니다.
2023 Gartner® Magic Quadrant™에서 리더로 선정된 Red Hat
Red Hat은 Gartner 2023 Magic Quadrant 컨테이너 관리 부문의 실행 능력 및 비전의 완성도에서 최고점을 획득했습니다.
이 문서에서는 OCP 연결이 해제된 상태에서 배포를 수행할 수 있도록, 일반적으로 컨테이너 저장에 사용할 수 있는 더 강력한 보안 상태를 갖춘 간단한 SSL/TLS 지원 프라이빗 레지스트리를 생성하는 방법과 Red Hat OpenShift와 통합하는 방법을 제시합니다. OperatorHub에서 인터넷에 액세스할 수 없는 경우에도 사용할 수 있습니다.
필수 요건
다음과 같은 요건이 필요합니다.
- FQDN: registry.rhbrlabs.com
- OS: Red Hat Enterprise Linux 8.6 이상
- SELinux: 실행
- Firewalld: 활성화됨
- 레지스트리: Podman
- Apache 툴
- 볼륨: /data에 마운트된 100Gb
이 레지스트리는 OpenShift의 연결이 해제된 상태의 설치를 완벽히 지원합니다.
설치
시스템 보안을 극대화하기 위한 설치는 Linux에서 이미 사용할 수 있는 보안 기능 외에도 암호화를 사용해 구성됩니다.
필수 디렉터리를 생성합니다.
[root@registry ~]# mkdir -p /data/registry/{auth,certs,data}
인증서
컨테이너 레지스트리에 대한 인증서를 생성합니다. 이 예시에서는 10년 동안 유효한 인증서를 생성합니다.
[root@registry ~]# openssl req -newkey rsa:4096 -nodes -sha256 \ -keyout /data/registry/certs/registry.rhbrlabs.com.key -x509 -days 3650 \ -out /data/registry/certs/registry.rhbrlabs.com.crt \ -subj "/C=US/ST=NorthCarolina/L=Raleigh/O=Red Hat/OU=Engineering/CN=registry.rhbrlabs.com" \ -addext "subjectAltName = DNS:registry.rhbrlabs.com"
운영 체제는 생성된 인증서를 신뢰해야 합니다.
생성된 인증서를 앵커의 신뢰할 수 있는 디렉터리에 복사하고 update-ca-trust:를 실행합니다.
[root@registry ~]# cp /data/registry/certs/registry.rhbrlabs.com.crt /etc/pki/ca-trust/source/anchors/
[root@registry ~]# update-ca-trust
사용자 계정
레지스트리에 대한 액세스를 제어하려면 사용자 계정을 생성해야 합니다. 다음 예시에서는 사용자 레지스트리에 대한 계정을 생성합니다.
이미지 레지스트리에 대한 인증 파일을 생성합니다.
[root@registry ~]# dnf -y install httpd-tools
[root@registry ~]# htpasswd -bBc /data/registry/auth/htpasswd registry redhat12345678
HTTP 시크릿
사용자 계정 외에도 액세스의 신뢰성을 높이기 위해 시크릿이 필요합니다.
임의의 시크릿을 생성합니다.
[root@registry ~]# date | md5sum
10f207a4cbba51bf00755b5a50718966
레지스트리 소프트웨어
필요한 데이터를 준비했다면 이제 레지스트리를 생성할 차례입니다.
docker.io/library/registry:2 이미지를 사용하여 컨테이너 레지스트리를 생성합니다.
[root@registry ~]# dnf -y install podman
[root@registry ~]# podman create --name ocp-registry --net host -p 5000:5000 \ -v /data/registry/data:/var/lib/registry:z -v /data/registry/auth:/auth:z \ -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry" \ -e "REGISTRY_HTTP_SECRET=10f207a4cbba51bf00755b5a50718966" \ -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -v /data/registry/certs:/certs:z \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.rhbrlabs.com.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/registry.rhbrlabs.com.key docker.io/library/registry:2
위의 커맨드는 다음과 같은 메시지를 생성합니다.
Trying to pull docker.io/library/registry:2... Getting image source signatures Copying blob fd4a5435f342 done Copying blob 213ec9aee27d done Copying blob 4583459ba037 done Copying blob b136d5c19b1d done Copying blob 6f6a6c5733af done Copying config dcb3d42c17 done Writing manifest to image destination Storing signatures Port mappings have been discarded as one of the Host, Container, Pod, and None network modes are in use 22633f37262a4ab2d64fc8beb44bb80618b11802974fb2f45d31d98db3cf14e8
이제 레지스트리를 사용할 수 있습니다. 그러나 서비스 시작 및 중지를 제어하는 방법이 필요합니다.
시작 제어
부팅 시 컨테이너를 자동으로 시작하도록 레지스트리의 UNIT 파일을 생성합니다.
[root@registry ~]# cat /etc/systemd/system/ocp-registry.service
[Unit] Description=OCP Registry [Service] Restart=always ExecStart=/usr/bin/podman start -a ocp-registry ExecStop=/usr/bin/podman stop -t 10 ocp-registry [Install] WantedBy=network-online.target
컨테이너를 시작합니다.
[root@registry ~]# systemctl daemon-reload
[root@registry ~]# systemctl enable --now ocp-registry.service

프라이빗 레지스트리 실행 중
방화벽
로컬 방화벽을 사용하고 있으므로 레지스트리 서비스 포트에 권한을 부여해야 합니다.
Firewalld에서 TCP 5000 포트를 허용합니다.
[root@registry ~]# firewall-cmd --permanent --add-port=5000/tcp
[root@registry ~]# firewall-cmd --reload
레지스트리가 작동하는지 확인
이제 새 레지스트리에 대한 액세스를 확인하겠습니다.
인증 및 신뢰할 수 있는 SSL/TLS가 작동하는지 확인합니다.
[root@registry ~]# curl -u 'registry:redhat12345678' https://registry.rhbrlabs.com:5000/v2/_catalog
{"repositories":[]}
Red Hat OpenShift 통합
이 레지스트리를 OCP와 함께 사용하려면 인증 정보를 사용하여 base64 형식으로 파일을 생성합니다.
OpenShift 연결 해제된 설치에 대한 인증 정보를 사용하여 임시 파일을 생성합니다.
[root@registry ~]# cat <<EOF > ~/registry-secret.json "registry.rhbrlabs.com:5000": { "email": "registry@redhat.com", "auth": "$(echo -n 'registry:redhat12345678' | base64 -w0)" } EOF
맺음말
이제 추가 보안 기능을 갖춘 새로운 프라이빗 레지스트리가 실행됩니다. 프라이빗 레지스트리 서비스를 사용하면 액세스를 제어하고 더 엄격한 보안 표준을 충족할 수 있습니다. 퍼블릭 레지스트리 서비스는 보안 문제에 더 취약하기 때문입니다.
이 글에서는 보안이 강화된 레지스트리를 처음부터 생성하는 방법을 안내했습니다. 기능적인 솔루션임에도 불구하고 고가용성, 미러링, 캐싱, 지오리플리케이션(geo-replication)과 같은 고급 기능이 부족합니다. 이러한 고급 기능은 이미 더 강력한 솔루션에 구현되어 있습니다.
이러한 모든 기능과 컨테이너 취약점 스캔, 오브젝트 스토리지 지원, 자동 스케일링이 Red Hat Quay에 통합되어 있습니다.
Red Hat Quay 컨테이너 레지스트리 플랫폼은 모든 인프라에서 컨테이너와 클라우드 네이티브 아티팩트의 보안 강화 스토리지, 배포 및 거버넌스를 제공합니다. 독립 실행형 구성 요소로 사용하거나 Red Hat OpenShift에서 실행할 수 있습니다.
저자 소개
Andre Rocha is a Consultant at Red Hat focused on OpenStack, OpenShift, RHEL and other Red Hat products. He has been at Red Hat since 2019, previously working as DevOps and SysAdmin for private companies.
채널별 검색
오토메이션
기술, 팀, 인프라를 위한 IT 자동화 최신 동향
인공지능
고객이 어디서나 AI 워크로드를 실행할 수 있도록 지원하는 플랫폼 업데이트
오픈 하이브리드 클라우드
하이브리드 클라우드로 더욱 유연한 미래를 구축하는 방법을 알아보세요
보안
환경과 기술 전반에 걸쳐 리스크를 감소하는 방법에 대한 최신 정보
엣지 컴퓨팅
엣지에서의 운영을 단순화하는 플랫폼 업데이트
인프라
세계적으로 인정받은 기업용 Linux 플랫폼에 대한 최신 정보
애플리케이션
복잡한 애플리케이션에 대한 솔루션 더 보기
오리지널 쇼
엔터프라이즈 기술 분야의 제작자와 리더가 전하는 흥미로운 스토리
제품
- Red Hat Enterprise Linux
- Red Hat OpenShift Enterprise
- Red Hat Ansible Automation Platform
- 클라우드 서비스
- 모든 제품 보기
툴
체험, 구매 & 영업
커뮤니케이션
Red Hat 소개
Red Hat은 Linux, 클라우드, 컨테이너, 쿠버네티스 등을 포함한 글로벌 엔터프라이즈 오픈소스 솔루션 공급업체입니다. Red Hat은 코어 데이터센터에서 네트워크 엣지에 이르기까지 다양한 플랫폼과 환경에서 기업의 업무 편의성을 높여 주는 강화된 기능의 솔루션을 제공합니다.