2.4.3. 수동으로 보안 레지스트리 노출
OpenShift Container Platform 클러스터 내에서 OpenShift Container Platform 레지스트리에 로그인하는 대신 먼저 레지스트리를 보안한 다음 경로로 노출하여 외부에서 액세스할 수 있습니다. 이를 통해 라우팅 주소를 사용하여 클러스터 외부에서 레지스트리에 로그인하고 라우팅 호스트를 사용하여 이미지에 태그를 지정하거나 푸시할 수 있습니다.
다음 각 전제 조건 단계는 일반적인 클러스터 설치 중에 기본적으로 수행됩니다. 해당 노드가 없는 경우 수동으로 수행합니다.
초기 클러스터 설치 중에 레지스트리에 대해 기본적으로 passthrough 경로가 생성되어야 합니다.
경로가 있는지 확인합니다.
$ oc get route/docker-registry -o yaml apiVersion: v1 kind: Route metadata: name: docker-registry spec: host: <host> 1 to: kind: Service name: docker-registry 2 tls: termination: passthrough 3
참고보안 레지스트리 노출에도 재암호화 경로가 지원됩니다.
존재하지 않는 경우 레지스트리를 경로의 서비스로 지정하여
oc create route passthrough
명령을 통해 경로를 만듭니다. 기본적으로 생성된 경로의 이름은 서비스 이름과 동일합니다.docker-registry 서비스 세부 정보를 가져옵니다.
$ oc get svc NAME CLUSTER_IP EXTERNAL_IP PORT(S) SELECTOR AGE docker-registry 172.30.69.167 <none> 5000/TCP docker-registry=default 4h kubernetes 172.30.0.1 <none> 443/TCP,53/UDP,53/TCP <none> 4h router 172.30.172.132 <none> 80/TCP router=router 4h
경로를 생성합니다.
$ oc create route passthrough \ --service=docker-registry \1 --hostname=<host> route "docker-registry" created 2
다음으로 호스트가 이미지를 푸시하고 가져올 수 있도록 호스트 시스템의 레지스트리에 사용되는 인증서를 신뢰해야 합니다. 레지스트리를 보호할 때 참조된 인증서가 생성되었습니다.
$ sudo mkdir -p /etc/docker/certs.d/<host> $ sudo cp <ca_certificate_file> /etc/docker/certs.d/<host> $ sudo systemctl restart docker
레지스트리 보안 정보를 사용하여 레지스트리에 로그인합니다. 그러나 이번에는 서비스 IP가 아닌 경로에 사용된 호스트 이름을 가리킵니다. 보안 및 노출된 레지스트리에 로그인할 때
docker login
명령에서 레지스트리를 지정해야 합니다.# docker login -e user@company.com \ -u f83j5h6 \ -p Ju1PeM47R0B92Lk3AZp-bWJSck2F7aGCiZ66aFGZrs2 \ <host>
이제 경로 호스트를 사용하여 이미지에 태그를 지정하고 내보낼 수 있습니다. 예를 들어
test
라는 프로젝트에서busybox
이미지에 태그를 지정하고 푸시하려면 다음을 수행합니다.$ oc get imagestreams -n test NAME DOCKER REPO TAGS UPDATED $ docker pull busybox $ docker tag busybox <host>/test/busybox $ docker push <host>/test/busybox The push refers to a repository [<host>/test/busybox] (len: 1) 8c2e06607696: Image already exists 6ce2e90b0bc7: Image successfully pushed cf2616975b4a: Image successfully pushed Digest: sha256:6c7e676d76921031532d7d9c0394d0da7c2906f4cb4c049904c4031147d8ca31 $ docker pull <host>/test/busybox latest: Pulling from <host>/test/busybox cf2616975b4a: Already exists 6ce2e90b0bc7: Already exists 8c2e06607696: Already exists Digest: sha256:6c7e676d76921031532d7d9c0394d0da7c2906f4cb4c049904c4031147d8ca31 Status: Image is up to date for <host>/test/busybox:latest $ oc get imagestreams -n test NAME DOCKER REPO TAGS UPDATED busybox 172.30.11.215:5000/test/busybox latest 2 seconds ago
참고이미지 스트림에는 경로 이름과 포트가 아닌 레지스트리 서비스의 IP 주소 및 포트가 있습니다. 자세한 내용은
oc get imagestreams
를 참조하십시오.