مجازی سازی و Cloud

پابلیش کردن رجیستری محلی داکر تحت گواهینامه امنیتی Self-signed

با توجه به نیازمندی ایجاد و راه اندازی یک ریپازیتوری محلی جهت اپلود/دانلود ایمیج های داکر که در مقاله قبلی به آنها پرداختم، در این مقاله می خواهم شما را با روال راه اندازی ریپازیتوری محلی تحت گواهینامه امنیتی Self-Signed آشنا نمایم. طبق مقاله قبل ما صرفا از یک ایمیج بنام registry:2 و اجرای آن در قالب یک کانتینر استفاده کردیم ولی چنانچه بخواهیم از بیرون از هاست داکر به آن دسترسی داشته باشید امکان پذیر نیست. دلیل این امر بخاطر این هست که docker deamon درخواست های ارسالی بدون گواهینامه و TLS را قبول نمی کند. اما این ضرورری است که ریپازیتوری محلی شما مانند یک داکر هاب واقعی در شبکه تان در دسترس کلیه کاربران و سایر هاستهای داکر باشد. برای این کار مطلوب است با استفاده از گواهینامه های محلی self-signed شرایطی را جهت پابلیش کردن این رجیستری محلی در کل شبکه فراهم کنید. البته می توان از گواهینامه های دیگری که بصورت public و توسط CA های معتبر ارائه می شود نیز استفاده کرد، ولی در این مقاله تمرکز ما به روش ایجاد یک رجیستری تحت گواهینامه های امنیتی محلی Self-signed خواهد بود. 

همانطور که می دانید گواهینامه های امنیتی یک روش جهت احراز هویت و اعتبارسنجی کلاینت/سرور تلقی می شوند و در روش Self-signed بایستی گواهینامه پابلیک در اختیار کلاینت قرار گیرد تا با استفاده از آن فرآیند ارسال درخواستها را رمزنگاری کرده و با کمک آن کلید در سمت سرور شما احراز هویت شود. 

اما جهت آشنایی بیشتر با فرآیند کار:

  1. ایجاد یک گواهینامه امنیتی خود امضاء Self-signed 
  2. راه اندازی رجیستری محلی با استفاده از گواهینامه خود امضاء
  3. راه اندازی اینترفیس گرافیکی رجیستری محلی
  4. دسترسی به رجیستری محلی از طریق رابط گرافیکی 

۱- ایجاد گواهینامه امنیتی خود امضاء Self-Signed Certificate

ابتدا یک پوشه به نام دلخواه (certfolder) ایجاد کنید تا فایلهای گواهینامه که با دستور openssl ایجاد می شوند در آن ساخته شود.

mkdir certfolder

با استفاده از دستور openssl می توان گواهینامه مذکور و کلیدهای مربوط به آن را ایجاد کرد. پس از اجرای این دستور، اطلاعاتی از شما درخواست می شود (نام کشور، استان، شهر، شرکت، ایمیل) و پس از ورود اطلاعات درخواستی، دو فایل با پسوندهای key و cert در مسیری که در دستور openssl مشخص کرده اید ایجاد می شود. همچنین در نظر داشته باشید که از شما نام سرور محلی رجیستری را سوال می کند، که بایستی نام سرورتان با فرمت FQDN وارد نمود. ( برای این کار توصیه می شود از dns server محلی و رکوردهای ثبت شده در آن استفاده کنید، در غیراینصورت و استفاده از نام دلخواه دیگری، الزامی است این نام در فایل /etc/hosts بصورت صحیح پیکربندی شود.)

sudo openssl req -newkey rsa:4096 -nodes -sha256  -keyout certfolder/domain.key  -x509  -days 365  -out certfolder/domain.cert

در نهایت دو فایل در پوشه Certfolder ایجاد شده است. این فایلها عبارتند از : 

domain.cert و domain.key: از فایل گواهینامه جهت احراز هویت کلاینت ها استفاده می شود و بایستی این فایل در اختیار کلاینت قرار گیرد تا با کمک آن به رجیستری متصل شده و مورد احراز هویت قرار گیرد. فایل کلید هم که کلید خصوصی سرور می باشد و در سرور ریپازیتوری لوکال قرار می گیرد و فرآیند رمزنگاری با آن انجام خواهد شد.

۲- راه اندازی رجیستری شخصی با استفاده از گواهینامه خودامضاء 

مطابق مقاله قبلی، جهت ایجاد یک رجیستری شخصی و لوکال، کافی هست ایمیج registry:2 را دانلود و آنرا در قالب یک کانتینر روی پورت ۵۰۰۰ اجرا کنید. البته این پورت قابل تغییر می باشد. 

docker run -d -p 5000:5000 -v $(pwd)/registry_certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.cert -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key –restart=always –name registry registry:2

تا اینجا از داخل هاست داکر، دسترسی به این رجیستری مقدور می باشد. اما برای اینکه از بیرون از هاست بتوان به این رجیستری وصل شد، کافی است گواهینامه ایجاد شده در مرحله اول را در کلاینت قرار دهیم. برای اینکار بایستی پوشه ای به نام ریپازیتوری محلی تان که قبلا FQDN آنرا وارد کردید در مسیر /etc/docker/certs.d ایجاد شود. 

ابتدا با دستور ls می توانید اطمینان حاصل کنید که محتوای پوشه Certs.d چیست و سپس در ادامه پوشه خواسته شده را ایجاد کنید

ls /etc/docker/certs.d/
mkdir -p /etc/docker/certs.d/myrep.local:5000

حال بایستی فایل گواهینامه امنیتی به نام domain.cert به داخل پوشه فوق کپی شود و نام آن به ca.crt تغییر داده شود. برای اینکار دستور زیر را اجرا کنید

cp domain.cert /etc/docker/certs.d/myrep.local:5000/ca.crt

 در آخرین مرحله یک بار سرویس داکر را ریستارت کنید. 

service docker restart

اگر دستورات فوق را به درستی اجرا کرده باشید، ریجیستری لوکال شخصی تان آماده است و اکنون می توانید از طریق کلاینت های بیرون هاست به آن متصل و ایمیج های دلخواه را به آن push/pull کنید.

۳- راه اندازی رابط گرافیکی رجیستری  

با کمک یک رابط گرافیکی که ایمیج آن با این نام konradkleine/docker-registry-frontend:v2 در داکرهاب قابل دانلود هست، می توانید یک رابط گرافیکی جهت پابلیش کردن رجیستری محلی تان ایجاد کنید. برای اینکار بسادگی ایمیج مذکور را دانلود و انرا در قالب یک کانتینر دیگر بارگذاری کنید.

docker run -d -e ENV_DOCKER_REGISTRY_HOST=myrep.local -e ENV_DOCKER_REGISTRY_PORT=5000 -e ENV_DOCKER_REGISTRY_USE_SSL=1 -p 0.0.0.0:80:80 konradkleine/docker-registry-frontend:v2

۴- دسترسی به رجیستری از طریق رابط گرافیکی 

با توجه به مراحل قبلی و راه اندازی رجیستری محلی، اکنون کلاینت ها می توانند از طریق براوزر و با وارد کردن نام سرور رجیستری لوکال به آن دسترسی داشته باشند و از طریق رابط گرافیکی امکان ارسال/دریافت ایمیج ها فراهم شده است. 

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *