Fadak.IR راهکارهای فدک
English Русский العربية فارسی
مقالات مدیریت مطالعات زبان


/ فاوا / دواپس

عبور از تحریم در کوبرنتیز


         ۱. استفاده از Mirrorهای جایگزین
         ۲. استفاده از VPN یا Proxy
         ۳. راه‌اندازی Private Docker Registry
         ۴. استفاده از GitHub Container Registry (GHCR)
         ۵. دانلود و انتقال دستی تصاویر داکر
         نتیجه‌گیری
      ۱. استفاده از Mirrorهای جایگزین
         برای containerd
      ۲. استفاده از VPN یا Proxy
         برای containerd
      ۳. استفاده از Private Registry
         راه‌اندازی رجیستری خصوصی
      ۴. استفاده از GitHub Container Registry (GHCR)
         مراحل تنظیم GHCR در crictl
      ۵. دانلود و انتقال دستی تصاویر
         ۱. دانلود روی یک سرور خارجی
         ۲. انتقال به سیستم داخلی
         ۳. لود کردن تصویر در سیستم داخلی
      جمع‌بندی
         ۱. بررسی اجرای containerd یا cri-o
         ۲. بررسی مسیر ذخیره‌سازی و فرمت فایل
         ۳. استفاده از ctr برای بارگذاری دستی تصویر
         ۴. تغییر روش ذخیره و بارگذاری تصاویر
         ۵. بررسی نسخه crictl و containerd
         نتیجه‌گیری
         ۱. بررسی لیست تصاویر موجود در containerd
         ۲. بررسی فرمت فایل nginx.tar
         ۳. بررسی نام تصویر پس از ایمپورت
         ۴. بررسی ارتباط crictl و containerd
         ۵. ری‌تگ کردن تصویر و استفاده از crictl برای بارگذاری
         ۶. بررسی فضای نام در containerd
         ۷. حذف و بارگذاری مجدد تصویر
         جمع‌بندی
         تفاوت بین ctr و crictl
      ۱. ctr چیست؟
      ۲. crictl چیست؟
      ۳. تفاوت‌های کلیدی
      ۴. کدام را باید استفاده کنیم؟
         ۵. نتیجه‌گیری
         ۱. ایمپورت ایمیج با ctr
         ۲. بررسی ایمیج در crictl
         ۳. ری‌تگ کردن ایمیج (در صورت نیاز)
         ۴. اجرای کانتینر از ایمیج ایمپورت‌شده
         🔹 جمع‌بندی
         🔹 بررسی و رفع مشکل
         🔹 نتیجه‌گیری
         🔹 مشکل چیست؟
         🔹 راه‌حل: تنظیم درست crictl برای containerd
         🔹 نتیجه‌گیری
      ✅ روش‌های رفع مشکل دانلود ایمیج در داکر
         ۱. استفاده از SOCKS5 Proxy
         ۲. استفاده از HTTP(S) Proxy
         ۳. استفاده از Mirrorهای Docker
         ۴. دانلود دستی ایمیج و Load کردن آن
         🎯 نتیجه‌گیری
         📌 استفاده از Mirrorهای Docker در K3s
         🔹 تنظیم Mirror برای K3s
         🔹 ریستارت کردن K3s برای اعمال تغییرات
         🔹 بررسی اعمال شدن تغییرات
         📌 مزایای استفاده از Mirrorها در K3s
         🎯 نتیجه‌گیری
         🔹 راه‌حل: ایجاد فایل registries.yaml
         🔹 ۲. ریستارت کردن K3s
         🔹 ۳. تست تنظیمات
         📌 نتیجه‌گیری
         📌 ایجاد یک Docker Mirror محلی (Private Registry Mirror)
      🔹 روش ۱: راه‌اندازی یک کش (Mirror) با registry
         ✅ ۱. اجرای کانتینر registry به‌عنوان کش
         ✅ ۲. تنظیم Docker برای استفاده از Mirror
         ✅ ۳. تست عملکرد
      🔹 روش ۲: راه‌اندازی Harbor به‌عنوان یک Docker Mirror
         ✅ ۱. نصب Harbor
         ✅ ۲. پیکربندی Harbor
      🔹 نتیجه‌گیری
         🔹 ۱. مشاهده لیست ایمیج‌های ذخیره‌شده با API
         🔹 ۲. مشاهده ایمیج‌ها با مرورگر
         ۳. مشاهده کش‌های محلی در /var/lib/docker/registry
         🔹 ۴. مشاهده ایمیج‌های محلی در Docker
   شکن
      میرورهای داخلی
         مراحل صحیح برای پیکربندی ACL در Squid:
         نتیجه:
         1. بررسی و به‌روزرسانی گواهی‌های SSL
         2. بررسی تاریخ و ساعت سیستم
         3. پاک کردن و اضافه کردن مجدد کلید GPG مخزن Docker
         4. بررسی دسترسی به مخزن‌ها
         5. پاک کردن کش و به‌روزرسانی مجدد
         6. تست اتصال دستی
         7. بررسی DNS و استفاده از 8.8.8.8
         استفاده از V2Ray برای دور زدن تحریم‌ها
      1. تنظیم V2Ray برای عبور از تحریم‌ها
         🔹 روش 1: تنظیم V2Ray به عنوان پروکسی سیستم
         🔹 روش 2: استفاده از tun2socks برای تغییر مسیر کل ترافیک
      📌 2. استفاده از پروکسی V2Ray در نرم‌افزارها
         🔹 برای Docker
         🔹 برای Git
         🔹 برای APT (نصب پکیج در اوبونتو)
      📌 3. تست اتصال

برای دور زدن تحریم‌های Docker Hub و استفاده از مخازن داکری، چند راهکار وجود دارد:

۱. استفاده از Mirrorهای جایگزین

برخی از سرورهای Mirror برای داکر وجود دارند که می‌توانند تصاویر را کش کنند. می‌توانید از سرویس‌های مانند:

به عنوان مثال، برای استفاده از Aliyun:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://registry.aliyuncs.com"]
}
EOF
sudo systemctl restart docker

۲. استفاده از VPN یا Proxy

یک راه ساده این است که از VPN یا یک سرور پروکسی برای دسترسی به Docker Hub استفاده کنید.
اگر یک سرور VPS خارج از ایران دارید، می‌توانید از SOCKS5 Proxy استفاده کنید:

export all_proxy=socks5://your-proxy-ip:port
docker pull nginx

۳. راه‌اندازی Private Docker Registry

اگر نیاز به تصاویر خاصی دارید، می‌توانید یک ریجستری خصوصی داکر راه‌اندازی کنید و تصاویر مورد نیاز را از طریق یک سرور دیگر (خارج از ایران) دانلود و در آن ذخیره کنید:

  1. اجرای ریجستری داکر در سرور داخلی:
    docker run -d -p 5000:5000 --restart=always --name registry registry:2
    
  2. Push کردن تصاویر به ریجستری داخلی:
    docker tag myimage localhost:5000/myimage
    docker push localhost:5000/myimage
    
  3. Pull کردن تصاویر از ریجستری داخلی:
    docker pull localhost:5000/myimage
    

۴. استفاده از GitHub Container Registry (GHCR)

GitHub یک جایگزین برای Docker Hub دارد که می‌توانید به‌جای آن استفاده کنید. برای استفاده از GitHub Container Registry:

  1. وارد GitHub شوید و یک Access Token با scope=write:packages ایجاد کنید.
  2. لاگین در GHCR:
    echo "YOUR_GITHUB_TOKEN" | docker login ghcr.io -u YOUR_GITHUB_USERNAME --password-stdin
    
  3. Pull کردن تصاویر از GHCR:
    docker pull ghcr.io/nginx/nginx
    

۵. دانلود و انتقال دستی تصاویر داکر

