Sunday, February 23, 2025

Cấu hình Proxy trong Kubernetes

-

📌 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 đặt https_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_PROXYHTTPS_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

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories