3.10.6. 연결이 끊긴 설치를 위한 프라이빗 레지스트리 구성
연결이 끊긴 설치 프로세스를 사용하여 cephadm 을 설치하고 프라이빗 네트워크에 스토리지 클러스터를 부트스트랩할 수 있습니다. 연결이 끊긴 설치는 설치에 프라이빗 레지스트리를 사용합니다. 배포 중에 Red Hat Ceph Storage 노드가 인터넷에 액세스할 수 없는 경우 다음 절차를 사용하십시오.
인증 및 자체 서명된 인증서를 사용하여 보안 프라이빗 레지스트리를 설정하려면 다음 절차를 따르십시오. 인터넷 액세스 및 로컬 클러스터에 대한 액세스 권한이 있는 노드에서 다음 단계를 수행합니다.
프로덕션에 비보안 레지스트리를 사용하는 것은 권장되지 않습니다.
사전 요구 사항
- 인터넷이 연결된 VM(가상 머신) 또는 서버를 하나 이상 실행합니다.
- Red Hat Ceph Storage 8.0의 경우 Red Hat Enterprise Linux 9.4, 9.5 또는 9.6은 AppStream에 번들로 번들로 제공됩니다. Red Hat Ceph Storage 8.1의 경우 Red Hat Enterprise Linux 8.1, 9.5 또는 9.6은 AppStream에 번들로 번들로 제공됩니다.
-
registry.redhat.io에 대한 로그인 액세스 - 모든 노드에 대한 루트 수준 액세스.
프로세스
- 공용 네트워크와 클러스터 노드에 모두 액세스할 수 있는 노드에 로그인합니다.
노드를 등록하고 메시지가 표시되면 적절한 Red Hat 고객 포털 인증 정보를 입력합니다.
예
[root@admin ~]# subscription-manager register최신 서브스크립션 데이터를 가져옵니다.
예
[root@admin ~]# subscription-manager refreshRed Hat Ceph Storage에 사용 가능한 모든 서브스크립션을 나열합니다.
예
[root@admin ~]# subscription-manager list --available --all --matches="*Ceph*"Red Hat Ceph Storage에 사용 가능한 서브스크립션 목록에서 Pool ID를 복사합니다.
서브스크립션을 연결하여 소프트웨어 인타이틀먼트에 대한 액세스 권한을 얻습니다.
구문
subscription-manager attach --pool=POOL_IDPOOL_ID 를 이전 단계에서 확인한 풀 ID로 바꿉니다.
기본 소프트웨어 리포지토리를 비활성화하고 서버 및 추가 리포지토리를 활성화합니다.
Red Hat Enterprise Linux 9
[root@admin ~]# subscription-manager repos --disable=* [root@admin ~]# subscription-manager repos --enable=rhel-9-for-x86_64-baseos-rpms [root@admin ~]# subscription-manager repos --enable=rhel-9-for-x86_64-appstream-rpmspodman및httpd-tools패키지를 설치합니다.예제
[root@admin ~]# dnf install -y podman httpd-tools프라이빗 레지스트리의 폴더를 생성합니다.
예제
[root@admin ~]# mkdir -p /opt/registry/{auth,certs,data}레지스트리는
/opt/registry에 저장되고 디렉터리는 레지스트리를 실행하는 컨테이너에 마운트됩니다.-
auth디렉터리는 레지스트리가 인증에 사용하는htpasswd파일을 저장합니다. -
certs디렉터리는 레지스트리가 인증에 사용하는 인증서를 저장합니다. -
data디렉터리는 레지스트리 이미지를 저장합니다.
-
프라이빗 레지스트리에 액세스하기 위한 인증 정보를 생성합니다.
구문
htpasswd -bBc /opt/registry/auth/htpasswd PRIVATE_REGISTRY_USERNAME PRIVATE_REGISTRY_PASSWORD-
b옵션은 명령줄의 암호를 제공합니다. -
B옵션은Bcrypt암호화를 사용하여 암호를 저장합니다. -
c옵션은htpasswd파일을 생성합니다. - PRIVATE_REGISTRY_USERNAME을 프라이빗 레지스트리에 대해 생성할 사용자 이름으로 교체합니다.
PRIVATE_REGISTRY_PASSWORD를 프라이빗 레지스트리 사용자 이름에 생성할 암호로 바꿉니다.
예
[root@admin ~]# htpasswd -bBc /opt/registry/auth/htpasswd myregistryusername myregistrypassword1
-
자체 서명된 인증서를 생성합니다.
구문
openssl req -newkey rsa:4096 -nodes -sha256 -keyout /opt/registry/certs/domain.key -x509 -days 365 -out /opt/registry/certs/domain.crt -addext "subjectAltName = DNS:LOCAL_NODE_FQDN"LOCAL_NODE_FQDN을 프라이빗 레지스트리 노드의 정규화된 호스트 이름으로 교체합니다.
참고인증서의 각 옵션에 대한 메시지가 표시됩니다.
CN=값은 노드의 호스트 이름이며 DNS 또는/etc/hosts파일에서 확인할 수 있어야 합니다.예
[root@admin ~]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout /opt/registry/certs/domain.key -x509 -days 365 -out /opt/registry/certs/domain.crt -addext "subjectAltName = DNS:admin.lab.redhat.com"참고자체 서명된 인증서를 생성할 때 적절한 SAN(주체 대체 이름)을 사용하여 인증서를 생성해야 합니다. 적절한 SAN이 포함되지 않은 인증서에 대해 TLS 확인이 필요한 Podman 명령은 다음 오류를 반환합니다. x509: certificate relies on legacy Common Name field, use SANs or temporarily enable Common Name matching with GODEBUG=x509ignoreCN=0
skopeo가 파일 확장자.cert인 .cert인 인증서를 찾을 수 있도록domain.cert에 대한 심볼릭 링크를 만듭니다.예제
[root@admin ~]# ln -s /opt/registry/certs/domain.crt /opt/registry/certs/domain.cert프라이빗 레지스트리 노드의 신뢰할 수 있는 목록에 인증서를 추가합니다.
구문
cp /opt/registry/certs/domain.crt /etc/pki/ca-trust/source/anchors/ update-ca-trust trust list | grep -i "LOCAL_NODE_FQDN"LOCAL_NODE_FQDN을 프라이빗 레지스트리 노드의 FQDN으로 바꿉니다.
예제
[root@admin ~]# cp /opt/registry/certs/domain.crt /etc/pki/ca-trust/source/anchors/ [root@admin ~]# update-ca-trust [root@admin ~]# trust list | grep -i "admin.lab.redhat.com" label: admin.lab.redhat.com인증서를 설치하기 위해 프라이빗 레지스트리에 액세스하는 노드에 복사하고 신뢰할 수 있는 목록을 업데이트합니다.
예제
[root@admin ~]# scp /opt/registry/certs/domain.crt root@host01:/etc/pki/ca-trust/source/anchors/ [root@admin ~]# ssh root@host01 [root@host01 ~]# update-ca-trust [root@host01 ~]# trust list | grep -i "admin.lab.redhat.com" label: admin.lab.redhat.com로컬 보안 프라이빗 레지스트리를 시작합니다.
구문
podman run --restart=always --name NAME_OF_CONTAINER \ -p 5000:5000 -v /opt/registry/data:/var/lib/registry:z \ -v /opt/registry/auth:/auth:z \ -v /opt/registry/certs:/certs:z \ -e "REGISTRY_AUTH=htpasswd" \ -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \ -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \ -e "REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt" \ -e "REGISTRY_HTTP_TLS_KEY=/certs/domain.key" \ -e REGISTRY_COMPATIBILITY_SCHEMA1_ENABLED=true \ -d registry:2NAME_OF_CONTAINER 를 컨테이너에 할당할 이름으로 교체합니다.
예제
[root@admin ~]# podman run --restart=always --name myprivateregistry \ -p 5000:5000 -v /opt/registry/data:/var/lib/registry:z \ -v /opt/registry/auth:/auth:z \ -v /opt/registry/certs:/certs:z \ -e "REGISTRY_AUTH=htpasswd" \ -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \ -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \ -e "REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt" \ -e "REGISTRY_HTTP_TLS_KEY=/certs/domain.key" \ -e REGISTRY_COMPATIBILITY_SCHEMA1_ENABLED=true \ -d registry:2이는 포트 5000에서 개인 레지스트리를 시작하고 레지스트리를 실행하는 컨테이너에 레지스트리 디렉터리의 볼륨을 마운트합니다.
로컬 레지스트리 노드에서
registry.redhat.io가 컨테이너 레지스트리 검색 경로에 있는지 확인합니다./etc/containers/registries.conf파일을 편집하려면 이를 열고registry.redhat.io를unqualified-search-registries목록에 추가합니다.예
unqualified-search-registries = ["registry.redhat.io", "registry.access.redhat.com", "registry.fedoraproject.org", "registry.centos.org", "docker.io"]
Red Hat Customer Portal 인증 정보를 사용하여
registry.redhat.io에 로그인합니다.구문
podman login registry.redhat.ioRed Hat 고객 포털에서 다음 Red Hat Ceph Storage 8 이미지, Prometheus 이미지 및 대시보드 이미지를 프라이빗 레지스트리로 복사합니다.
Expand 표 3.2. 모니터링 스택의 사용자 정의 이미지 세부 정보 스택 구성 요소 모니터링 이미지 세부 정보 Prometheus
registry.redhat.io/openshift4/ose-prometheus:v4.15
Grafana
registry.redhat.io/rhceph/grafana-rhel9:latest
node-exporter
registry.redhat.io/openshift4/ose-prometheus-node-exporter:v4.15
AlertManager
registry.redhat.io/openshift4/ose-prometheus-alertmanager:v4.15
HAProxy
registry.redhat.io/rhceph/rhceph-haproxy-rhel9:latest
Keepalived
registry.redhat.io/rhceph/keepalived-rhel9:latest
SNMP Gateway
registry.redhat.io/rhceph/snmp-notifier-rhel9:latest
OAuth2 프록시
registry.redhat.io/rhceph/oauth2-proxy:v7.6
구문
podman run -v /CERTIFICATE_DIRECTORY_PATH:/certs:Z -v /CERTIFICATE_DIRECTORY_PATH/domain.cert:/certs/domain.cert:Z --rm registry.redhat.io/rhel9/skopeo:8.5-8 skopeo copy --remove-signatures --src-creds RED_HAT_CUSTOMER_PORTAL_LOGIN:RED_HAT_CUSTOMER_PORTAL_PASSWORD --dest-cert-dir=./certs/ --dest-creds PRIVATE_REGISTRY_USERNAME:PRIVATE_REGISTRY_PASSWORD docker://registry.redhat.io/SRC_IMAGE:SRC_TAG docker://LOCAL_NODE_FQDN:5000/DST_IMAGE:DST_TAG- CERTIFICATE_DIRECTORY_PATH를 자체 서명된 인증서의 디렉터리 경로로 바꿉니다.
- RED_HAT_CUSTOMER_PORTAL_LOGIN 및 RED_HAT_CUSTOMER_PORTAL_PASSWORD를 Red Hat Customer Portal 인증 정보로 교체합니다.
- PRIVATE_REGISTRY_USERNAME 및 PRIVATE_REGISTRY_PASSWORD를 프라이빗 레지스트리 인증 정보로 교체합니다.
- SRC_IMAGE 및 SRC_TAG를 registry.redhat.io에서 복사할 이미지의 이름 및 태그로 교체합니다.
- DST_IMAGE 및 DST_TAG를 프라이빗 레지스트리에 복사할 이미지의 이름 및 태그로 바꿉니다.
LOCAL_NODE_FQDN을 프라이빗 레지스트리의 FQDN으로 바꿉니다.
예
[root@admin ~]# podman run -v /opt/registry/certs:/certs:Z -v /opt/registry/certs/domain.cert:/certs/domain.cert:Z --rm registry.redhat.io/rhel9/skopeo skopeo copy --remove-signatures --src-creds myusername:mypassword1 --dest-cert-dir=./certs/ --dest-creds myregistryusername:myregistrypassword1 docker://registry.redhat.io/rhceph/rhceph-8-rhel9:latest docker://admin.lab.redhat.com:5000/rhceph/rhceph-8-rhel9:latest [root@admin ~]# podman run -v /opt/registry/certs:/certs:Z -v /opt/registry/certs/domain.cert:/certs/domain.cert:Z --rm registry.redhat.io/rhel9/skopeo skopeo copy --remove-signatures --src-creds myusername:mypassword1 --dest-cert-dir=./certs/ --dest-creds myregistryusername:myregistrypassword1 docker://registry.redhat.io/openshift4/ose-prometheus-node-exporter:v4.12 docker://admin.lab.redhat.com:5000/openshift4/ose-prometheus-node-exporter:v4.12 [root@admin ~]# podman run -v /opt/registry/certs:/certs:Z -v /opt/registry/certs/domain.cert:/certs/domain.cert:Z --rm registry.redhat.io/rhel9/skopeo skopeo copy --remove-signatures --src-creds myusername:mypassword1 --dest-cert-dir=./certs/ --dest-creds myregistryusername:myregistrypassword1 docker://registry.redhat.io/rhceph/grafana-rhel9:latest docker://admin.lab.redhat.com:5000/rhceph/grafana-rhel9:latest [root@admin ~]# podman run -v /opt/registry/certs:/certs:Z -v /opt/registry/certs/domain.cert:/certs/domain.cert:Z --rm registry.redhat.io/rhel9/skopeo skopeo copy --remove-signatures --src-creds myusername:mypassword1 --dest-cert-dir=./certs/ --dest-creds myregistryusername:myregistrypassword1 docker://registry.redhat.io/openshift4/ose-prometheus:v4.12 docker://admin.lab.redhat.com:5000/openshift4/ose-prometheus:v4.12 [root@admin ~]# podman run -v /opt/registry/certs:/certs:Z -v /opt/registry/certs/domain.cert:/certs/domain.cert:Z --rm registry.redhat.io/rhel9/skopeo skopeo copy --remove-signatures --src-creds myusername:mypassword1 --dest-cert-dir=./certs/ --dest-creds myregistryusername:myregistrypassword1 docker://registry.redhat.io/openshift4/ose-prometheus-alertmanager:v4.12 docker://admin.lab.redhat.com:5000/openshift4/ose-prometheus-alertmanager:v4.12
curl명령을 사용하여 이미지가 로컬 레지스트리에 있는지 확인합니다.구문
curl -u PRIVATE_REGISTRY_USERNAME:PRIVATE_REGISTRY_PASSWORD https://LOCAL_NODE_FQDN:5000/v2/_catalog예제
[root@admin ~]# curl -u myregistryusername:myregistrypassword1 https://admin.lab.redhat.com:5000/v2/_catalog {"repositories":["openshift4/ose-prometheus","openshift4/ose-prometheus-alertmanager","openshift4/ose-prometheus-node-exporter","rhceph/rhceph-8-dashboard-rhel9","rhceph/rhceph-8-rhel9"]}