لینوکس ۳۰۵؛ شب ۴۸: registry خصوصی با TLS و احراز هویت
فهرست نوشته
registry محل نگهداری image است و باید هویت endpoint و کاربر را بررسی کند. امشب registry محلی با TLS و رمز آزمایشی میسازیم؛ port فقط روی loopback منتشر میشود.
این جلسه بخشی از دورهٔ لینوکس ۳۰۵ در ۶۰ شب است.
جایگاه در دوره: هدفهای 352.3 آزمون 305-300.
محیط: docker-a، port 5000 آزاد، image lab305-web:v1. از دورهٔ LPIC-303 یک CA آزمایشگاهی و گواهی server با SAN برابر DNS:localhost و IP:127.0.0.1 آماده کن؛ leaf باید serverAuth داشته باشد. کلید CA وارد container نمیشود.
پوشهٔ خصوصی ~/lpic305/registry شامل certs/server.crt، certs/server.key و certs/ca.crt است. certificate chain لازم را در server.crt قرار بده و private key را mode 600 نگه دار. برای credential، فرمان زیر password را تعاملی میگیرد:
sudo apt install apache2-utils
mkdir -p "$HOME/lpic305/registry/auth"
chmod 700 "$HOME/lpic305/registry"
htpasswd -B -c "$HOME/lpic305/registry/auth/htpasswd" student
sudo mkdir -p /etc/docker/certs.d/localhost:5000
sudo install -m 644 "$HOME/lpic305/registry/certs/ca.crt" \
/etc/docker/certs.d/localhost:5000/ca.crt
sudo docker volume create registry305-data
sudo docker run --name registry305 -d \
-p 127.0.0.1:5000:5000 \
--mount type=volume,src=registry305-data,dst=/var/lib/registry \
--mount "type=bind,src=$HOME/lpic305/registry/certs,dst=/certs,readonly" \
--mount "type=bind,src=$HOME/lpic305/registry/auth,dst=/auth,readonly" \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/server.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/server.key \
-e REGISTRY_AUTH=htpasswd \
-e REGISTRY_AUTH_HTPASSWD_REALM=lab305 \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
registry:3
دستور htpasswd با -c فایل تازه میسازد؛ برای افزودن کاربر بعدی آن را حذف کن. digest image registry را نیز ثبت کن.
curl --cacert "$HOME/lpic305/registry/certs/ca.crt" \
https://localhost:5000/v2/
sudo docker login localhost:5000 --username student
sudo docker tag lab305-web:v1 localhost:5000/lab305-web:v1
sudo docker push localhost:5000/lab305-web:v1
sudo docker pull localhost:5000/lab305-web:v1
درخواست بدون credential باید 401 و endpoint معتبر TLS بدهد؛ login password را تعاملی میپرسد. push/pull موفق و digest شاهد مسیر مجاز است. بررسی TLS را با -k یا insecure-registries خاموش نکن.
بازگشت: logout، stop/rm container؛ volume و backup registry مستقل باقیاند. حذف volume همهٔ imageهای registry را از بین میبرد. credential store مناسب و backup داده/تنظیم را برای استفادهٔ مداوم طراحی کن.
منبع: Distribution با TLS و htpasswd ، اعتماد CA در Docker .