0
0
Lập trình
Admin Team
Admin Teamtechmely

Hướng Dẫn Cài Đặt Docker Registry Bảo Mật và Tích Hợp Rancher

Đăng vào 7 tháng trước

• 4 phút đọc

Giới thiệu

Trong bài viết này, chúng ta sẽ tìm hiểu cách thiết lập một Docker Registry bảo mật (HTTPS) với xác thực cơ bản (Basic Auth) và cách tích hợp nó vào cụm Rancher/RKE2. Việc sử dụng Docker Registry riêng giúp bạn quản lý hình ảnh Docker một cách an toàn và hiệu quả hơn.

Mục lục

  1. Sản xuất chứng chỉ
  2. Cài đặt Docker Registry
  3. Triển khai chứng chỉ trên Node RKE2
  4. Tạo Kubernetes Secret
  5. Khắc phục sự cố
  6. Kết luận

1. Sản xuất chứng chỉ

Để Registry hoạt động an toàn qua HTTPS, cần phải tạo một chứng chỉ TLS tự ký.

1.1 Cấu hình OpenSSL

Đầu tiên, mở tệp cấu hình OpenSSL:

bash Copy
/etc/ssl/openssl.cnf

Thêm cấu hình SAN (Subject Alternative Name) vào cuối tệp:

bash Copy
[ mydocker ]
subjectAltName = DNS:mydocker.me

Nếu bạn muốn sử dụng nhiều miền, hãy phân tách bằng dấu phẩy:

bash Copy
subjectAltName = DNS:mydocker.me, DNS:registry.local

1.2 Tạo Key và CSR

Chuyển đến thư mục chứa các tệp chứng chỉ:

bash Copy
cd /etc/ssl/private

Tạo khóa riêng và yêu cầu chứng chỉ:

bash Copy
openssl ecparam -name prime256v1 -genkey -out server.key
openssl req -new -key server.key -out server.csr

Khi được yêu cầu, hãy nhập tên miền của Registry vào mục Common Name (CN) (ví dụ: mydocker.me).

1.3 Tạo chứng chỉ

Chạy lệnh sau để tạo chứng chỉ:

bash Copy
openssl x509 -in server.csr -out server.crt \
  -req -signkey server.key \
  -extfile /etc/ssl/openssl.cnf -extensions mydocker \
  -days 3650

Tại đây, bạn sẽ nhận được ba tệp:

  • server.key → Khóa riêng
  • server.crt → Chứng chỉ
  • server.csr → Yêu cầu chứng chỉ (có thể xóa sau khi sử dụng)

2. Cài đặt Docker Registry

2.1 Cấu hình xác thực người dùng

Trước tiên, chúng ta cần cấu hình xác thực cơ bản cho Registry:

bash Copy
apt install apache2-utils -y
mkdir -p /etc/docker/auth
htpasswd -Bc /etc/docker/auth/htpasswd muser

2.2 Khởi động Registry

Bây giờ, chúng ta sẽ khởi động Docker Registry với lệnh sau:

bash Copy
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

Kiểm tra Registry

Sau khi Registry đã được khởi động, hãy kiểm tra khả năng hoạt động bằng cách thực hiện các lệnh sau:

bash Copy
docker pull nginx:latest  # Tải hình ảnh nginx từ Docker Hub
docker login mydocker.me  # Đăng nhập vào Registry của bạn
docker tag nginx:latest mydocker.me/nginx:latest
docker push mydocker.me/nginx:latest
docker pull mydocker.me/nginx:latest

3. Triển khai chứng chỉ trên Node RKE2

RKE2 sử dụng containerd. Để các node có thể tin tưởng chứng chỉ tự ký, bạn cần sao chép chứng chỉ CA tới mỗi node.

3.1 Sao chép đến thư mục của RKE2

bash Copy
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 Thêm vào kho tin cậy toàn cầu (tùy chọn nhưng được khuyến nghị)

bash Copy
cp /etc/ssl/private/server.crt /usr/local/share/ca-certificates/mydocker.crt
update-ca-certificates

3.3 Khởi động lại dịch vụ

bash Copy
systemctl restart rke2-server   # nút master
systemctl restart rke2-agent    # nút worker

4. Tạo Kubernetes Secret

4.1 Tạo Secret

Chạy lệnh sau để tạo Kubernetes Secret:

bash Copy
kubectl create secret docker-registry pullsecretq \
  --docker-server=mydocker.me \
  --docker-username=muser \
  --docker-password='password' \
  -n default

Lưu ý: Tên miền trong --docker-server chỉ nên là tên miền mà không cần thêm https://.

4.2 Sử dụng secret trong Deployment

Dưới đây là ví dụ về cách sử dụng secret trong một Deployment:

yaml Copy
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

Sau khi tạo tệp Deployment, áp dụng nó:

bash Copy
kubectl apply -f test-registry.yaml
kubectl get pods -w

5. Khắc phục sự cố

  • Lỗi x509: chứng chỉ được ký bởi cơ quan không xác định: Chứng chỉ không có trong /etc/rancher/rke2/certs.d/mydocker.me/ca.crt hoặc thiếu SAN.
  • Không có thông tin xác thực cơ bản: Secret đã được tạo với tên miền sai (dùng mydocker.me thay vì https://mydocker.me).
  • 401 Unauthorized: Thông tin người dùng/mật khẩu trong tệp htpasswd không khớp với thông tin trong Kubernetes secret.

6. Kết luận

Bằng cách làm theo các bước trên, bạn có thể dễ dàng thiết lập một Docker Registry bảo mật và tích hợp nó với Rancher. Điều này không chỉ giúp bảo vệ hình ảnh Docker của bạn mà còn cải thiện quy trình triển khai ứng dụng. Hãy thử nghiệm ngay hôm nay và khám phá những lợi ích mà Docker Registry mang lại cho dự án của bạn!

Các thực hành tốt nhất

  • Đảm bảo cập nhật chứng chỉ TLS thường xuyên để bảo mật tối đa.
  • Sử dụng tên miền hợp lệ cho Registry.
  • Thực hiện kiểm tra định kỳ để đảm bảo tính sẵn sàng của Registry.

Những cạm bẫy phổ biến

  • Không cấu hình đúng SAN trong chứng chỉ có thể dẫn đến lỗi xác thực.
  • Quên khởi động lại dịch vụ sau khi cập nhật chứng chỉ.

Mẹo hiệu suất

  • Sử dụng SSD cho lưu trữ Registry để cải thiện tốc độ truy cập.
  • Tối ưu hóa cấu hình Docker Registry để phù hợp với khối lượng công việc của bạn.

FAQ

Q: Có thể sử dụng chứng chỉ từ một CA công cộng không?
A: Có, nhưng nếu bạn muốn sử dụng chứng chỉ tự ký, hãy chắc chắn rằng tất cả các node trong cụm đều tin cậy chứng chỉ đó.

Q: Làm thế nào để xóa một Registry?
A: Bạn có thể sử dụng lệnh docker rm -f registry để xóa Registry nếu không còn cần thiết nữa.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào