DEV Community

Cover image for Self-Signed TLS ile Private Docker Registry Kurulumu ve Rancher Entegrasyonu
Erenalp Tekşen
Erenalp Tekşen

Posted on

Self-Signed TLS ile Private Docker Registry Kurulumu ve Rancher Entegrasyonu

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Ü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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

3.3 Servisleri yeniden başlatma

systemctl restart rke2-server   # master node
systemctl restart rke2-agent    # worker node
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Uygulama:

kubectl apply -f test-registry.yaml
kubectl get pods -w
Enter fullscreen mode Exit fullscreen mode

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 yerine mydocker.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)