شبكات EKS: VPC CNI وموازنة التحميل
استخدم المكوّن الإضافي Amazon VPC CNI لمنح الحُزم عناوين IP أصلية من VPC، واعرض الخدمات باستخدام AWS Load Balancer Controller
شبكات EKS: VPC CNI وموازنة التحميل درس مجاني في AWS Solutions Architect على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في AWS Solutions Architect، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة AWS Solutions Architect 4 دروس في المجموع.
أساسيات شبكات Kubernetes
يتطلب Kubernetes أن يكون لكل حاوية عنوان IP فريد وقابل للتوجيه، وأن تتواصل الحاويات مع بعضها من دون NAT. ويتولى المكوّن الإضافي Container Network Interface (CNI) تعيين عناوين IP وتهيئة مسارات الشبكة على عُقد العمال. وتستخدم منصات Kubernetes المختلفة تطبيقات CNI مختلفة؛ أما AWS فتستخدم Amazon VPC CNI plugin لدمج شبكات Kubernetes مباشرةً مع طبقة VPC.
المكوّن الإضافي Amazon VPC CNI
يعيّن Amazon VPC CNI plugin لكل حاوية عنوان IP مباشرةً من نطاق CIDR للشبكة الفرعية في VPC الخاصة بكم. وهذا يجعل الحاويات مواطني VPC من الدرجة الأولى — إذ يمكن لموارد VPC الأخرى، والأنظمة المحلية عبر VPN/Direct Connect، ومجموعات الأمان الوصول إليها دون ترجمة عبر شبكة تراكبية. وتحافظ كل عُقدة عامل EC2 على مجموعة من عناوين IP الخاصة الثانوية (عنوان واحد لكل فتحة ENI)، وتُسنَد هذه العناوين إلى الحاويات عند جدولتها.
# Check the VPC CNI version installed in your cluster
kubectl describe daemonset aws-node -n kube-system | grep Image
# View the secondary IPs assigned to a node
aws ec2 describe-network-interfaces \
--filters 'Name=attachment.instance-id,Values=i-0abcdef1234567890' \
--query 'NetworkInterfaces[].PrivateIpAddresses[].PrivateIpAddress'مجموعة ENI وعناوين IP الجاهزة
يحافظ المكوّن الإضافي VPC CNI على مجموعة من عناوين IP المخصصة مسبقًا والجاهزة في كل عُقدة، للسماح بجدولة الحاويات بسرعة. وعند بدء تشغيل العُقدة، يربط CNI عدة ENI ويعيّن عناوين IP ثانوية حتى قيمة متغيرات البيئة WARM_IP_TARGET أو MINIMUM_IP_TARGET. ولذلك، يقتصر الحد الأقصى لعدد الحاويات التي يمكن للعُقدة تشغيلها على عدد ENI في المثيل مضروبًا في عدد عناوين IP لكل ENI، وهو ما يختلف حسب نوع المثيل.
# Check maximum pods supported by an instance type
aws ec2 describe-instance-types \
--instance-types m5.large \
--query 'InstanceTypes[].NetworkInfo.{MaxENIs:MaximumNetworkInterfaces,IPv4sPerENI:Ipv4AddressesPerInterface}'
# Max pods formula: (MaxENIs x (IPv4sPerENI - 1)) + 2
# m5.large: 3 ENIs x (10-1) + 2 = 29 podsمجموعات الأمان للحاويات
افتراضيًا، تشترك جميع الحاويات الموجودة على العُقدة في مجموعة أمان العُقدة. وباستخدام ميزة Security Groups for Pods، يمكنكم تعيين مجموعات أمان فردية لحاويات محددة باستخدام المورد المخصص SecurityGroupPolicy. ويتيح ذلك تحكمًا دقيقًا في الوصول إلى الشبكة — فعلى سبيل المثال، يمكن السماح لحاوية قاعدة البيانات فقط باستقبال حركة المرور على المنفذ 5432 من مجموعة أمان حاوية API. وتتطلب هذه الميزة الإصدار 1.7.7 أو إصدارًا أحدث من VPC CNI، وواجهة trunk ENI على العُقدة.
# Define a SecurityGroupPolicy (custom resource)
apiVersion: vpcresources.k8s.aws/v1beta1
kind: SecurityGroupPolicy
metadata:
name: db-pod-sg-policy
namespace: production
spec:
podSelector:
matchLabels:
role: database
securityGroups:
groupIds:
- sg-0db1234567890abcdأنواع خدمات Kubernetes على EKS
تكشف Services في Kubernetes مجموعة من الحاويات تحت اسم DNS وعنوان IP ثابتين. وعلى EKS، أنواع الخدمات الثلاثة ذات الصلة هي: ClusterIP (للاتصال الداخلي داخل المجموعة فقط)، وNodePort (يفتح منفذًا على كل عُقدة — ونادرًا ما يُستخدم على EKS)، وLoadBalancer (يوفّر موازن تحميل من AWS تلقائيًا). ويُعد نوع LoadBalancer الطريقة التي تُكشَف بها معظم خدمات EKS المتاحة عبر الإنترنت.
# Expose a deployment with a LoadBalancer service
kubectl expose deployment my-api \
--type=LoadBalancer \
--name=my-api-svc \
--port=80 \
--target-port=8080
# Check the assigned AWS load balancer hostname
kubectl get svc my-api-svc -o wideوحدة التحكم AWS Load Balancer Controller
إن AWS Load Balancer Controller وحدة تحكم مفتوحة المصدر في Kubernetes تدير موارد ALB وNLB نيابةً عن مجموعات EKS. وعند إنشاء كائن Kubernetes من النوع Ingress، توفّر وحدة التحكم Application Load Balancer. وعند إنشاء Service من النوع LoadBalancer مع التعليقات التوضيحية الصحيحة، توفّر Network Load Balancer. وتحل وحدة التحكم محل موفّر موازن التحميل القديم المضمّن في Kubernetes.
# Install AWS Load Balancer Controller with Helm
helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
-n kube-system \
--set clusterName=my-cluster \
--set serviceAccount.create=false \
--set serviceAccount.name=aws-load-balancer-controller \
--set region=us-east-1 \
--set vpcId=vpc-0abc1234def567890Ingress في Kubernetes باستخدام ALB
يحدد كائن Kubernetes من النوع Ingress قواعد توجيه HTTP/HTTPS — المستندة إلى المسار والمضيف — إلى داخل مجموعتكم. وتقرأ AWS Load Balancer Controller كائنات Ingress التي تحمل التعليق التوضيحي kubernetes.io/ingress.class: alb، ثم تنشئ Application Load Balancer مطابقًا مع قواعد مستمع مناسبة. وهذا يلغي الحاجة إلى إنشاء ALB ومجموعات أهداف يدويًا لكل خدمة تطبيق.
# Ingress YAML that creates an ALB
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: api-ingress
namespace: production
annotations:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
spec:
rules:
- http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: api-svc
port:
number: 80NLB لأحمال عمل TCP/UDP
عندما يتطلب حمل العمل الخاص بكم TCP أو UDP (وليس HTTP) — مثل خادم ألعاب أو خدمة gRPC أو وكيل قاعدة بيانات — استخدموا NLB بدلًا من ALB. أضيفوا التعليقين التوضيحيين التاليين إلى خدمة Kubernetes: service.beta.kubernetes.io/aws-load-balancer-type: 'external' وservice.beta.kubernetes.io/aws-load-balancer-nlb-target-type: 'ip'. وستوفّر وحدة التحكم NLB مع استخدام عناوين IP الخاصة بالحاويات كأهداف مباشرة، متجاوزةً إعادة توجيه المنافذ على مستوى العُقد لتقليل زمن الاستجابة.
# Service YAML that creates an NLB with IP targets
apiVersion: v1
kind: Service
metadata:
name: grpc-svc
namespace: production
annotations:
service.beta.kubernetes.io/aws-load-balancer-type: 'external'
service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: 'ip'
service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
spec:
type: LoadBalancer
selector:
app: grpc-server
ports:
- port: 50051
targetPort: 50051
protocol: TCPحل DNS داخل المجموعة
تشغّل EKS CoreDNS بوصفه موفّر DNS للمجموعة. وتحصل كل خدمة على اسم DNS بالتنسيق service-name.namespace.svc.cluster.local، ويُحل هذا الاسم إلى ClusterIP الخاص بالخدمة. ويمكن أيضًا اكتشاف الحاويات عبر DNS. ويُنشر CoreDNS باعتباره Deployment (وليس DaemonSet)، وينبغي زيادة عدد نسخه استنادًا إلى حجم المجموعة. وتدير EKS CoreDNS باعتباره إضافة، مما يتيح ترقية الإصدارات تلقائيًا.
# Verify DNS resolution from within a pod
kubectl run dns-test --image=busybox --rm -it --restart=Never -- \
nslookup kubernetes.default.svc.cluster.local
# Expected output: Name: kubernetes.default.svc.cluster.local
# Address: 10.100.0.1 (ClusterIP of the kubernetes service)سياسات الشبكة في EKS
تحدد كائنات NetworkPolicy في Kubernetes قواعد السماح لحركة المرور بين الحاويات وحركة المرور من الحاويات إلى الخارج. وافتراضيًا، يمكن لجميع الحاويات في المجموعة التواصل بحرية. ولتطبيق شبكات انعدام الثقة، يمكنكم تثبيت وحدة تحكم سياسات الشبكة في Amazon VPC CNI (المتاحة منذ VPC CNI v1.14). وتُقيَّم سياسات الشبكة على مستوى نواة Linux باستخدام eBPF، مما يوفر تطبيقًا عالي الأداء دون شبكة تراكبية.
# NetworkPolicy: allow traffic to api pods only from frontend pods
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: api-allow-frontend
namespace: production
spec:
podSelector:
matchLabels:
role: api
ingress:
- from:
- podSelector:
matchLabels:
role: frontend
ports:
- protocol: TCP
port: 8080نصائح لاستكشاف أخطاء VPC CNI وإصلاحها
تشمل مشكلات شبكات EKS الشائعة نفاد عناوين IP (ويُعالج ذلك بتمكين تفويض البادئة أو إضافة شبكات فرعية أكبر)، وتعليق الحاويات في حالة Pending بسبب عدم توفر عناوين IP ثانوية على العُقدة، وأعطال متقطعة في تحليل DNS ناتجة عن عدم كفاية عدد نسخ CoreDNS. استخدموا kubectl describe pod للتحقق من الأحداث، وkubectl describe node لعرض أعداد عناوين IP المخصصة، وCloudWatch Container Insights لمراقبة معدلات أخطاء DNS على مستوى المجموعة.
# Enable prefix delegation to increase pod density per node
kubectl set env daemonset aws-node \
-n kube-system \
ENABLE_PREFIX_DELEGATION=true \
WARM_PREFIX_TARGET=1
# Check current IP usage on a node
kubectl describe node ip-10-0-1-100.ec2.internal | grep -A5 'Allocatable'تحقق سريع
اختبروا مدى فهمكم لمفاهيم AWS Solutions Architect (SAA-C03) الواردة في هذا الدرس.
مراجعة الدرس
تعلمتم في هذا الدرس أن Amazon VPC CNI plugin يعيّن عناوين IP أصلية من VPC لكل حاوية لتحقيق تكامل سلس مع VPC، وأن AWS Load Balancer Controller يوفّر ALB لخدمات HTTP Ingress وNLB لخدمات TCP/UDP، وأن Security Groups for Pods تتيح التحكم في الوصول إلى الشبكة على مستوى الحاوية. بعد ذلك، سنستكشف IRSA لربط أدوار IAM دقيقة بحسابات خدمة Kubernetes.
الأسئلة الشائعة
هل درس «شبكات EKS: VPC CNI وموازنة التحميل» مجاني؟
نعم — نص درس «شبكات EKS: VPC CNI وموازنة التحميل» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة AWS Solutions Architect، انتقل إلى CoddyKit PRO. تتضمن دورة AWS Solutions Architect 4 دروس في المجموع.
ماذا ستتعلم في «شبكات EKS: VPC CNI وموازنة التحميل»؟
استخدم المكوّن الإضافي Amazon VPC CNI لمنح الحُزم عناوين IP أصلية من VPC، واعرض الخدمات باستخدام AWS Load Balancer Controller تتمرن على AWS Solutions Architect مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ AWS Solutions Architect؟
لا تُشترط خبرة سابقة. AWS Solutions Architect على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «شبكات EKS: VPC CNI وموازنة التحميل»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس AWS Solutions Architect هذا؟
نعم. كل درس في AWS Solutions Architect يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- مستوى التحكم وعُقد العمال في EKS
- ملفات تعريف Fargate للحُزم دون خوادم
- شبكات EKS: VPC CNI وموازنة التحميل
- أدوار IAM لحسابات الخدمة (IRSA)