📌 Giới Thiệu
Nếu bạn đang chạy Kubernetes trên một hệ thống không có Docker mà sử dụng containerd, và hệ thống này chỉ kết nối internet thông qua proxy, thì bạn có thể gặp lỗi khi cố gắng pull image từ registry bên ngoài ví dụ như Docker Hub.

Một ví dụ phổ biến là khi cài đặt Longhorn bằng Helm, nhưng Kubernetes không thể tải được các container cần thiết.
🔹 Triệu chứng lỗi phổ biến:
- Lệnh
helm install
chỉ hoạt động khi đặthttps_proxy
trong lệnh. - Khi Helm đã cài đặt Longhorn, Kubernetes vẫn không thể tải ảnh container và báo lỗi
Failed to pull image
. - Cấu hình proxy trong
.bashrc
không có tác dụng với Kubernetes và containerd.
💡 Nguyên nhân chính?
🔸 Containerd không tự động sử dụng proxy hệ thống, vì vậy bạn cần cấu hình thủ công.
Bài viết này sẽ hướng dẫn bạn cách cấu hình proxy cho containerd để Kubernetes có thể pull image thông qua proxy. 🚀
1️⃣ Kiểm Tra Cấu Hình Proxy Hiện Tại
🔹 Cấu hình proxy trong .bashrc
hoặc .profile
Thông thường, bạn có thể đặt proxy trong .bashrc
hoặc .profile
như sau:
export http_proxy=http://proxy.example.com
export https_proxy=http://proxy.example.com
export HTTP_PROXY=http://proxy.example.com
export HTTPS_PROXY=http://proxy.example.com
export NO_PROXY=localhost,127.0.0.1
Sau đó, nạp lại file config:
source ~/.bashrc
📌 Lưu ý: Cách này chỉ áp dụng cho terminal, không ảnh hưởng đến containerd.
2️⃣ Cấu Hình Proxy Cho Containerd
Kubernetes sử dụng containerd
để pull image vì vậy chúng ta cần cấu hình proxy cho containerd.
🔹 Bước 1: Tạo thư mục cấu hình containerd
sudo mkdir -p /etc/systemd/system/containerd.service.d
🔹 Bước 2: Tạo file http-proxy.conf
sudo nano /etc/systemd/system/containerd.service.d/http-proxy.conf
📌 Thêm nội dung sau vào file:
[Service]
Environment="HTTP_PROXY=http://proxy.example.com"
Environment="HTTPS_PROXY=http://proxy.example.com"
Environment="NO_PROXY=localhost,127.0.0.1"
💡 Giải thích:
HTTP_PROXY
vàHTTPS_PROXY
→ Chỉ định địa chỉ proxy.NO_PROXY
→ Danh sách các địa chỉ không cần proxy.
🔹 Bước 3: Áp dụng thay đổi và khởi động lại containerd
sudo systemctl daemon-reload
sudo systemctl restart containerd
🔹 Bước 4: Kiểm tra cấu hình proxy đã được áp dụng chưa
sudo systemctl show --property=Environment containerd
✅ Nếu đúng, bạn sẽ thấy output như sau:
Environment=HTTP_PROXY=http://proxy.example.com
Environment=HTTPS_PROXY=http://proxy.example.com
Environment=NO_PROXY=localhost,127.0.0.1
3️⃣ Kiểm Tra
Sau khi cấu hình proxy cho containerd, bạn có thể kiểm tra bằng cách pull thử một image:
sudo crictl pull nginx
📌 Nếu thành công, bạn sẽ thấy thông báo “Image is ready”.
🔹 Nếu bạn vẫn gặp lỗi, hãy kiểm tra lại bằng lệnh:
kubectl describe pod <tên_pod> -n <namespace>
Nếu lỗi liên quan đến proxy, bạn có thể thử khởi động lại node:
sudo reboot
📌 Kết Luận
Vậy là bạn đã cấu hình xong proxy cho Kubernetes sử dụng containerd. 🚀
📌 Tóm tắt các bước chính:
✅ Xác định proxy bằng cách kiểm tra .bashrc
hoặc .profile
.
✅ Tạo file /etc/systemd/system/containerd.service.d/http-proxy.conf
.
✅ Thêm biến môi trường HTTP_PROXY, HTTPS_PROXY, NO_PROXY.
✅ Khởi động lại containerd (systemctl restart containerd
).
✅ Kiểm tra xem Kubernetes đã có thể pull image container chưa (crictl pull nginx
).
💡 Gợi ý tiếp theo:
- Nếu sử dụng Docker thay vì containerd, bạn cần chỉnh sửa proxy trong
/etc/systemd/system/docker.service.d/http-proxy.conf
. - Kiểm tra firewall hoặc firewall trong mạng nội bộ nếu vẫn không kéo được ảnh.
Tham khảo https://stackoverflow.com/questions/77318225/how-to-configure-proxy-in-kubernetes-to-pull-images