Chuyển tới nội dung chính

Sử Dụng Private Registry với Kubernetes

Private Registry của VNETWORK có thể được tích hợp dễ dàng với các môi trường Kubernetes. Hướng dẫn này mô tả cách thiết lập xác thực và sử dụng các image từ Private Registry trong các ứng dụng chạy trên Kubernetes, giúp bạn triển khai ứng dụng container một cách an toàn và hiệu quả trong môi trường sản xuất.

1. Tạo Secret Chứa Thông Tin Đăng Nhập

Để Kubernetes pods có thể pull images từ private registry, bạn cần tạo một Kubernetes Secret chứa thông tin đăng nhập:

kubectl create secret docker-registry regcred \
--docker-server=k8s.io.reg.vnetwork.dev \
--docker-username=<username> \
--docker-password=<password> \
--namespace=<namespace>

Trong đó:

  • regcred là tên của Secret (có thể đổi tùy ý)
  • <username><password> là thông tin đăng nhập đã được cấp qua email
  • <namespace> là namespace Kubernetes nơi bạn muốn sử dụng Secret
Tài khoản

Tài khoản và mật khẩu để đăng nhập vào Private Registry được cấp và gửi trực tiếp đến email của khách hàng. Vui lòng kiểm tra email hoặc liên hệ với nhóm hỗ trợ của VNETWORK nếu bạn chưa nhận được thông tin đăng nhập.

2. Sử Dụng Secret trong Pod

2.1. Thêm imagePullSecrets vào Pod

apiVersion: v1
kind: Pod
metadata:
name: my-private-app
spec:
containers:
- name: private-app
image: k8s.io.reg.vnetwork.dev/<namespace>/<repository>:<tag>
imagePullSecrets:
- name: regcred

2.2. Thêm imagePullSecrets vào ServiceAccount

Thay vì thêm Secret vào từng Pod, bạn có thể thêm nó vào ServiceAccount để tất cả các Pods sử dụng ServiceAccount đó đều có thể truy cập registry:

kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "regcred"}]}' -n <namespace>

3. Sử Dụng Trong Các Resources

3.1. Trong Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: k8s.io.reg.vnetwork.dev/<namespace>/<repository>:<tag>
imagePullSecrets:
- name: regcred

3.2. Trong StatefulSet

apiVersion: apps/v1
kind: StatefulSet
metadata:
name: my-stateful-app
spec:
serviceName: "my-service"
replicas: 3
selector:
matchLabels:
app: my-stateful-app
template:
metadata:
labels:
app: my-stateful-app
spec:
containers:
- name: my-app
image: k8s.io.reg.vnetwork.dev/<namespace>/<repository>:<tag>
imagePullSecrets:
- name: regcred

4. Kiểm Tra và Xác Minh

Kiểm tra xem Pod có thể pull image từ private registry:

kubectl describe pod <pod-name> -n <namespace>

Tìm mục "Events" trong output để xem quá trình pull image.

5. Xử Lý Lỗi

Nếu gặp vấn đề khi pull image:

  1. Kiểm tra Secret đã được tạo đúng:
kubectl get secret regcred -n <namespace> -o yaml
  1. Đảm bảo imagePullSecrets đã được thêm vào Pod/Deployment
  2. Kiểm tra quyền truy cập vào repository trong private registry
  3. Kiểm tra kết nối mạng từ Kubernetes nodes đến private registry
Tự động hóa

Đối với môi trường CI/CD, bạn có thể tạo Secret từ file Docker config:

kubectl create secret generic regcred \
--from-file=.dockerconfigjson=$HOME/.docker/config.json \
--type=kubernetes.io/dockerconfigjson