Nginx 서버로 접근 권한 생성

iseon_u·2023년 5월 1일
0

Docker

목록 보기
10/12
post-thumbnail

Nginx 서버로 접근 권한 생성


Self-signed ROOT 인증서(CA) 파일 생성

$ mkdir certs
$ openssl genrsa -out ./certs/ca.key 2048
$ openssl req -x509 -new -key ./certs/ca.key -days 10000 -out ./certs/ca.crt
  • 인증서 정보 공백 입력 무관

ROOT 인증서로 레지스트리 컨테이너에 사용될 인증서를 생성

$ openssl genrsa -out ./certs/domain.key 2048
$ openssl req -new -key ./certs/domain.key -subj /CN=${DOCKER_HOST_IP} -out ./certs/domain.csr
$ echo subjectAltName = IP:${DOCKER_HOST_IP} > extfile.cnf
$ openssl x509 -req -in ./certs/domain.csr -CA ./certs/ca.crt -CAkey ./certs/ca.key -CAcreateserial -out ./certs/domain.crt -days 10000 -extfile extfile.cnf
  • 인증서 서명 요청 파일 CSR 파일 생성
  • ROOT 인증서로 새로운 인증서 발급

레지스트리에 로그인할 때 사용할 계정, 비밀번호 저장 파일 생성

$ htpasswd -c htpasswd alicek106
$ mv htpasswd certs/
  • htpasswd가 설치 필요

nginx.conf 설정 파일

$ vi certs/nginx.conf 
upstream docker-registry {
	server registry:5000;
}

server {
	listen 443;
	server_name ${DOCKER_HOST_IP};
	ssl on;
	ssl_certificate /etc/nginx/conf.d/domain.crt; ssl_certificate_key /etc/nginx/conf.d/domain.key; client_max_body_size 0;
	chunked_transfer_encoding on;
	location /v2/ {
		if ($http_user_agent ~ "A(docker\/1\.(3i4|5(?!\.[0-9]-dev))!Go ),*$" ) {
			return 404;
		}

		auth_basic "registry.localhost";
		auth_basic_user_file /etc/nginx/conf.d/htpasswd;
		add_header 'Docker-Distribution-Api-Version' 'registry/2.0' always;

		proxy_pass
		proxy_set_header IHost
		proxy_set_header :X-Real-IP proxy_set_headerX:-Forwarded-For$proxy_add_x_forwarded_for; proxy_set_headerX:-Forwarded-ProtoSscheme;
		proxy_read_timeout 900;
	}
}
  • certs 디렉터리에 nginx.conf 파일로 저장
  • Nginx 서버에서 SSL 인증에 필요한 각종 파일의 위치와 레지스트리 컨테이너로의 Proxy를 설정

Nginx 서버 컨테이너 생성

$ docker run -d --name nginx_frontend \
- p 443:443 \
--link myregistry:registry \
-v $(pwd)/certs/:/etc/nginx/conf.d \ 
nginx:1.9
  • 옵션 -v
    • nginx.conf, domain.crt, domain.key 파일이 존재하는 auth 디렉터리

레지스트리 컨테이너로 로그인

$ docker login https://${DOCKER_HOST_IP}
  • login 뒤에 https://${DOCKER_HOST_IP} 입력
  • 신뢰할 수 없는 인증서 사용시 에러 출력
  • 직접 서명한 인증서를 신뢰할 수 있는 인증서 목록에 추가

신뢰할 수 있는 인증서 목록에 추가

$ cp certs/ca.crt /usr/local/share/ca-certificates/ 
$ update-ca-certificates
  • ca.crt 파일을 인증서 목록에 추가

도커 재시작 및 Nginx 서버 컨테이너 시작

$ service docker restart
$ docker start nginx_frontend
  • 이후 다시 docker login 으로 인증 요청

레지스터 컨테이너에 이미지 push, pull 준비

$ docker tag my-image-name:0.0 192.168.99.100/my-image-name:0.0 
$ docker push 192.168.99.100/my-image-name:0.0
  • 이미지의 접두어를 IP나 도메인 이름으로 설정

사설 레지스트리 RESTful API

  • 레지스트리 컨테이너는 별도의 인터페이스를 제공하지 않는다
  • 레지스트리 컨테이너를 제어하려면 RESTful API를 사용
  • 모든 RESTful API 목록을 확인하려면 도커 공식 문서의 레지스트리 항목 참고

ℹ️ 개발자들이 미리 만들어놓은 레지스트리 제어 CLI 사용 가능
깃허브에서 docker registry cli 같은 키워드 검색

profile
🧑🏻‍💻 Hello World!

0개의 댓글