แก้ปัญหา Dockerhub Rate Limit ด้วย Harbor
สำหรับ Developer ที่มีการใช้ Dockerhub เป็นที่เก็บ Container image ถ้าเรามีการใช้คำสั่ง docker pull
บ่อยๆบางทีก็อาจจะเจอ Error ชน Rate Limit
1
2
You have reached your pull rate limit. You may increase the limit by authenticating
and upgrading: https://www.docker.com/increase-rate-limits
หลังจากที่ Dockerhub มีการเปลี่ยน Policy ในการ Push / Pull Image จาก Registry หลายๆคนก็อาจจะพบกับข้อความนี้ ซึ่งก็อาจส่งผลต่อการ Develop, Deploy หรือ Scale Pod บน k8s cluster ซึ่งจะติดอยู่ใน Pending
state ทำให้ไม่สามารถ Scale หรือ Update ตัว Deployment ได้
วันนี้เราจะมาแนะนำวิธีการใช้ Harbor ซึ่งเป็น Opensource Registry และเป็น Project ใน CNCF ในการแก้ไขปัญหาติด Rate Limit โดยการทำ Registry Proxy.
Prerequisites:
- Harbor ใน Docker (ใน Demo เป็น Version 2.5.0)
- Deploy Harbor ผ่าน TKG Extension
- Deploy ผ่าน Helm ลงบน k8s cluster
1
2
helm repo add harbor https://helm.goharbor.io
helm fetch harbor/harbor --untar
สร้าง Registry Endpoint
- ไปที่ Administration -> Registries เลือก New Endpoint
-
เลือก Provider เป็น
Docker Hub
- ในกรณีที่เป็น Private Repository สามารถใส่
Access ID
และAccess Secret
ได้ - ลอง Test Connection เพื่อทดสอบการ Access Dockerhub แล้วกด Ok
สร้าง Dockerhub Proxy
- ไปที่ Projects -> New Project
- ใส่ชื่อ Project Name เป็นชื่อ Proxy ที่ต้องการใช้
- สามารถกำหนด Storage Limit ได้ ( -1 คือ No Limit )
-
เปิด Proxy Cache และเลือก Registry Endpoint ที่เราได้สร้างไว้ในตอนแรก
จะได้เป็นหน้า Project ใหม่สำหรับเป็น Proxy Cache จาก Dockerhub
ทดสอบการ Pull ผ่าน Harbor Proxy โดยเติม <HARBOR_IP>/<PROXY_PROJECT_NAME>/
เข้าไปด้านหน้า Image ที่ต้องการ Pull
เช่น
1
docker pull bitnami/rabbitmq:3.10
แก้เป็น
1
docker pull harbor.vbc.demo/dockerhub-proxy/bitnami/rabbitmq:3.10
Image ที่เราทำการ Pull จะถูกเก็บไว้ใน Cache ของ Harbor
Useful Links: