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 1dCopy 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.keyCopy 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-certificatesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 참고시크릿을 참조하는 서비스 계정에만 제한하는 것은 기본적으로 비활성화되어 있습니다. 즉, 마스터 구성 파일에서
serviceAccountConfig.limitSecretReferences가false(기본 설정)로 설정되면 서비스에 시크릿을 연결할 필요가 없습니다.docker-registry서비스를 일시 중지합니다.oc rollout pause dc/docker-registry
$ oc rollout pause dc/docker-registryCopy 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/secretsCopy 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.keyCopy 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-registryCopy 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-dc48e4935fc2Copy 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.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음을 실행합니다.
update-ca-trust enable
$ update-ca-trust enableCopy 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 dockerCopy 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