إذا كانت مجموعة K8s الخاصة بك تقوم بإجراء طلبات خارجية - إلى واجهات برمجة التطبيقات الخاصة بالشركاء، إلى الأسواق، إلى منصات الإعلان - عاجلاً أم آجلاً ستواجه حظرًا بناءً على IP. تدير وحدة التحكم Ingress حركة المرور الواردة بنفسها، ولكن الطلبات الصادرة عبر الحاويات تحتاج إلى مخطط منفصل مع بروكسي. في هذه المقالة، نناقش كيفية إعداد ذلك بشكل صحيح: من اختيار نوع البروكسي إلى تكوينات YAML المحددة لوحدة التحكم Ingress الخاصة بـ NGINX وTraefik.
لماذا بروكسي في Kubernetes: سيناريوهات حقيقية
Kubernetes هو منظم، ومعظم المقالات حوله تتحدث عن حركة المرور الواردة: كيفية إعداد Ingress، كيفية إصدار شهادة TLS، كيفية توجيه الطلبات إلى الخدمات. لكن هناك جانب آخر: حركة المرور الصادرة من الحاويات. هنا تظهر المشاكل مع الحظر، القيود الجغرافية، والحدود بناءً على IP.
دعونا نناقش مهام معينة حيث يصبح البروكسي في مجموعة K8s ضرورة:
- جمع وتحليل الأسعار. تقوم مجموعتك بتشغيل CronJob كل 15 دقيقة لجمع البيانات من Wildberries وOzon وAmazon. بدون تدوير IP، بعد 2-3 ساعات ستحصل على حظر على نطاق IP الخاص بمزود الخدمة السحابية الخاص بك.
- العمل مع واجهات برمجة التطبيقات الإعلانية. واجهة برمجة التطبيقات الخاصة بـ Facebook Marketing، واجهة برمجة التطبيقات الخاصة بـ TikTok Ads، واجهة برمجة التطبيقات الخاصة بـ Google Ads - جميعها تتعقب مصدر الطلبات. إذا كانت عشرات الحاويات ترسل طلبات من نفس IP لمركز البيانات، فهذا يعد محفزًا للحظر التلقائي.
- اختبار الجغرافيا. يجب أن يعرض خدمتك محتوى مختلفًا للمستخدمين من دول مختلفة. من خلال البروكسي، يمكن للحاويات تقليد الطلبات من المناطق المطلوبة للاختبارات التلقائية.
- تجاوز القيود المؤسسية. في بعض البنى التحتية، يجب أن تمر جميع حركة المرور الصادرة عبر بروكسي مؤسسي - هذا مطلب للامتثال.
- العمل مع واجهات برمجة التطبيقات الشريكة التي تحتوي على قائمة بيضاء لـ IP. عندما يسمح الشريك بالطلبات فقط من IPs معينة، بينما تتوسع مجموعتك وتغير العناوين - فإن البروكسي مع IPs الثابتة يحل المشكلة.
من المهم فهم الفصل المعماري: تدير وحدة التحكم Ingress حركة المرور الواردة (من المستخدمين إلى خدماتك)، بينما البروكسي للطلبات الصادرة هو مهمة منفصلة. ومع ذلك، فإنهما مرتبطان: غالبًا ما يتم تعيين تكوين البروكسي على مستوى نفس وحدة التحكم Ingress أو من خلال التعليقات التوضيحية التي يقرأها.
💡 الفصل الأساسي
في هذه المقالة، نناقش سيناريوهين: (1) إعداد وحدة التحكم Ingress كبروكسي عكسي للخوادم الخارجية، و(2) توجيه حركة المرور الصادرة من الحاويات عبر خادم بروكسي خارجي. كلا السيناريوهين شائعان في الإنتاج.
أي نوع من البروكسي تختار لمجموعة K8s
يؤثر اختيار نوع البروكسي مباشرة على مدى قدرة مجموعتك على العمل لفترة طويلة دون حظر. تعتبر IPs لمراكز البيانات هي الأرخص، ولكن من السهل التعرف عليها وحظرها. بينما تعتبر IPs المقيمين والمتحركين أغلى، لكنها أكثر موثوقية بشكل كبير للمهام التي تتطلب تقليد المستخدم الحقيقي.
| نوع البروكسي | السرعة | خطر الحظر | أفضل سيناريو في K8s |
|---|---|---|---|
| مراكز البيانات | عالية | عالية | واجهات برمجة التطبيقات الداخلية، الامتثال المؤسسي، التكاملات الشريكة مع قائمة بيضاء لـ IP |
| مقيمين | متوسطة | منخفضة | جمع بيانات الأسواق، العمل مع واجهات برمجة التطبيقات الإعلانية، اختبار الجغرافيا |
| متحركين | متوسطة | أدنى | واجهة برمجة التطبيقات الخاصة بـ Facebook Ads، واجهة برمجة التطبيقات الخاصة بـ TikTok، المهام ذات الحمل العالي مع خطر الحظر |
بالنسبة لمعظم المهام في مجموعة K8s، المتعلقة بجمع البيانات أو العمل مع منصات الإعلان، فإن الخيار الأمثل هو بروكسي مقيم مع تدوير. إنها توفر IPs حقيقية لمستخدمي المنازل، وتعتبر خوارزميات حماية المواقع هذه الطلبات كحركة مرور عادية من المتصفح.
من حيث البروتوكول، فإن بروكسي HTTP/HTTPS هو الأكثر شمولاً لـ K8s - حيث تدعمه جميع عملاء HTTP الشائعين في أي لغة برمجة من خلال متغيرات البيئة القياسية HTTP_PROXY وHTTPS_PROXY. يحتاج SOCKS5 فقط للبروتوكولات غير القياسية أو عندما يتطلب الأمر بروكسي ليس فقط HTTP.
إعداد البروكسي عبر وحدة التحكم Ingress الخاصة بـ NGINX
وحدة التحكم Ingress الخاصة بـ NGINX هي الخيار الأكثر شيوعًا في K8s. دعونا نناقش سيناريوهين: إعداد NGINX كبروكسي عكسي للخادم الخارجي عبر خادم بروكسي، والإعداد العالمي للبروكسي الصادر لوحدة التحكم نفسها.
التعليقات التوضيحية لتوجيه الطلبات إلى الخادم الخارجي
تدعم وحدة التحكم Ingress الخاصة بـ NGINX التعليقات التوضيحية لإدارة سلوك البروكسي. إذا كنت بحاجة إلى أن يقوم Ingress بتمرير الطلبات إلى خدمة خارجية عبر بروكسي وسيط، استخدم ConfigMap مع تكوين مخصص:
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-ingress-controller
namespace: ingress-nginx
data:
# بروكسي HTTP عالمي للطلبات الصادرة من NGINX
http-snippet: |
proxy_connect_timeout 10s;
proxy_read_timeout 30s;
proxy_send_timeout 30s;
# إعداد الخادم الخارجي عبر البروكسي
use-proxy-protocol: "false"
proxy-real-ip-cidr: "0.0.0.0/0"
موارد Ingress مع التعليقات التوضيحية للبروكسي
يمكن تعيين معلمات البروكسي لمورد Ingress منفصل من خلال التعليقات التوضيحية. هذا مفيد عندما تتطلب الخدمات المختلفة أوقات انتظار وإعدادات مختلفة:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-service-ingress
namespace: production
annotations:
kubernetes.io/ingress.class: "nginx"
# أوقات انتظار البروكسي
nginx.ingress.kubernetes.io/proxy-connect-timeout: "10"
nginx.ingress.kubernetes.io/proxy-read-timeout: "60"
nginx.ingress.kubernetes.io/proxy-send-timeout: "60"
# حجم المخزن المؤقت
nginx.ingress.kubernetes.io/proxy-buffer-size: "16k"
nginx.ingress.kubernetes.io/proxy-buffers-number: "8"
# تمرير IP الحقيقي للعميل
nginx.ingress.kubernetes.io/use-forwarded-headers: "true"
nginx.ingress.kubernetes.io/forwarded-for-header: "X-Forwarded-For"
spec:
rules:
- host: myapp.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
إعداد بروكسي خارجي للطلبات الصادرة من حاوية NGINX
إذا كانت وحدة التحكم Ingress الخاصة بـ NGINX تحتاج إلى إجراء طلبات صادرة عبر بروكسي خارجي (على سبيل المثال، للتحقق من صحة نقاط النهاية الخارجية)، يجب تعيين متغيرات البيئة في نشر وحدة التحكم:
apiVersion: apps/v1
kind: Deployment
metadata:
name: ingress-nginx-controller
namespace: ingress-nginx
spec:
template:
spec:
containers:
- name: controller
image: registry.k8s.io/ingress-nginx/controller:v1.9.4
env:
- name: HTTP_PROXY
valueFrom:
secretKeyRef:
name: proxy-credentials
key: http-proxy-url
- name: HTTPS_PROXY
valueFrom:
secretKeyRef:
name: proxy-credentials
key: https-proxy-url
- name: NO_PROXY
value: "localhost,127.0.0.1,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,.cluster.local"
لاحظ المتغير NO_PROXY - فهو مهم للغاية. بدونه، ستذهب جميع حركة المرور داخل المجموعة أيضًا عبر البروكسي الخارجي، مما سيكسر التفاعل بين الخدمات. في NO_PROXY، يجب دائمًا تضمين نطاقات RFC-1918 واللاحقة .cluster.local.
إعداد البروكسي في وحدة التحكم Ingress الخاصة بـ Traefik
Traefik هو بديل شائع لوحدة التحكم Ingress الخاصة بـ NGINX، خاصة عند استخدامه مع Helm وفي المجموعات المدارة (k3s، Docker Swarm، Nomad). يحتوي Traefik على نظام تكوين خاص به عبر CRD (تعريفات الموارد المخصصة) وتكوينات ثابتة/ديناميكية.
التكوين الثابت لـ Traefik مع البروكسي
apiVersion: v1
kind: ConfigMap
metadata:
name: traefik-config
namespace: traefik
data:
traefik.yaml: |
# التكوين الثابت لـ Traefik
entryPoints:
web:
address: ":80"
websecure:
address: ":443"
# الإعدادات للعمل خلف بروكسي
serversTransport:
insecureSkipVerify: false
maxIdleConnsPerHost: 200
dialTimeout: 10s
responseHeaderTimeout: 30s
# تسجيل لتشخيص البروكسي
log:
level: INFO
accessLog:
fields:
headers:
defaultMode: keep
names:
X-Forwarded-For: keep
X-Real-IP: keep
البرمجيات الوسيطة لإضافة رؤوس البروكسي
في Traefik، يمكنك إنشاء برمجية وسيطة ستضيف أو تعدل الرؤوس عند تمرير الطلبات. هذا مفيد لضمان تمرير IP الحقيقي للعميل بشكل صحيح عبر سلسلة البروكسي:
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: proxy-headers
namespace: production
spec:
headers:
customRequestHeaders:
X-Forwarded-Proto: "https"
# إزالة الرؤوس التي قد تكشف عن البنية التحتية
customResponseHeaders:
X-Powered-By: ""
Server: ""
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: my-app-route
namespace: production
spec:
entryPoints:
- websecure
routes:
- match: Host(`myapp.example.com`)
kind: Rule
middlewares:
- name: proxy-headers
services:
- name: my-service
port: 80
متغيرات البيئة لنشر Traefik
بالمثل لـ NGINX، نقوم بتعيين متغيرات البيئة لـ Traefik عبر قيم Helm أو مباشرة في النشر. عند استخدام مخطط Helm، يتم ذلك عبر values.yaml:
# values.yaml لمخطط Helm الخاص بـ Traefik
deployment:
enabled: true
kind: Deployment
env:
- name: HTTP_PROXY
valueFrom:
secretKeyRef:
name: proxy-credentials
key: http-proxy-url
- name: HTTPS_PROXY
valueFrom:
secretKeyRef:
name: proxy-credentials
key: https-proxy-url
- name: NO_PROXY
value: "localhost,127.0.0.1,10.96.0.0/12,10.244.0.0/16,.cluster.local,.svc"
بروكسي عبر متغيرات البيئة في الحاويات
الطريقة الأكثر شمولاً لإعداد بروكسي صادر لأي حاوية هي عبر متغيرات البيئة القياسية. تعمل هذه الطريقة بغض النظر عن لغة البرمجة والإطار: Python requests، Go net/http، Node.js axios، Java HttpClient - جميعها تقرأ HTTP_PROXY وHTTPS_PROXY تلقائيًا.
الخيار 1: مباشرة في مواصفات الحاوية
apiVersion: v1
kind: Pod
metadata:
name: scraper-pod
namespace: production
spec:
containers:
- name: scraper
image: mycompany/scraper:latest
env:
- name: HTTP_PROXY
value: "http://username:[email protected]:8080"
- name: HTTPS_PROXY
value: "http://username:[email protected]:8080"
- name: NO_PROXY
value: "localhost,127.0.0.1,10.0.0.0/8,.cluster.local"
resources:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "256Mi"
cpu: "500m"
⚠️ لا تخزن بيانات الاعتماد بشكل علني!
المثال أعلاه موضح لأغراض التوضيح. في الإنتاج، يجب دائمًا تخزين بيانات اعتماد البروكسي في أسرار Kubernetes وتمريرها عبر secretKeyRef. لمزيد من التفاصيل - انظر القسم حول الأسرار أدناه.
الخيار 2: عبر ConfigMap لعدة حاويات
إذا كانت البروكسي تستخدمها عدة نشرات، فمن الملائم إخراج الإعدادات إلى ConfigMap وربطها عبر envFrom:
apiVersion: v1
kind: ConfigMap
metadata:
name: proxy-config
namespace: production
data:
NO_PROXY: "localhost,127.0.0.1,10.0.0.0/8,172.16.0.0/12,.cluster.local,.svc.cluster.local"
PROXY_TIMEOUT: "30"
PROXY_MAX_RETRIES: "3"
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: price-monitor
namespace: production
spec:
replicas: 5
selector:
matchLabels:
app: price-monitor
template:
metadata:
labels:
app: price-monitor
spec:
containers:
- name: monitor
image: mycompany/price-monitor:v2.1
envFrom:
- configMapRef:
name: proxy-config
- secretRef:
name: proxy-credentials
ports:
- containerPort: 8080
الخيار 3: WebhookAdmissionController المتحول
لمجموعات الشركات، حيث يجب على جميع الحاويات استخدام البروكسي، يمكن إعداد webhook admission المتحول الذي يضيف تلقائيًا متغيرات البيئة للبروكسي لجميع الحاويات التي يتم إنشاؤها. تُستخدم هذه الحلول في البنى التحتية المؤسسية، حيث يتطلب الامتثال أن تمر جميع حركة المرور الصادرة عبر بروكسي مؤسسي. إن تنفيذ مثل هذا webhook يتجاوز نطاق هذه المقالة، ولكن من الجيد أن تعرف بوجوده.
تدوير IP وإدارة مجموعة البروكسي في K8s
البروكسي الثابت جيد للامتثال المؤسسي، ولكنه سيء للمهام التي تحتاج إلى تجنب الحظر. إذا كانت 50 من الحاويات الخاصة بك ترسل طلبات عبر نفس IP، سيتم حظر هذا IP بسرعة كبيرة. الحل هو تدوير البروكسي.
مخطط مع Proxy Sidecar
أحد الأنماط هو تشغيل وكيل البروكسي كحاوية sidecar بجانب التطبيق الرئيسي. يستقبل sidecar الطلبات على localhost:8080 ويعيد توجيهها عبر مجموعة بروكسي خارجية تدور:
apiVersion: apps/v1
kind: Deployment
metadata:
name: scraper-with-proxy-sidecar
namespace: production
spec:
replicas: 10
selector:
matchLabels:
app: scraper
template:
metadata:
labels:
app: scraper
spec:
containers:
# التطبيق الرئيسي
- name: scraper
image: mycompany/scraper:latest
env:
- name: HTTP_PROXY
value: "http://localhost:8080"
- name: HTTPS_PROXY
value: "http://localhost:8080"
- name: NO_PROXY
value: "localhost,127.0.0.1,.cluster.local"
# Sidecar: وكيل بروكسي محلي مع تدوير
- name: proxy-rotator
image: mycompany/proxy-rotator:latest
ports:
- containerPort: 8080
env:
- name: PROXY_LIST_URL
valueFrom:
secretKeyRef:
name: proxy-credentials
key: api-endpoint
- name: ROTATION_INTERVAL
value: "60" # تدوير كل 60 ثانية
resources:
requests:
memory: "64Mi"
cpu: "50m"
limits:
memory: "128Mi"
cpu: "200m"
مخطط مع خدمة بروكسي مركزية
نهج بديل هو وجود خدمة بروكسي واحدة داخل المجموعة، والتي تتصل بها جميع الحاويات. هذا أسهل في الإدارة: يكفي تحديث سر واحد مع بيانات اعتماد البروكسي، وستبدأ جميع الحاويات تلقائيًا في استخدام البيانات الجديدة.
apiVersion: v1
kind: Service
metadata:
name: proxy-gateway
namespace: proxy-system
spec:
selector:
app: proxy-gateway
ports:
- name: http
port: 8080
targetPort: 8080
- name: socks5
port: 1080
targetPort: 1080
type: ClusterIP
---
# الحاويات تستخدم البروكسي عبر DNS الداخلي
# HTTP_PROXY=http://proxy-gateway.proxy-system.svc.cluster.local:8080
بالنسبة للمهام التي تتطلب الخصوصية العالية وأقل خطر للحظر (مثل جمع البيانات من الأسواق أو العمل مع واجهات برمجة التطبيقات الإعلانية)، نوصي باستخدام بروكسي مقيم مع تدوير - حيث توفر IPs حقيقية لمستخدمي المنازل، مما يجعل حركة المرور من مجموعتك غير قابلة للتمييز عن حركة مرور المتصفح العادية.
تخزين بيانات اعتماد البروكسي في أسرار Kubernetes
يعد التخزين الآمن لبيانات الاعتماد مطلبًا أساسيًا لأي مجموعة إنتاج. لا تقم أبدًا بإدراج اسم المستخدم/كلمة المرور للبروكسي مباشرة في ملفات YAML التي يتم تخزينها في مستودع Git.
إنشاء سر للبروكسي
# الإنشاء عبر kubectl (القيم مشفرة في base64 تلقائيًا)
kubectl create secret generic proxy-credentials \
--namespace=production \
--from-literal=http-proxy-url='http://user:[email protected]:8080' \
--from-literal=https-proxy-url='http://user:[email protected]:8080' \
--from-literal=socks5-proxy-url='socks5://user:[email protected]:1080'
# التحقق من السر الذي تم إنشاؤه
kubectl get secret proxy-credentials -n production -o yaml
ملف YAML لسر
apiVersion: v1
kind: Secret
metadata:
name: proxy-credentials
namespace: production
labels:
app: proxy-config
managed-by: ops-team
type: Opaque
# القيم مشفرة في base64
# echo -n 'http://user:pass@proxy:8080' | base64
stringData:
# stringData يسمح بتحديد القيم بشكل علني
# Kubernetes يقوم بتشفيرها تلقائيًا في base64
http-proxy-url: "http://user:[email protected]:8080"
https-proxy-url: "http://user:[email protected]:8080"
proxy-host: "gate.proxycove.com"
proxy-port: "8080"
proxy-username: "user"
proxy-password: "password"
استخدام السر في النشر
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-worker
namespace: production
spec:
replicas: 3
selector:
matchLabels:
app: api-worker
template:
metadata:
labels:
app: api-worker
spec:
containers:
- name: worker
image: mycompany/api-worker:latest
env:
- name: HTTP_PROXY
valueFrom:
secretKeyRef:
name: proxy-credentials
key: http-proxy-url
- name: HTTPS_PROXY
valueFrom:
secretKeyRef:
name: proxy-credentials
key: https-proxy-url
- name: NO_PROXY
value: "localhost,127.0.0.1,10.0.0.0/8,.cluster.local"
# للتطبيقات التي تقرأ المضيف/المنفذ بشكل منفصل
- name: PROXY_HOST
valueFrom:
secretKeyRef:
name: proxy-credentials
key: proxy-host
- name: PROXY_PORT
valueFrom:
secretKeyRef:
name: proxy-credentials
key: proxy-port
التكامل مع خزانات الأسرار الخارجية
في بيئة الشركات، يُوصى باستخدام External Secrets Operator لمزامنة الأسرار من HashiCorp Vault أو AWS Secrets Manager أو Azure Key Vault. يسمح ذلك بتحديث بيانات اعتماد البروكسي تلقائيًا دون تدخل يدوي وإعادة تشغيل الحاويات:
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: proxy-credentials-ext
namespace: production
spec:
refreshInterval: 1h
secretStoreRef:
name: vault-backend
kind: ClusterSecretStore
target:
name: proxy-credentials
creationPolicy: Owner
data:
- secretKey: http-proxy-url
remoteRef:
key: secret/proxy/proxycove
property: http_proxy_url
- secretKey: https-proxy-url
remoteRef:
key: secret/proxy/proxycove
property: https_proxy_url
تشخيص الأخطاء الشائعة عند إعداد البروكسي في K8s
حتى مع التكوين الصحيح، قد تحدث مشاكل. دعونا نستعرض أكثرها شيوعًا وطرق التشخيص.
المشكلة 1: حركة المرور داخل المجموعة تمر عبر البروكسي
الأعراض: الحاويات تتوقف عن رؤية بعضها البعض، يتعطل حل DNS داخل المجموعة، الخدمات لا تستجيب. السبب - لم يتم تعيين المتغير NO_PROXY.
الحد الأدنى من القيمة المطلوبة NO_PROXY
NO_PROXY=localhost,127.0.0.1,::1,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,.cluster.local,.svc,.svc.cluster.local,kubernetes.default.svc
المشكلة 2: البروكسي لا يُطبق على حاوية معينة
التشخيص: ادخل إلى الحاوية وتحقق من متغيرات البيئة:
# التحقق من متغيرات البيئة في الحاوية
kubectl exec -it <pod-name> -n production -- env | grep -i proxy
# اختبار الاتصال عبر البروكسي من الحاوية
kubectl exec -it <pod-name> -n production -- curl -v --proxy http://proxy:8080 https://httpbin.org/ip
# التحقق من أن السر تم تركيبه بشكل صحيح
kubectl exec -it <pod-name> -n production -- env | grep PROXY
المشكلة 3: أخطاء TLS عند استخدام بروكسي HTTPS
إذا كان البروكسي يستخدم شهادة موقعة ذاتيًا أو CA مؤسسية، ستواجه التطبيقات أخطاء في التحقق من TLS. الحل هو إضافة شهادة CA الخاصة بالبروكسي إلى الموثوق بها:
# إنشاء ConfigMap مع شهادة CA
kubectl create configmap proxy-ca-cert \
--from-file=proxy-ca.crt=./proxy-ca.crt \
-n production
# تركيبها في الحاوية
spec:
containers:
- name: app
volumeMounts:
- name: proxy-ca
mountPath: /etc/ssl/certs/proxy-ca.crt
subPath: proxy-ca.crt
volumes:
- name: proxy-ca
configMap:
name: proxy-ca-cert
المشكلة 4: طلبات بطيئة عبر البروكسي
إذا كانت الطلبات عبر البروكسي أبطأ بكثير من الطلبات المباشرة - تحقق من:
- حل DNS: تأكد من أن طلبات DNS لا تمر عبر البروكسي (أضف إلى
NO_PROXY) - اتصالات Keep-alive: قم بإعداد مجموعة اتصالات لخادم البروكسي
- الموقع الجغرافي: يجب أن يكون خادم البروكسي قريبًا جسديًا من المورد المستهدف
- نوع البروكسي: لمهام السرعة العالية، ضع في اعتبارك بروكسي مراكز البيانات - حيث توفر الحد الأدنى من التأخير
أوامر مفيدة للتشخيص
# تحقق من سجلات وحدة التحكم Ingress
kubectl logs -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx --tail=100
# تحقق من أحداث الحاوية
kubectl describe pod <pod-name> -n production
# اختبار اتصال البروكسي من الحاوية
kubectl run test-proxy --image=curlimages/curl --rm -it --restart=Never -- \
curl -x http://user:pass@proxy:8080 -v https://httpbin.org/ip
# تحقق من أن السر موجود ويحتوي على المفاتيح المطلوبة
kubectl get secret proxy-credentials -n production -o jsonpath='{.data}' | python3 -c "
import sys, json, base64
data = json.load(sys.stdin)
for k, v in data.items():
print(f'{k}: {base64.b64decode(v).decode()[:20]}...')
"
الخاتمة والتوصيات
إعداد البروكسي في Kubernetes ليس مهمة لمرة واحدة، بل هو جزء من بنية أمان الشبكة للمجموعة. دعونا نلخص:
- لوحدة التحكم Ingress الخاصة بـ NGINX - استخدم التعليقات التوضيحية لضبط معلمات البروكسي على مستوى موارد Ingress الفردية، ومتغيرات البيئة في النشر للإعدادات العالمية لحركة المرور الصادرة.
- لـ Traefik - امزج بين التكوين الثابت عبر ConfigMap مع البرمجيات الوسيطة لإدارة الرؤوس.
- للحاويات - المتغيرات القياسية
HTTP_PROXY/HTTPS_PROXYعبر الأسرار - هي الطريقة الأكثر شمولاً وأمانًا. - قم دائمًا بتعيين NO_PROXY - وإلا ستتعطل حركة المرور داخل المجموعة.
- لا تخزن أبدًا بيانات اعتماد البروكسي بشكل علني في المانيفستات أو في Git.
- للإنتاج - استخدم External Secrets Operator لتدوير بيانات الاعتماد تلقائيًا.
إذا كانت مجموعة K8s الخاصة بك تقوم بمهام تتطلب استقرار IP و الحد الأدنى من خطر الحظر - جمع البيانات، العمل مع واجهات برمجة التطبيقات الإعلانية، اختبار الجغرافيا - نوصي باستخدام بروكسي مقيم. إنها توفر IPs حقيقية لمستخدمي المنازل، والتي تعتبرها خوارزميات الحماية كحركة مرور شرعية. لمهام ذات متطلبات عالية للسرعة وأقل مخاطر الحظر من منصات الهاتف المحمول، تعتبر البروكسي المتحرك خيارًا ممتازًا - حيث تعمل عبر شبكات 4G/5G الحقيقية لمزودي الخدمة.
```