اگر به سرور VPS یا سیستم خارج از ایران دسترسی دارید، می‌توانید تصاویر را در یک سیستم دیگر دانلود و سپس با docker save و docker load منتقل کنید:

  1. دانلود تصویر روی سرور خارج از ایران:
    docker pull nginx
    docker save nginx -o nginx.tar
    
  2. انتقال به سیستم داخلی (مثلاً با scp یا فلش)
  3. لود کردن تصویر در سیستم داخلی:
    docker load -i nginx.tar
    

نتیجه‌گیری

اگر VPN دارید: مستقیماً از آن استفاده کنید.
اگر به VPS دسترسی دارید: از docker save/load استفاده کنید.
اگر مشکل جدی دارید: یک ریجستری داخلی راه‌اندازی کنید.
برای جایگزین Docker Hub: از GitHub Container Registry یا Alibaba Cloud استفاده کنید.

 

 

 

crictl یک ابزار CLI برای تعامل با Container Runtime Interface (CRI) است و معمولاً در محیط‌هایی مثل Kubernetes و Containerd استفاده می‌شود. به دلیل تحریم‌ها، ممکن است در دانلود تصاویر از Docker Hub یا سایر رجیستری‌های عمومی مشکل داشته باشید. در ادامه روش‌های دور زدن این محدودیت برای crictl را بررسی می‌کنیم.


۱. استفاده از Mirrorهای جایگزین

crictl به Container Runtime مثل containerd یا cri-o متصل می‌شود، بنابراین باید در تنظیمات آن، یک Mirror رجیستری اضافه کنیم.

برای containerd

  1. ویرایش فایل تنظیمات containerd:
    sudo nano /etc/containerd/config.toml
    
  2. قسمت [plugins."io.containerd.grpc.v1.cri".registry.mirrors] را پیدا کرده و آن را به شکل زیر تغییر دهید:
    [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
        endpoint = ["https://registry.aliyuncs.com", "https://mirror.gcr.io"]
    
  3. ری‌استارت containerd:
    sudo systemctl restart containerd
    

اکنون crictl هنگام کشیدن تصاویر، به‌جای docker.io از mirror‌های جایگزین استفاده می‌کند.


۲. استفاده از VPN یا Proxy

چون crictl از containerd یا cri-o استفاده می‌کند، باید Proxy را در تنظیمات آنها اضافه کنیم.

برای containerd

  1. فایل /etc/systemd/system/containerd.service.d/http-proxy.conf را ایجاد کنید:
    sudo mkdir -p /etc/systemd/system/containerd.service.d
    sudo nano /etc/systemd/system/containerd.service.d/http-proxy.conf
    
  2. محتوا را اضافه کنید:
    [Service]
    Environment="HTTP_PROXY=http://your-proxy-ip:port"
    Environment="HTTPS_PROXY=http://your-proxy-ip:port"
    Environment="NO_PROXY=localhost,127.0.0.1"
    
  3. ری‌لود systemd و ری‌استارت containerd:
    sudo systemctl daemon-reload
    sudo systemctl restart containerd
    

اکنون crictl هنگام دانلود، از پراکسی استفاده می‌کند.


۳. استفاده از Private Registry

راه‌اندازی رجیستری خصوصی

اگر مشکل جدی در دانلود دارید، می‌توانید یک ریجستری داخلی تنظیم کنید.

  1. اجرای ریجستری روی یک سرور داخلی:
    docker run -d -p 5000:5000 --restart=always --name registry registry:2
    
  2. اضافه کردن آن به containerd:
    [plugins."io.containerd.grpc.v1.cri".registry.mirrors."myregistry.local"]
      endpoint = ["http://192.168.1.100:5000"]
    
  3. ری‌استارت containerd:
    sudo systemctl restart containerd
    
  4. Push و Pull تصاویر از رجیستری خصوصی:
    crictl pull myregistry.local:5000/nginx
    

۴. استفاده از GitHub Container Registry (GHCR)

مراحل تنظیم GHCR در crictl

  1. دریافت Access Token از GitHub Tokens با write:packages
  2. ورود به GHCR:
    echo "YOUR_GITHUB_TOKEN" | crictl login ghcr.io -u YOUR_GITHUB_USERNAME --password-stdin
    
  3. کشیدن تصاویر:
    crictl pull ghcr.io/nginx/nginx
    

۵. دانلود و انتقال دستی تصاویر

۱. دانلود روی یک سرور خارجی

crictl pull docker.io/library/nginx
crictl image save -o nginx.tar nginx

۲. انتقال به سیستم داخلی

از طریق scp، rsync یا فلش:

scp nginx.tar user@yourserver:/path

۳. لود کردن تصویر در سیستم داخلی

crictl image load -i nginx.tar

جمع‌بندی

بهترین گزینه: تنظیم mirror برای رجیستری
اگر امکانش هست: استفاده از VPN/Proxy
برای تیم‌های داخلی: راه‌اندازی رجیستری خصوصی
برای مخازن جایگزین: GHCR یا Aliyun Registry
در موارد اضطراری: دانلود و انتقال دستی تصاویر

 

به نظر می‌رسد که دستور crictl image load -i nginx.tar به درستی اجرا نمی‌شود. برای بررسی مشکل و رفع آن، مراحل زیر را انجام دهید:


۱. بررسی اجرای containerd یا cri-o

crictl معمولاً به containerd یا cri-o متصل می‌شود. ابتدا بررسی کنید که کدام یک در حال اجراست:

sudo crictl info

اگر پیام خطا دریافت کردید، بررسی کنید که containerd اجرا شده باشد:

sudo systemctl status containerd

اگر اجرا نشده بود، آن را راه‌اندازی کنید:

sudo systemctl restart containerd

۲. بررسی مسیر ذخیره‌سازی و فرمت فایل

اطمینان حاصل کنید که nginx.tar در مسیر صحیح قرار دارد:

ls -lh nginx.tar

همچنین بررسی کنید که فایل به درستی ذخیره شده باشد:

file nginx.tar

خروجی باید چیزی شبیه این باشد:

nginx.tar: POSIX tar archive

اگر فرمت tar archive نبود، ممکن است فایل خراب باشد یا فرمت آن اشتباه باشد.


۳. استفاده از ctr برای بارگذاری دستی تصویر

اگر crictl image load کار نمی‌کند، می‌توان از ctr (ابزار داخلی containerd) برای بارگذاری استفاده کرد:

sudo ctr -n k8s.io images import nginx.tar

سپس بررسی کنید که تصویر اضافه شده است:

sudo crictl images

۴. تغییر روش ذخیره و بارگذاری تصاویر

به جای استفاده از crictl image save/load، می‌توانید از ctr برای ذخیره و بارگذاری استفاده کنید.

ذخیره تصویر از یک سرور دیگر:

sudo ctr -n k8s.io images pull docker.io/library/nginx:latest
sudo ctr -n k8s.io images export nginx.tar docker.io/library/nginx:latest

انتقال به سرور داخلی و بارگذاری:

sudo ctr -n k8s.io images import nginx.tar

سپس تصویر را بررسی کنید:

sudo crictl images

۵. بررسی نسخه crictl و containerd

گاهی اوقات نسخه‌های ناسازگار crictl و containerd باعث این مشکل می‌شوند. بررسی کنید که نسخه‌های آنها با هم سازگار باشند:

crictl --version
containerd --version

اگر ناسازگاری وجود دارد، crictl را آپدیت کنید:

VERSION="v1.27.1"
wget https://github.com/kubernetes-sigs/cri-tools/releases/download/${VERSION}/crictl-${VERSION}-linux-amd64.tar.gz
sudo tar zxvf crictl-${VERSION}-linux-amd64.tar.gz -C /usr/local/bin

نتیجه‌گیری

🔹 اگر crictl image load کار نمی‌کند، از ctr -n k8s.io images import استفاده کنید.
🔹 بررسی کنید که containerd اجرا شده باشد.
🔹 مسیر و صحت فایل nginx.tar را بررسی کنید.
🔹 اگر مشکل همچنان پابرجاست، نسخه‌های crictl و containerd را بررسی و به‌روزرسانی کنید.

 

 

اگر پس از اجرای دستور

sudo ctr -n k8s.io images import nginx.tar

هنوز تصویر در لیست کانتینرها نمایش داده نمی‌شود، دلایل مختلفی می‌تواند وجود داشته باشد. در ادامه روش‌های بررسی و رفع مشکل آورده شده است:


۱. بررسی لیست تصاویر موجود در containerd

ممکن است تصویر به درستی وارد شده باشد، اما نام آن متفاوت باشد. بررسی کنید که تصویر در containerd ثبت شده است:

sudo ctr -n k8s.io images list

یا در فضای نام default:

sudo ctr images list

اگر تصویر در خروجی نمایش داده نشد، ممکن است مشکل در فرمت nginx.tar باشد.


۲. بررسی فرمت فایل nginx.tar

اطمینان حاصل کنید که فایل nginx.tar به درستی ذخیره شده باشد:

file nginx.tar

خروجی باید شبیه این باشد:

nginx.tar: POSIX tar archive

اگر فرمت متفاوت باشد، ممکن است لازم باشد تصویر را دوباره ذخیره کنید:

sudo ctr -n k8s.io images export nginx.tar docker.io/library/nginx:latest

و مجدداً وارد کنید:

sudo ctr -n k8s.io images import nginx.tar

۳. بررسی نام تصویر پس از ایمپورت

گاهی اوقات ctr import تصویر را با نام ناشناخته‌ای اضافه می‌کند. برای بررسی دقیق‌تر، دستور زیر را اجرا کنید:

sudo ctr -n k8s.io images list | grep nginx

اگر نام تصویر تغییر کرده باشد، از همان نام جدید استفاده کنید.


۴. بررسی ارتباط crictl و containerd

crictl فقط تصاویری را نمایش می‌دهد که در فضای k8s.io بارگذاری شده باشند. مطمئن شوید که crictl به درستی به containerd متصل است:

sudo crictl info

اگر containerd به درستی در حال اجرا نباشد، آن را راه‌اندازی کنید:

sudo systemctl restart containerd

سپس لیست تصاویر را مجدداً بررسی کنید:

sudo crictl images

۵. ری‌تگ کردن تصویر و استفاده از crictl برای بارگذاری

اگر تصویر پس از import نمایش داده نمی‌شود، ممکن است نام آن درست ثبت نشده باشد. برای ری‌تگ کردن:

sudo ctr -n k8s.io images tag docker.io/library/nginx:latest myregistry.local/nginx:latest

سپس با crictl بررسی کنید:

sudo crictl images

۶. بررسی فضای نام در containerd

containerd از فضای نام (namespace) استفاده می‌کند و ممکن است تصویر در فضای نام دیگری ذخیره شده باشد. فهرست فضای نام‌ها را ببینید:

sudo ctr namespaces list

سپس لیست تصاویر را در همه فضای نام‌ها بررسی کنید:

sudo ctr -n k8s.io images list
sudo ctr -n default images list

۷. حذف و بارگذاری مجدد تصویر

اگر مشکل همچنان وجود دارد، تصویر را حذف کرده و مجدداً بارگذاری کنید:

sudo ctr -n k8s.io images rm docker.io/library/nginx:latest
sudo ctr -n k8s.io images import nginx.tar
sudo ctr -n k8s.io images list

جمع‌بندی

✅ بررسی کنید که تصویر در containerd موجود است (ctr -n k8s.io images list).
✅ مطمئن شوید containerd اجرا می‌شود (systemctl restart containerd).
✅ از crictl برای نمایش تصاویر استفاده کنید (crictl images).
✅ تصویر را ری‌تگ کرده و دوباره تست کنید (ctr -n k8s.io images tag).
✅ مطمئن شوید nginx.tar به درستی ذخیره شده (file nginx.tar).
✅ در صورت لزوم، تصویر را حذف و دوباره وارد کنید (ctr images rm && ctr images import).

 

 

تفاوت بین ctr و crictl

ctr و crictl هر دو ابزارهایی برای مدیریت کانتینرها هستند، اما هر یک برای هدف خاصی طراحی شده‌اند و تفاوت‌های کلیدی دارند:


۱. ctr چیست؟

ابزار مدیریت داخلی containerd
✅ برای کار مستقیم با containerd بدون واسطه‌ی اضافی
✅ استفاده در سطح پایین برای مدیریت ایمیج‌ها و کانتینرها
✅ مناسب برای کاربرانی که مستقیماً از containerd استفاده می‌کنند

مثال‌ها:
🔹 لیست ایمیج‌های موجود در containerd

sudo ctr -n k8s.io images list

🔹 ایمپورت یک ایمیج از فایل

sudo ctr -n k8s.io images import nginx.tar

🔹 اجرای یک کانتینر از ایمیج

sudo ctr -n k8s.io run --rm docker.io/library/nginx:latest mynginx

۲. crictl چیست؟

ابزار تعامل با Container Runtime Interface (CRI)
✅ مخصوص Kubernetes و Kubelet
✅ برای کار با containerd یا cri-o در محیط Kubernetes
✅ دستورات سطح بالاتر برای کار با پادها و ایمیج‌ها در K8s

مثال‌ها:
🔹 بررسی وضعیت containerd یا cri-o

sudo crictl info

🔹 لیست ایمیج‌ها

sudo crictl images

🔹 اجرای یک کانتینر

sudo crictl runp pod-config.json

🔹 نمایش لاگ‌های یک کانتینر

sudo crictl logs <container-id>

۳. تفاوت‌های کلیدی

ویژگی ctr crictl
هدف مدیریت containerd مستقیماً مدیریت کانتینرها در K8s از طریق CRI
وابستگی به Kubernetes ❌ نیازی به K8s ندارد ✅ مخصوص K8s و CRI
سطح دسترسی سطح پایین (کار مستقیم با containerd) سطح بالاتر (کار با پادها و ایمیج‌ها در K8s)
پشتیبانی از cri-o ❌ فقط برای containerd ✅ هم برای containerd و هم cri-o
قابلیت اجرا و مدیریت پادها ❌ ندارد ✅ دارد

۴. کدام را باید استفاده کنیم؟

🔹 اگر مستقیم با containerd کار می‌کنید → از ctr
🔹 اگر در محیط Kubernetes کار می‌کنید → از crictl
🔹 اگر با cri-o کار می‌کنید → فقط crictl را می‌توان استفاده کرد
🔹 اگر درگیر ایمپورت، تگ‌گذاری، حذف ایمیج‌ها هستیدctr سریع‌تر است
🔹 اگر نیاز به مشاهده لاگ‌ها و مدیریت پادها در K8s داریدcrictl مناسب‌تر است


۵. نتیجه‌گیری

ctr یک ابزار داخلی برای containerd است و بدون نیاز به Kubernetes کار می‌کند.
crictl از طریق Container Runtime Interface (CRI) با containerd و cri-o ارتباط برقرار می‌کند و برای Kubernetes طراحی شده است.
✅ در محیط Kubernetes، crictl بهترین گزینه است، اما اگر فقط به containerd نیاز دارید، ctr سریع‌تر و کاربردی‌تر است.

 

 

 

برای ایمپورت کردن یک ایمیج از فایل (.tar) در crictl، نمی‌توان از crictl مستقیماً استفاده کرد، زیرا crictl مستقیماً دستوری برای ایمپورت ایمیج ندارد. اما می‌توان این کار را با ctr انجام داد و سپس از crictl برای بررسی آن استفاده کرد.


۱. ایمپورت ایمیج با ctr

sudo ctr -n k8s.io images import nginx.tar

یا اگر در فضای نام default قرار دارد:

sudo ctr images import nginx.tar

🔹 این دستور، ایمیج nginx.tar را در containerd ایمپورت می‌کند.


۲. بررسی ایمیج در crictl

پس از ایمپورت، برای نمایش لیست ایمیج‌ها در crictl از این دستور استفاده کنید:

sudo crictl images

اگر ایمیج نمایش داده نشد، ممکن است نیاز به ری‌تگ کردن داشته باشد.


۳. ری‌تگ کردن ایمیج (در صورت نیاز)

گاهی اوقات ایمیج پس از ایمپورت بدون تگ صحیح وارد containerd می‌شود. می‌توانید نام و تگ را بررسی کنید:

sudo ctr -n k8s.io images list

سپس، برای اعمال یک تگ مناسب:

sudo ctr -n k8s.io images tag docker.io/library/nginx:latest k8s.io/nginx:latest

حالا دوباره crictl را بررسی کنید:

sudo crictl images

۴. اجرای کانتینر از ایمیج ایمپورت‌شده

پس از اطمینان از وجود ایمیج در crictl، می‌توانید یک پاد یا کانتینر اجرا کنید:

sudo crictl runp pod-config.json

یا برای اجرا در یک کانتینر ساده:

sudo crictl run container-config.json pod-id

🔹 جمع‌بندی

crictl به‌طور مستقیم دستور import ندارد.
✅ باید از ctr images import برای ایمپورت استفاده کنید.
✅ اگر ایمیج در crictl دیده نشد، از ctr images tag برای اصلاح نام آن استفاده کنید.
✅ سپس می‌توان با crictl images لیست ایمیج‌ها را بررسی کرد.

 

 

به نظر می‌رسد که ایمیج nginxproxy/nginx-proxy:alpine با موفقیت در containerd ایمپورت شده است، اما همچنان در crictl images نمایش داده نمی‌شود. این معمولاً به دلیل تفاوت در نام‌گذاری و فضای نام (namespace) در containerd و CRI اتفاق می‌افتد.

🔹 بررسی و رفع مشکل

۱. بررسی لیست ایمیج‌ها در crictl
ابتدا ببینید که crictl اصلاً ایمیجی را می‌شناسد یا نه:

sudo crictl images

۲. بررسی دقیق‌تر فضای نام (namespace) در containerd

sudo ctr -n k8s.io images list

ایمیج شما در k8s.io وجود دارد، اما ممکن است crictl آن را نشناسد.

۳. ری‌تگ کردن ایمیج برای k8s.io
به‌نظر می‌رسد که crictl فقط ایمیج‌هایی را که دارای تگ k8s.io هستند، شناسایی می‌کند. برای این کار، ایمیج را ری‌تگ کنید:

sudo ctr -n k8s.io images tag docker.io/nginxproxy/nginx-proxy:alpine k8s.io/nginxproxy/nginx-proxy:alpine

۴. بررسی مجدد crictl
بعد از ری‌تگ کردن، دوباره لیست ایمیج‌ها را در crictl ببینید:

sudo crictl images

۵. ری‌استارت containerd (در صورت نیاز)
اگر باز هم crictl ایمیج را نشان نداد، containerd را ری‌استارت کنید:

sudo systemctl restart containerd

🔹 نتیجه‌گیری

ctr و crictl از فضاهای نام متفاوت استفاده می‌کنند، بنابراین لازم است که ایمیج‌ها را در k8s.io ری‌تگ کنید.
✅ بعد از ری‌تگ کردن با ctr images tag، crictl باید بتواند ایمیج را شناسایی کند.
✅ اگر همچنان مشکل باقی بود، containerd را ری‌استارت کنید و دوباره امتحان کنید.

 

 

 

 

 

 

🔹 مشکل چیست؟

خطای زیر نشان می‌دهد که crictl سعی می‌کند به چندین سوکت پیش‌فرض متصل شود، اما سوکت dockershim.sock وجود ندارد:

validate CRI v1 image API for endpoint "unix:///var/run/dockershim.sock": rpc error: code = Unavailable desc = connection error

این خطا زمانی اتفاق می‌افتد که crictl به‌درستی پیکربندی نشده و نمی‌داند که باید به containerd متصل شود.


🔹 راه‌حل: تنظیم درست crictl برای containerd

۱. بررسی اجرای containerd
مطمئن شوید که containerd در حال اجرا است:

sudo systemctl status containerd

اگر containerd غیرفعال بود، آن را راه‌اندازی کنید:

sudo systemctl start containerd

۲. تنظیم crictl برای استفاده از containerd
به جای استفاده از تنظیمات پیش‌فرض، مسیر صحیح را مشخص کنید.

🔹 روش موقت (تنها برای این نشست ترمینال):

export CONTAINER_RUNTIME_ENDPOINT=unix:///run/containerd/containerd.sock
export IMAGE_SERVICE_ENDPOINT=unix:///run/containerd/containerd.sock

حالا دوباره امتحان کنید:

crictl images

🔹 روش دائمی (برای همیشه در کل سیستم):
فایل تنظیمات crictl را ایجاد کنید:

sudo mkdir -p /etc/crictl
echo 'runtime-endpoint: unix:///run/containerd/containerd.sock' | sudo tee /etc/crictl.yaml

سپس امتحان کنید:

crictl images

🔹 نتیجه‌گیری

crictl به طور پیش‌فرض به dockershim.sock متصل می‌شود که دیگر وجود ندارد.
✅ باید crictl را به containerd.sock متصل کنید، که در مسیر /run/containerd/containerd.sock قرار دارد.
✅ با تنظیم crictl.yaml این تغییر دائمی خواهد شد.

 

 

بله، استفاده از VPN یا Proxy برای حل مشکل دسترسی به Docker Hub و دیگر Registryها بسیار مفید است، مخصوصاً زمانی که دانلود مستقیم تصاویر (Images) با خطا مواجه می‌شود. در ادامه چند روش جایگزین نیز معرفی شده است:


✅ روش‌های رفع مشکل دانلود ایمیج در داکر

۱. استفاده از SOCKS5 Proxy

🔹 اگر یک سرور VPS دارید، می‌توانید یک SOCKS5 Proxy راه‌اندازی کنید و از طریق آن، Docker pull را اجرا کنید.

export all_proxy=socks5://your-proxy-ip:port
docker pull nginx

🔹 برای این روش، باید SOCKS5 Proxy روی سرور شما فعال باشد. اگر SSH Access دارید، می‌توانید این تونل را باز کنید:

ssh -D 1080 -N -f user@your-vps-ip
export all_proxy=socks5://127.0.0.1:1080

۲. استفاده از HTTP(S) Proxy

🔹 اگر از یک HTTP Proxy استفاده می‌کنید، مقدار HTTP_PROXY و HTTPS_PROXY را تنظیم کنید:

export HTTP_PROXY=http://your-proxy-ip:port
export HTTPS_PROXY=http://your-proxy-ip:port
docker pull nginx

🔹 این تنظیمات را می‌توانید به‌طور دائمی در فایل /etc/systemd/system/docker.service.d/http-proxy.conf قرار دهید:

[Service]
Environment="HTTP_PROXY=http://your-proxy-ip:port"
Environment="HTTPS_PROXY=http://your-proxy-ip:port"

سپس سرویس داکر را ریستارت کنید:

systemctl daemon-reload
systemctl restart docker

۳. استفاده از Mirrorهای Docker

🔹 می‌توانید Mirrorهای داکر را جایگزین Docker Hub کنید. برای این کار، فایل /etc/docker/daemon.json را ویرایش کنید:

{
  "registry-mirrors": [
    "https://mirror.gcr.io",
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com"
  ]
}

سپس داکر را ریستارت کنید:

systemctl daemon-reload
systemctl restart docker

۴. دانلود دستی ایمیج و Load کردن آن

🔹 اگر دسترسی مستقیم ندارید، می‌توانید فایل ایمیج را روی سرور دیگری دانلود کنید و به سرور مقصد منتقل کنید:

docker pull nginx
docker save -o nginx.tar nginx
scp nginx.tar user@your-server:/tmp
ssh user@your-server "docker load -i /tmp/nginx.tar"

🎯 نتیجه‌گیری

اگر محدودیت شبکه‌ای باعث عدم دسترسی به Docker Hub شده است: 1️⃣ از VPN یا Proxy (SOCKS5/HTTP) استفاده کنید.
2️⃣ از Mirrorهای Docker کمک بگیرید.
3️⃣ ایمیج را روی سیستم دیگری دانلود و منتقل کنید.
4️⃣ در صورت امکان، از Registry خصوصی (Private Registry) برای ذخیره ایمیج‌های موردنیازتان استفاده کنید.

اگر مشکل خاصی در محیط شما وجود دارد، خروجی این دستور را ارسال کنید تا بررسی کنیم:

docker pull nginx
echo $HTTP_PROXY
echo $HTTPS_PROXY



📌 استفاده از Mirrorهای Docker در K3s

 

در K3s، به دلیل وابستگی به containerd به‌جای Docker Daemon، روش تنظیم Mirrorها کمی متفاوت است.

 

 

🔹 تنظیم Mirror برای K3s

 

در K3s، به‌جای ویرایش daemon.json (که در Docker استفاده می‌شود)، باید فایل پیکربندی containerd را تغییر دهیم.

 

۱. مسیر تنظیمات Containerd در K3s

 

📍 در K3s، تنظیمات containerd معمولاً در مسیر زیر قرار دارد:

 
/etc/rancher/k3s/registries.yaml
 

اگر این فایل وجود ندارد، آن را ایجاد کنید.

 

۲. تنظیم Registry Mirrors در K3s

 

فایل /etc/rancher/k3s/registries.yaml را ویرایش کنید:

 
mirrors:
  docker.io:
    endpoint:
      - "https://mirror.gcr.io"
      - "https://docker.mirrors.ustc.edu.cn"
      - "https://hub-mirror.c.163.com"
 

 

🔹 ریستارت کردن K3s برای اعمال تغییرات

 

پس از ویرایش فایل، K3s را ریستارت کنید:

 
systemctl restart k3s
 

یا اگر از K3s Agent استفاده می‌کنید:

 
systemctl restart k3s-agent
 

 

🔹 بررسی اعمال شدن تغییرات

 

برای اطمینان از این که containerd از Mirrorها استفاده می‌کند، دستور زیر را اجرا کنید:

 
ctr image pull docker.io/library/nginx:latest
 

اگر تصویر بدون مشکل دانلود شد، تنظیمات درست اعمال شده‌اند.

 

 

📌 مزایای استفاده از Mirrorها در K3s

 

افزایش سرعت دانلود ایمیج‌ها (به‌ویژه در ایران)
دور زدن محدودیت‌های شبکه‌ای
کاهش بار روی Docker Hub و استفاده از سرورهای جایگزین

 

 

🎯 نتیجه‌گیری

 

🔹 در Docker، باید daemon.json را تنظیم کنیم، اما در K3s باید فایل /etc/rancher/k3s/registries.yaml را ویرایش کنیم.
🔹 با این کار، K3s هنگام کشیدن ایمیج‌ها (Pull) از Mirrorهای سریع‌تر و بدون محدودیت استفاده خواهد کرد. 🚀

 

 

 

 

 

📌 اگر /etc/rancher/k3s/registries.yaml وجود ندارد، چه باید کرد؟

 

در K3s، فایل registries.yaml به‌صورت پیش‌فرض ایجاد نمی‌شود، مگر اینکه شما آن را دستی بسازید. اگر فقط فایل k3s.yaml را دارید، باید فایل registries.yaml را به‌صورت دستی ایجاد کنید.

 

 

🔹 راه‌حل: ایجاد فایل registries.yaml

 

۱. ایجاد و ویرایش فایل

 

فایل registries.yaml را در مسیر مناسب ایجاد کنید:

 
sudo mkdir -p /etc/rancher/k3s
sudo nano /etc/rancher/k3s/registries.yaml
 

سپس محتوای زیر را داخل آن قرار دهید:

 
mirrors:
  docker.io:
    endpoint:
      - "https://mirror.gcr.io"
      - "https://docker.mirrors.ustc.edu.cn"
      - "https://hub-mirror.c.163.com"
 

فایل را ذخیره کنید (Ctrl + X سپس Y و Enter).

 

 

🔹 ۲. ریستارت کردن K3s

 

پس از ایجاد فایل، سرویس K3s را ریستارت کنید تا تغییرات اعمال شود:

 
sudo systemctl restart k3s
 

یا اگر از K3s Agent استفاده می‌کنید:

 
sudo systemctl restart k3s-agent
 

 

🔹 ۳. تست تنظیمات

 

برای بررسی اینکه آیا K3s از mirrorها استفاده می‌کند، این دستور را اجرا کنید:

 
ctr image pull docker.io/library/nginx:latest
 

اگر تصویر بدون مشکل و سریع‌تر دانلود شد، یعنی تنظیمات درست انجام شده است. 🚀

 

 

📌 نتیجه‌گیری

 

✅ اگر registries.yaml وجود ندارد، می‌توانید آن را به‌صورت دستی ایجاد کنید.
✅ تغییرات پس از ریستارت K3s اعمال می‌شوند.
K3s از containerd استفاده می‌کند، پس تنظیمات آن متفاوت از Docker است.

 

اگر بعد از انجام این مراحل باز هم مشکل داشتید، چه خطایی دریافت می‌کنید؟




📌 ایجاد یک Docker Mirror محلی (Private Registry Mirror)

 

اگر به یک میرور محلی برای Docker نیاز دارید، می‌توانید یک کش پروکسی از Docker Hub راه‌اندازی کنید. این کار به‌خصوص برای محیط‌هایی که دسترسی مستقیم به Docker Hub دشوار است (مانند ایران) یا برای تسریع دانلود ایمیج‌ها، مفید است.

 

 

🔹 روش ۱: راه‌اندازی یک کش (Mirror) با registry

 

Docker خودش یک ایمیج به نام registry دارد که می‌تواند به‌عنوان کش (cache) عمل کند.

 

✅ ۱. اجرای کانتینر registry به‌عنوان کش

 
docker run -d -p 5000:5000 --restart=always --name docker-mirror \
  -e REGISTRY_PROXY_REMOTEURL="https://registry-1.docker.io" \
  registry:2
 

🔹 این دستور یک Registry Mirror روی پورت ۵۰۰۰ ایجاد می‌کند که تمام ایمیج‌های کش‌شده را نگه می‌دارد.

 

 

✅ ۲. تنظیم Docker برای استفاده از Mirror

 

فایل daemon.json را ویرایش کنید:

 
sudo nano /etc/docker/daemon.json
 

و این مقدار را اضافه کنید:

 
{
  "registry-mirrors": ["http://localhost:5000"]
}
 

سپس Docker را ریستارت کنید:

 
sudo systemctl restart docker
 

 

✅ ۳. تست عملکرد

 

حالا می‌توانید از این Mirror برای کش کردن ایمیج‌ها استفاده کنید:

 
docker pull localhost:5000/library/nginx
 

🔹 در این حالت، اگر قبلاً این ایمیج کش نشده باشد، از Docker Hub دریافت و در Mirror ذخیره می‌شود.
🔹 اگر دوباره آن را بکشید، از کش محلی دریافت می‌شود و بسیار سریع‌تر خواهد بود.

 

 

🔹 روش ۲: راه‌اندازی Harbor به‌عنوان یک Docker Mirror

 

اگر به یک راهکار حرفه‌ای‌تر نیاز دارید، می‌توانید از Harbor استفاده کنید. این ابزار قابلیت‌های بیشتری مانند مدیریت کاربران، احراز هویت و امضای دیجیتال ایمیج‌ها را ارائه می‌دهد.

 

✅ ۱. نصب Harbor

 
wget https://github.com/goharbor/harbor/releases/download/v2.9.0/harbor-online-installer-v2.9.0.tgz
tar xvf harbor-online-installer-v2.9.0.tgz
cd harbor
 

✅ ۲. پیکربندی Harbor

 

فایل harbor.yml را ویرایش کنید و آدرس سرور خود را در قسمت hostname تنظیم کنید:

 
hostname: my-harbor.local
 

سپس نصب را اجرا کنید:

 
./install.sh
 

🔹 پس از نصب، Harbor روی پورت ۸۰ و ۴۴۳ اجرا خواهد شد و می‌توان از آن به‌عنوان Mirror استفاده کرد.

 

 

🔹 نتیجه‌گیری

 

اگر فقط می‌خواهید ایمیج‌ها را کش کنید، روش Registry Mirror با registry:2 ساده و کارآمد است.
اگر به مدیریت کاربران، لاگین و امضای ایمیج نیاز دارید، از Harbor استفاده کنید.
با استفاده از این روش‌ها، می‌توانید بدون نیاز به VPN یا تغییر DNS، ایمیج‌ها را سریع‌تر و پایدارتر دانلود کنید. 🚀

 

کدام روش را می‌خواهید پیاده‌سازی کنید؟

 

 

 

 

برای مشاهده ایمیج‌هایی که در Registry Mirror محلی شما کش شده‌اند، چند روش وجود دارد:

 

 

🔹 ۱. مشاهده لیست ایمیج‌های ذخیره‌شده با API

 

registry:2 یک API داخلی دارد که می‌توان از آن برای مشاهده ایمیج‌های ذخیره‌شده استفاده کرد.

 

✅ روش ۱: استفاده از curl

 
curl -X GET http://localhost:5000/v2/_catalog
 

🔹 این دستور لیستی از نام ایمیج‌های ذخیره‌شده را نمایش می‌دهد.

 

✅ روش ۲: مشاهده تگ‌های هر ایمیج

 
curl -X GET http://localhost:5000/v2/nginx/tags/list
 

🔹 این دستور تمام ورژن‌های ذخیره‌شده از ایمیج nginx را نمایش می‌دهد.

 

 

🔹 ۲. مشاهده ایمیج‌ها با مرورگر

 

اگر سرور شما رابط گرافیکی دارد یا به آن از طریق مرورگر دسترسی دارید، می‌توانید لیست ایمیج‌ها را مستقیماً ببینید.

 

1️⃣ آدرس زیر را در مرورگر باز کنید:

 
http://localhost:5000/v2/_catalog
 

🔹 لیستی از ایمیج‌های ذخیره‌شده نمایش داده می‌شود.

 

2️⃣ برای دیدن تگ‌های یک ایمیج خاص، از این آدرس استفاده کنید:

 
http://localhost:5000/v2/nginx/tags/list

۳. مشاهده کش‌های محلی در /var/lib/docker/registry

ایمیج‌های کش‌شده معمولاً در مسیر زیر ذخیره می‌شوند:

ls /var/lib/docker/registry

🔹 اگر registry را با docker run اجرا کرده‌اید، ایمیج‌ها در داخل کانتینر ذخیره می‌شوند. برای بررسی آن:

docker exec -it docker-mirror sh

سپس مسیر زیر را بررسی کنید:

ls /var/lib/registry/docker/registry/v2/repositories

🔹 این دستور، لیست تمام ایمیج‌های کش‌شده را نمایش می‌دهد.

🔹 ۴. مشاهده ایمیج‌های محلی در Docker

اگر ایمیج‌ها را از localhost:5000 کش کرده‌اید، می‌توانید آنها را مستقیماً در Docker ببینید:

docker images

🔹 ایمیج‌های کش‌شده باید در لیست با آدرسی مشابه localhost:5000/nginx دیده شوند.

🔹 برای لیست‌گیری از طریق API:

curl -X GET http://localhost:5000/v2/_catalog

🔹 برای بررسی ذخیره‌سازی داخل کانتینر:

docker exec -it docker-mirror sh
ls /var/lib/registry/docker/registry/v2/repositories

🔹 برای مشاهده ایمیج‌های محلی:

docker images

شکن

1- شکن، 403 آنلاین و سرویس مشابه برای مشتریان داخلی بعضی‌هاستینگ‌ها: با تنظیم DNS بروی سرورهای این مجموعه‌ها، کل درخواست‌های ترجمه دامنه به آی پی رو بهشون بسپارید و هر سایتی که ادعا کردن یا مایل باشن رو خودشون میگیرن و براتون پروکسی میکنن. ضمن اینکه اکثرا کند هستند، شاید حس خوبی از اینکه کل درخواست‌های DNS شما توسط یک مجموعه مدیریت بشه نداشته باشید.

 
 

اگر با اکراه مجبور به استفاده هستید، یک روش ساده برای محدود کردن درخواست‌هایی که به این مجموعه‌ها ارسال میشه اینه که آدرس سروری که برای پروکسی کردن درخواست شما استفاده میکنن رو پیدا کنید و فقط برای دامین‌هایی که مایل هستید ترافیک رو به اونها ارسال کنید. (آی پی بعد @ آدرس دی ان اس سرور یکی از این سرویس دهنده‌هاست.)

 
root@linux:~# dig @178.22.122.100 k8s.io 50.7.87.83
 

در بالا میبینید که آی پی 50.7.87.83 بجای آی پی اصلی دامنه k8s.io که برای کابران ایرانی تحریم هست برگشت داده میشه. آی پی اصلی این دامنه رو در نتیجه کامند زیر مشاهده میکنید:

 
root@linux:~# dig @1.1.1.1 k8s.io 34.107.204.206
 

میتونید از فایل hosts در لینوکس یا ویندوز استفاده کنید که صرفا بروی سیستم خودتون آی پی سرور پروکسی این تحریم شکن‌ها رو فقط برای دامنه‌ی مورد نظر استفاده کنید و DNS کلی سیستم رو تغییر ندید:

 
# on windows: &quotC:\Windows\System32\drivers\etc\hosts&quot root@linux:~# nano /etc/hosts # Add the below line to the editor 50.7.85.222 k8s.io proxy.golang.org [other censored domains]

راه اندازی تحریم شکن

 

2- راه اندازی تحریم شکن خودتان: شاید بجز تحریم‌های خارجی، مایل باشید تحریم‌های داخلی رو هم بی اثر کنید تا بتونید از سرویس‌هایی مثل youtube.com و خیلی سایت‌های دیگه برای افزایش دانش و رفع نیازهای خودتون استفاده کنید. در این حالت یک سرویس محدود، گرون، یا ناامن و ارزون باید بخریم، یا سرویس خودمون رو راه بندازیم. آموزش‌های خوبی به فارسی برای راه اندازی این ابزارهای ضدسانسور که توسط توسعه دهنگان چینی برای درد مشابه توسعه داده شده وجود داره. بسته به میزان دسترسی به سرور داخلی با اینترنت کمتر محدود شده یا سرور خارجی با آی پی‌ای که در ISP‌های کمتری بلاک شده باشه، ستاپ‌های مختلفی میشه کرد که فکرمیکنم تا الان هممون یکبار تجربه کردیم یا هنوز داریم استفاده میکنیم. مشکل این روش میزان هزینه، مسدود شدن آی پی توسط داخل یا خارج و گاهی پیچیدگی راه اندازی امنشون هست.

میرورها

میرورهای داخلی

 

3- میرورهای داخلی

docker.ir

سرویس دولتی iranrepo.ir

میرورهای خارجی

4- میرور Alibaba Cloud به نام Aliyun: از این میرور میشه هم برای نصب پکیج‌های apt/yum و هم برای پول کردن ایمیج‌های registry.k8s.io استفاده کرد. نصب پکیج‌های apt/yum ساده ست اما به دلیل اینکه ایمیج‌های k8s.io رو روی پوشه‌ی google_containers ارائه میکنه، نیاز به کار بیشتری برای استفاده داره.

4-1- نصب پکیج‌های apt/yum: نصب کوبرنیتیز با استفاده از این میرور نکته خاصی نداره و فقط باید کامندهایی که گفته شده رو دنبال کنید.

 

https://developer.aliyun.com/mirror/kubernetes/

4-2- پول کردن ایمیج‌های k8s.io: دو راه وجود داره:

4-2-1- تنظیم رجیستری موقع انجام kubeadm init: میتونید از فلگ --image-repository استفاده کنید:

kubeadm init --image-repository=registry.aliyuncs.com/google_containers

برای تست کردن اینکه برای شما کار میکنه یا نه میتونید بجای init کردن، فقط پول کنید ایمیج‌هارو:

kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers

4-2-2- تنظیم رجیستری میرور برای containerd: در این حالت باید در فایل /etc/containerd/config.toml آدرس میرور رو معرفی کرد. فقط نکته‌ای که وجود داره اینه که باید مقدار v2 رو به اول آدرس اضافه کرد که آدرس صحیح برای رجیستری تولید بشه:

[plugins.&quotio.containerd.grpc.v1.cri&quot.registry] # ... [plugins.&quotio.containerd.grpc.v1.cri&quot.registry.mirrors] [plugins.&quotio.containerd.grpc.v1.cri&quot.registry.mirrors.&quotregistry.k8s.io&quot] endpoint = [&quothttps://registry.aliyuncs.com/v2/google_containers&quot]

همچنین اگر از ابزار Nexus استفاده میکنید برای کش کردن ایمیج‌ها در زیرساخت خودتون و کاهش سربار اینترنت در کلاسترهای چند نودی، و مایل به استفاده از Repository Connectors‌ها بخاطر پیچیدگیشون نیستید، میتونید از Url رجیستری‌ای که از نوع Proxy با مقصد https://registry.aliyuncs.com ایجاد کردید استفاده کنید. بجای خط آخر کدهای بالا، خط زیر رو قرار بدید:

endpoint = [&quothttps://nexus.myteam.ir/repository/registry-k8s-io/v2/google_containers/&quot]

لطفا ری استارت کردن containerd بعد از اعمال تغییرات رو فراموش نکنید:

systemctl restart containerd.service
 

و اما تست:

 
root@linux:~# crictl -r unix:///run/containerd/containerd.sock pull registry.k8s.io/pause:3.9
 
Image is up to date for sha256:e6f1816883972d4be47bd48879a08919b96afcd344132622e4d444987919323c
 
 
https://virgool.io/@ahmadidev/%D8%B1%D9%88%D8%B4-%D9%87%D8%A7%DB%8C-%D8%AF%D9%88%D8%B1-%D8%B2%D8%AF%D9%86-%D8%AA%D8%AD%D8%B1%DB%8C%D9%85-%DA%A9%D9%88%D8%A8%D8%B1%D9%86%DB%8C%D8%AA%DB%8C%D8%B2-%D9%88-%D9%85%D8%B9%D8%B1%D9%81%DB%8C-%D9%85%DB%8C%D8%B1%D9%88%D8%B1-%DA%A9%D9%84%D8%A7%D8%AF-%D8%B9%D9%84%DB%8C-%D8%A8%D8%A7%D8%A8%D8%A7-wgbqm5mtbzik
 
https://virgool.io/paasino/k8s-shecan-yx4qebuljppm
https://ziroday.ir/post/kubeadm-install/
https://packops.ir/%D8%AF%D9%88%D8%B1-%D8%B2%D8%AF%D9%86-%D8%AA%D8%AD%D8%B1%DB%8C%D9%85-%D8%AF%D8%A7%DA%A9%D8%B1-%D8%A8%D8%A7-%D8%B4%DA%A9%D9%86-%D9%88-proxy/













به نظر می‌رسد که شما در حال اجرای دستور acl به صورت مستقیم در ترمینال هستید، اما acl یک دستور خاص برای پیکربندی Squid است و باید آن را در فایل پیکربندی Squid قرار دهید، نه به صورت مستقیم در ترمینال.

 

مراحل صحیح برای پیکربندی ACL در Squid:

 
  1. باز کردن فایل پیکربندی Squid:

    فایل پیکربندی Squid معمولاً در مسیر /etc/squid/squid.conf قرار دارد. برای ویرایش آن از دستور زیر استفاده کنید:

    sudo nano /etc/squid/squid.conf
    
  2. اضافه کردن یا اصلاح ACL در فایل پیکربندی:

    در این فایل، شما می‌توانید ACL‌ها را به شکل زیر اضافه کنید:

    acl localnet src 192.168.10.0/24
    http_access allow localnet
    

    این کد به Squid می‌گوید که دسترسی به منابع برای IP‌های موجود در رنج 192.168.10.0/24 مجاز باشد.

  3. ذخیره و بستن فایل: پس از اعمال تغییرات، فایل را ذخیره کرده و خارج شوید. در nano از کلیدهای زیر استفاده کنید:

    • Ctrl + O برای ذخیره
    • Ctrl + X برای خروج
  4. ریستارت Squid:

    پس از تغییرات، Squid را برای اعمال پیکربندی‌های جدید ریستارت کنید:

    sudo systemctl restart squid
    
  5. بررسی وضعیت Squid:

    برای اطمینان از اینکه Squid به درستی در حال اجرا است و هیچ مشکلی ندارد، می‌توانید وضعیت آن را بررسی کنید:

    sudo systemctl status squid
    
 

 

نتیجه:

 

دستور acl باید در فایل پیکربندی Squid استفاده شود و نه در ترمینال. پس از اعمال تغییرات در فایل پیکربندی، Squid را ریستارت کنید تا تغییرات اعمال شوند.

curl -I --proxy http://49.13.174.14:3128 https://www.google.com



HTTP_PROXY="http://49.13.174.14:3128" crictl pull nginx:latest





/etc/environment

export HTTP_PROXY="http://192.168.10.1:3128"
export HTTPS_PROXY="http://192.168.10.1:3128"







مشکل اصلی اینجاست که گواهی SSL برای مخزن Docker قابل اعتماد نیست و همچنین به نظر می‌رسد که ارتباط با مخزن امنیتی اوبونتو هم دچار مشکل شده است. برای حل این مشکل، مراحل زیر را انجام دهید:

1. بررسی و به‌روزرسانی گواهی‌های SSL

ابتدا اطمینان حاصل کنید که بسته‌های مرتبط با گواهی‌های SSL روی سیستم شما به‌روز هستند:

sudo apt update
sudo apt install --reinstall ca-certificates
sudo update-ca-certificates

2. بررسی تاریخ و ساعت سیستم

اگر تاریخ و ساعت سیستم درست تنظیم نشده باشد، می‌تواند باعث نامعتبر شدن گواهی‌های SSL شود:

timedatectl

اگر تاریخ و ساعت اشتباه است، تنظیمش کنید:

sudo timedatectl set-ntp on

3. پاک کردن و اضافه کردن مجدد کلید GPG مخزن Docker

اگر همچنان مشکل باقی ماند، کلید GPG Docker را حذف و مجدداً اضافه کنید:

sudo rm -rf /etc/apt/keyrings/docker.asc
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo tee /etc/apt/keyrings/docker.asc > /dev/null
sudo chmod a+r /etc/apt/keyrings/docker.asc

4. بررسی دسترسی به مخزن‌ها

ممکن است مخزن Docker هنوز برای Ubuntu 24.04 (Noble) به‌روزرسانی نشده باشد. بررسی کنید که آیا مخزن برای این نسخه منتشر شده است یا نه:

curl -fsSL https://download.docker.com/linux/ubuntu/dists/

اگر نسخه‌ی "noble" در لیست نبود، می‌توانید به‌جای آن از "jammy" استفاده کنید:

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  jammy stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

5. پاک کردن کش و به‌روزرسانی مجدد

پس از انجام تغییرات، این دستورات را اجرا کنید:

sudo apt clean
sudo apt update

6. تست اتصال دستی

برای بررسی اتصال به مخزن‌های اوبونتو و Docker می‌توانید این دستورات را امتحان کنید:

wget -q --spider https://download.docker.com
wget -q --spider http://security.ubuntu.com

اگر این دستورات خطا دادند، ممکن است مشکل از DNS یا فایروال باشد.

7. بررسی DNS و استفاده از 8.8.8.8

گاهی اوقات مشکل اتصال به مخزن‌ها به دلیل DNS نادرست است. می‌توانید از DNS گوگل استفاده کنید:

sudo nano /etc/resolv.conf

و خط زیر را اضافه کنید:

nameserver 8.8.8.8

بعد از انجام این مراحل، دوباره امتحان کنید:

sudo apt update && sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

اگر باز هم مشکل داشتید، بگویید تا راه‌حل‌های دیگر بررسی کنیم.

.






استفاده از V2Ray برای دور زدن تحریم‌ها

V2Ray می‌تواند به عنوان یک پروکسی تحریم‌شکن برای دسترسی به سرویس‌های مسدود شده مانند Docker Hub، GitHub, Google Cloud و ... استفاده شود.


1. تنظیم V2Ray برای عبور از تحریم‌ها

🔹 دو روش برای استفاده از V2Ray به عنوان تحریم‌شکن وجود دارد:

  1. تنظیم V2Ray به عنوان سیستم پروکسی (SOCKS یا HTTP Proxy)
  2. استفاده از tun2socks برای تغییر مسیر ترافیک کل سیستم

🔹 روش 1: تنظیم V2Ray به عنوان پروکسی سیستم

1️⃣ فعال‌سازی پروکسی داخلی V2Ray

ابتدا V2Ray را نصب و اجرا کنید (اگر قبلاً نصب نشده است):

bash <(curl -Ls https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh)

سپس فایل کانفیگ را ویرایش کنید:

sudo nano /usr/local/etc/v2ray/config.json

و این تنظیمات را اضافه کنید (پورت 1080 برای SOCKS5 و 8080 برای HTTP Proxy):

{
  "inbounds": [
    {
      "port": 1080,
      "listen": "127.0.0.1",
      "protocol": "socks",
      "settings": {
        "udp": true
      }
    },
    {
      "port": 8080,
      "listen": "127.0.0.1",
      "protocol": "http",
      "settings": {}
    }
  ],
  "outbounds": [
    {
      "protocol": "vmess",
      "settings": {
        "vnext": [
          {
            "address": "YOUR-V2RAY-SERVER",
            "port": 443,
            "users": [
              {
                "id": "YOUR-UUID",
                "alterId": 64,
                "security": "auto"
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "network": "ws",
        "wsSettings": {
          "path": "/v2ray"
        }
      }
    }
  ]
}

🔹 مقادیر مهم را تغییر دهید:
YOUR-V2RAY-SERVER = آی‌پی یا دامنه سرور V2Ray
YOUR-UUID = مقدار UUID که در سرور تنظیم شده است

سرویس V2Ray را ری‌استارت کنید:

sudo systemctl restart v2ray

بررسی وضعیت:

sudo systemctl status v2ray

🔹 روش 2: استفاده از tun2socks برای تغییر مسیر کل ترافیک

1️⃣ نصب tun2socks

sudo apt update && sudo apt install -y tun2socks

2️⃣ اجرا کردن tun2socks

sudo tun2socks -device tun0 -proxy socks5://127.0.0.1:1080

3️⃣ تنظیم iptables برای هدایت ترافیک

sudo ip route add default via 192.168.1.1 dev tun0

🔹 با این روش، تمام ترافیک از V2Ray عبور خواهد کرد.


📌 2. استفاده از پروکسی V2Ray در نرم‌افزارها

🔹 برای Docker

export HTTP_PROXY="http://127.0.0.1:8080"
export HTTPS_PROXY="http://127.0.0.1:8080"
docker pull nginx

✅ حالا Docker بدون مشکل ایمیج‌ها را دانلود می‌کند.

🔹 برای Git

git config --global http.proxy http://127.0.0.1:8080
git config --global https.proxy http://127.0.0.1:8080

🔹 برای APT (نصب پکیج در اوبونتو)

echo 'Acquire::http::Proxy "http://127.0.0.1:8080/";' | sudo tee /etc/apt/apt.conf.d/01proxy
sudo apt update

📌 3. تست اتصال

بررسی ارتباط پروکسی:

curl -x socks5h://127.0.0.1:1080 https://ifconfig.me

🔹 اگر آی‌پی شما تغییر کرده، یعنی V2Ray به درستی کار می‌کند.

بررسی اتصال Docker

docker pull alpine

✅ با V2Ray می‌توانید تحریم‌های اینترنتی را دور بزنید و دسترسی به سرویس‌هایی مثل Docker, GitHub, Google Cloud, و NPM را بدون محدودیت تجربه کنید.

📌 اگر مشکل داشتید، این دستورات را ارسال کنید:

sudo systemctl status v2ray
journalctl -u v2ray --no-pager | tail -n 20
curl -x socks5h://127.0.0.1:1080 https://ifconfig.me

 

 

 

 

I am also facing this issue

Please verifify the steps i have performed.

  1. Import docker image using tar.gz file (private tar file)
    docker import .tar.gz :
  2. docker save :-o testimage.tar
    crictl images
    docker.io/library/ 025bf97099229 535MB
  3. ctr -n=k8s.io images import testimage.tar :

when i try to create a deployment using created image got below error

Type Reason Age From Message

Warning Failed 58m (x2 over 64m) kubelet Failed to pull image "{name}:{tag}": rpc error: code = Unknown desc = failed to pull and unpack image "docker.io/library/{name}:{tag}": failed to resolve reference "docker.io/library/{name}:{tag}": failed to do request: Head https://registry-1.docker.io/v2/library/{name}/manifests/**_{tag}**: dial tcp 54.224.119.26:443: i/o timeout Warning Failed 34m (x11 over 107m) kubelet (combined from similar events): Failed to pull image "{name}:{tag}": rpc error: code = Unknown desc = failed to pull and unpack image "docker.io/library"{name}:{tag}": failed to resolve reference "docker.io/library/{name}:{tag}": failed to do request: Head https://registry-1.docker.io/v2/library/{name}/manifests/**_{tag}_**: dial tcp 52.55.168.20:443: i/o timeout``


مقالات
سیاست
رسانه‎های دیجیتال
علوم انسانی
مدیریت
روش تحقیق‌وتحلیل
متفرقه
درباره فدک
مدیریت
مجله مدیریت معاصر
آیات مدیریتی
عکس نوشته‌ها
عکس نوشته
بانک پژوهشگران مدیریتی
عناوین مقالات مدیریتی
منابع درسی (حوزه و دانشگاه)
مطالعات
رصدخانه شخصیت‌ها
رصدخانه - فرهنگی
رصدخانه - دانشگاهی
رصدخانه - رسانه
رصدخانه- رویدادهای علمی
زبان
لغت نامه
تست زبان روسی
ضرب المثل روسی
ضرب المثل انگلیسی
جملات چهار زبانه
logo-samandehi
درباره ما | ارتباط با ما | سیاست حفظ حریم خصوصی | مقررات | خط مشی کوکی‌ها |
نسخه پیش آلفا 2000-2022 CMS Fadak. ||| Version : 5.2 ||| By: Fadak Solutions نسخه قدیم