Bu dökümanda, kendi ortamınızda şifreli (HTTPS) ve kimlik doğrulamalı (Basic Auth) bir Docker Registry kurmayı, ardından Rancher/RKE2 kümenize entegre etmeyi adım adım anlatacağım.
1. Sertifika Üretimi
Registry’nin HTTPS üzerinden güvenli çalışabilmesi için self-signed bir TLS sertifikası gerekiyor.
1.1 OpenSSL konfigürasyonu düzenleme
/etc/ssl/openssl.cnf
dosyasının sonuna SAN (Subject Alternative Name) ekleyin:
[ mydocker ]
subjectAltName = DNS:mydocker.me
Birden fazla domain kullanılacaksa virgül ile ayırabilirsiniz:
subjectAltName = DNS:mydocker.me, DNS:registry.local
1.2 Key ve CSR oluşturma
cd /etc/ssl/private
openssl ecparam -name prime256v1 -genkey -out server.key
openssl req -new -key server.key -out server.csr
Burada Common Name (CN) alanına registry domain adınızı (mydocker.me
) yazmalısınız.
1.3 Sertifika üretme
openssl x509 -in server.csr -out server.crt \
-req -signkey server.key \
-extfile /etc/ssl/openssl.cnf -extensions mydocker \
-days 3650
Üretilen dosyalar:
-
server.key
→ Private key -
server.crt
→ Sertifika -
server.csr
→ Sertifika isteği (kullanım sonrası silinebilir)
2. Docker Registry Kurulumu
2.1 Kullanıcı kimlik doğrulaması
Registry için Basic Auth yapılandıralım:
apt install apache2-utils -y
mkdir -p /etc/docker/auth
htpasswd -Bc /etc/docker/auth/htpasswd muser
2.2 Registry başlatma
docker run -d \
--restart=always \
--name registry \
-v /etc/ssl/private:/certs \
-v /etc/docker/auth:/auth \
-v /var/lib/registry:/var/lib/registry \
-e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
-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="Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
-p 443:443 \
registry:2
Test:
docker pull nginx:latest (dockerhub'tan nginx imajını local'e çekelim)
docker login mydocker.me (kendi registry'mize giriş yapalım)
docker tag nginx:latest mydocker.me/nginx:latest
docker push mydocker.me/nginx:latest
docker pull mydocker.me/nginx:latest
3. Rancher / RKE2 Node’larında Sertifika Tanıtımı
RKE2 containerd
kullanır. Self-signed sertifikaya güvenmesi için her node’a CA kopyalanmalıdır.
3.1 RKE2 özel dizinine kopyalama
mkdir -p /etc/rancher/rke2/certs.d/mydocker.me
cp /etc/ssl/private/server.crt /etc/rancher/rke2/certs.d/mydocker.me/ca.crt
3.2 Global trust store’a ekleme (opsiyonel ama önerilir)
cp /etc/ssl/private/server.crt /usr/local/share/ca-certificates/mydocker.crt
update-ca-certificates
3.3 Servisleri yeniden başlatma
systemctl restart rke2-server # master node
systemctl restart rke2-agent # worker node
4. Kubernetes Secret Oluşturma
4.1 Secret oluşturma
kubectl create secret docker-registry pullsecretq \
--docker-server=mydocker.me \
--docker-username=muser \
--docker-password='password' \
-n default
Not:
--docker-server
alanı sadece domain adı olmalı.https://
eklenmemelidir.
4.2 Deployment’ta secret kullanımı
apiVersion: apps/v1
kind: Deployment
metadata:
name: test-registry
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: test-registry
template:
metadata:
labels:
app: test-registry
spec:
containers:
- name: nginx
image: mydocker.me/nginx:latest
imagePullSecrets:
- name: pullsecretq
Uygulama:
kubectl apply -f test-registry.yaml
kubectl get pods -w
5. Sorun Giderme
x509: certificate signed by unknown authority
Sertifika/etc/rancher/rke2/certs.d/mydocker.me/ca.crt
altında değil veya SAN eksik.no basic auth credentials
Secret yanlış domain ile (https://mydocker.me
yerinemydocker.me
) oluşturulmuş.401 Unauthorized
htpasswd dosyasındaki kullanıcı/şifre ile Kubernetes secret’taki bilgiler uyuşmuyor.
Sonuç
Bu adımları izleyerek Rancher üzerinde çalışan Kubernetes workload’larının, kendi lokal/private Docker Registry’nizden HTTPS + Basic Auth ile güvenli bir şekilde imaj çekmesini sağlayabilirsiniz.
Top comments (0)