2.4.2. 수동으로 레지스트리 보안
TLS를 통해 트래픽을 제공하도록 레지스트리를 수동으로 보호하려면 다음을 수행합니다.
- 레지스트리를 배포합니다.
레지스트리의 서비스 IP 및 포트를 가져옵니다.
oc get svc/docker-registry
$ oc get svc/docker-registry NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE docker-registry ClusterIP 172.30.82.152 <none> 5000/TCP 1d
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 기존 서버 인증서를 사용하거나 지정된 CA에서 서명한 지정된 IP 및 호스트 이름에 유효한 키와 서버 인증서를 생성할 수 있습니다. 레지스트리 서비스 IP 및 docker-registry.default.svc.cluster.local 호스트 이름에 대한 서버 인증서를 생성하려면 Ansible 호스트 인벤토리 파일에 나열된 첫 번째 마스터(기본값 /etc/ansible/hosts )에서 다음 명령을 실행합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 라우터가 외부에 노출되는 경우
--hostnames
플래그에 공용 경로 호스트 이름을 추가합니다.--hostnames='mydocker-registry.example.com,docker-registry.default.svc.cluster.local,172.30.124.220 \
--hostnames='mydocker-registry.example.com,docker-registry.default.svc.cluster.local,172.30.124.220 \
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 외부에서 액세스할 수 있도록 기본 인증서 업데이트에 대한 자세한 내용은 레지스트리 및 라우터 인증서 재배포 를 참조하십시오.
참고oc adm ca create-server-cert
명령은 2년 동안 유효한 인증서를 생성합니다. 이는--expire-days
옵션으로 변경할 수 있지만 보안상의 이유로 이 값보다 커지지 않는 것이 좋습니다.레지스트리 인증서의 보안을 생성합니다.
oc create secret generic registry-certificates \ --from-file=/etc/secrets/registry.crt \ --from-file=/etc/secrets/registry.key
$ oc create secret generic registry-certificates \ --from-file=/etc/secrets/registry.crt \ --from-file=/etc/secrets/registry.key
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 레지스트리 Pod의 서비스 계정에 보안을 추가합니다( 기본 서비스 계정 포함).
oc secrets link registry registry-certificates oc secrets link default registry-certificates
$ oc secrets link registry registry-certificates $ oc secrets link default registry-certificates
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고시크릿을 참조하는 서비스 계정에만 제한하는 것은 기본적으로 비활성화되어 있습니다. 즉, 마스터 구성 파일에서
serviceAccountConfig.limitSecretReferences
가false
(기본 설정)로 설정되면 서비스에 시크릿을 연결할 필요가 없습니다.docker-registry
서비스를 일시 중지합니다.oc rollout pause dc/docker-registry
$ oc rollout pause dc/docker-registry
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 레지스트리 배포 구성에 시크릿 볼륨을 추가합니다.
oc set volume dc/docker-registry --add --type=secret \ --secret-name=registry-certificates -m /etc/secrets
$ oc set volume dc/docker-registry --add --type=secret \ --secret-name=registry-certificates -m /etc/secrets
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 레지스트리 배포 구성에 다음 환경 변수를 추가하여 TLS를 활성화합니다.
oc set env dc/docker-registry \ REGISTRY_HTTP_TLS_CERTIFICATE=/etc/secrets/registry.crt \ REGISTRY_HTTP_TLS_KEY=/etc/secrets/registry.key
$ oc set env dc/docker-registry \ REGISTRY_HTTP_TLS_CERTIFICATE=/etc/secrets/registry.crt \ REGISTRY_HTTP_TLS_KEY=/etc/secrets/registry.key
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 자세한 내용은 Docker 문서의 레지스트리 구성 섹션 을 참조하십시오.
HTTP에서 HTTPS로 레지스트리의 활성 프로브에 사용된 스키마를 업데이트합니다.
oc patch dc/docker-registry -p '{"spec": {"template": {"spec": {"containers":[{
$ oc patch dc/docker-registry -p '{"spec": {"template": {"spec": {"containers":[{ "name":"registry", "livenessProbe": {"httpGet": {"scheme":"HTTPS"}} }]}}}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 처음에 OpenShift Container Platform 3.2 이상에 레지스트리가 배포된 경우 레지스트리의 준비 상태 프로브에 사용된 체계를 HTTP에서 HTTPS로 업데이트합니다.
oc patch dc/docker-registry -p '{"spec": {"template": {"spec": {"containers":[{
$ oc patch dc/docker-registry -p '{"spec": {"template": {"spec": {"containers":[{ "name":"registry", "readinessProbe": {"httpGet": {"scheme":"HTTPS"}} }]}}}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow docker-registry
서비스를 다시 시작합니다.oc rollout resume dc/docker-registry
$ oc rollout resume dc/docker-registry
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 레지스트리가 TLS 모드에서 실행 중인지 확인합니다. 최신 docker-registry 배포가 완료될 때까지 기다린 후 레지스트리 컨테이너의 Docker 로그를 확인합니다.
:5000, tls에서 수신
대기할 항목을 찾아야 합니다.oc logs dc/docker-registry | grep tls
$ oc logs dc/docker-registry | grep tls time="2015-05-27T05:05:53Z" level=info msg="listening on :5000, tls" instance.id=deeba528-c478-41f5-b751-dc48e4935fc2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Docker 인증서 디렉터리에 CA 인증서를 복사합니다. 클러스터의 모든 노드에서 이 작업을 수행해야 합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ca.crt 파일은 마스터의 /etc/origin/master/ca.crt 의 사본입니다.
인증을 사용하는 경우 일부 버전의
docker
에서도 OS 수준에서 인증서를 신뢰하도록 클러스터를 구성해야 합니다.인증서를 복사합니다.
cp /etc/origin/master/ca.crt /etc/pki/ca-trust/source/anchors/myregistrydomain.com.crt
$ cp /etc/origin/master/ca.crt /etc/pki/ca-trust/source/anchors/myregistrydomain.com.crt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음을 실행합니다.
update-ca-trust enable
$ update-ca-trust enable
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
/etc/sysconfig/docker 파일에서 이 특정 레지스트리에 대해서만
--insecure-registry
옵션을 제거합니다. 그런 다음 데몬을 다시 로드하고 docker 서비스를 다시 시작하여 이 구성 변경을 반영합니다.sudo systemctl daemon-reload sudo systemctl restart docker
$ sudo systemctl daemon-reload $ sudo systemctl restart docker
Copy to Clipboard Copied! Toggle word wrap Toggle overflow docker
클라이언트 연결을 확인합니다. 레지스트리에서docker push
를 실행하거나 레지스트리에서docker pull
을 실행하면 성공해야 합니다. 레지스트리에 로그인 했는지 확인합니다.docker tag|push <registry/image> <internal_registry/project/image>
$ docker tag|push <registry/image> <internal_registry/project/image>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예를 들면 다음과 같습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow