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>
và<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 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:
- Kiểm tra Secret đã được tạo đúng:
kubectl get secret regcred -n <namespace> -o yaml
- Đảm bảo imagePullSecrets đã được thêm vào Pod/Deployment
- Kiểm tra quyền truy cập vào repository trong private registry
- Kiểm tra kết nối mạng từ Kubernetes nodes đến private registry
Đố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