كيف يعمل Amazon EKS و APISIX Ingress Controller معًا لإدارة حركة المرور المعقدة
API7.ai
February 7, 2021
الخلفية
كمدير مرور، أحيانًا حتى عندما تكون مستعدًا لما هو غير متوقع، يكون من الصعب إيقاف ما هو غير متوقع. بناء بوابة API رباعية الاتجاهات أمر بالغ الأهمية! إليك كيف يمكن لـ Amazon EKS + Ingress APISIX! المساعدة في ذلك اليوم.
مقدمة
Kubernetes هو نظام مفتوح المصدر لأتمتة نشر وتوسيع وإدارة التطبيقات المعتمدة على الحاويات. Amazon Elastic Kubernetes Service (Amazon EKS) كخدمة Kubernetes مُدارة تتيح لك تشغيل أحمال Kubernetes على تقنيات سحابة Amazon دون الحاجة إلى تثبيت أو صيانة مستوى التحكم أو العقد.
Apache APISIX هو بوابة API ديناميكية وفعالة وعالية الأداء. يوفر ميزات غنية لإدارة المرور مثل موازنة الحمل، المصعد الديناميكي، النشر التدريجي، تقسيم المرور، المصادقة والمراقبة. يمكنك استخدام Apache APISIX للتعامل مع المرور الشمالي-الجنوبي بين العملاء التقليديين والخوادم وكذلك المرور الشرقي-الغربي بين الخدمات.
يمكن استخدام Ingress APISIX كوحدة تحكم دخول لـ Kubernetes، مما يقدم أفضل ميزات Apache APISIX إلى Kubernetes. يمكن أن يتم ذلك من خلال مكونات Controller المصممة بشكل جيد لمساعدتك في تلبية احتياجات إدارة المرور المعقدة.
كيفية تكوين وتشغيل Ingress APISIX على Amazon Elastic Kubernetes Service
المتطلبات الأساسية
قبل أن تكون جاهزًا للتشغيل، يرجى تكوين مجموعة Amazon EKS متاحة على تقنيات سحابة Amazon.
يجب أن يكون لديك أداة kubectl في بيئتك الخاصة، وقم بتعيين السياق إلى مجموعة Amazon EKS الخاصة بك عن طريق تشغيل الأمر التالي:
aws eks update-kubeconfig --name --region
بمجرد أن تكون مجموعة Kubernetes جاهزة، قم بإنشاء مساحة اسم تسمى ingress-apisix، حيث سيتم إنشاء جميع الموارد التي سيتم استخدامها.
kubectl create namespace ingress-apisix
سنستخدم Helm لنشر جميع مكونات Ingress APISIX (Apache APISIX و apisix-ingress-controller)، لذا يرجى أيضًا اتباع دليل التثبيت لتثبيت Helm. مخطط Helm لـ Apache APISIX و apisix-ingress-controller موجود في apache/apisix-helm-chart و apache/apisix-ingress-controller، يرجى استنساخ هذه المسارات للحصول على المخططات المقابلة.
تثبيت Apache APISIX
يعمل Apache APISIX كطائرة وكيل لـ apisix-ingress-controller ويجب نشره مسبقًا.
cd /path/to/apisix-helm-chart
helm repo add bitnami https://charts.bitnami.com/bitnami
helm dependency update . /chart/apisix
helm install apisix . /chart/apisix \
--set gateway.type=LoadBalancer \
--set allow.ipList="{0.0.0.0/0}" \
--namespace ingress-apisix
kubectl get service --namespace ingress-apisix
سيؤدي الأمر أعلاه إلى إنشاء موردي خدمة Kubernetes، apisix-gateway، الذي يتعامل مع المرور الحقيقي، و apisix-admin، الذي يعمل كطائرة تحكم ويتعامل مع جميع تغييرات التكوين. هنا نقوم بإنشاء apisix-gateway كنوع خدمة LoadBalancer، والذي يمكن تعريضه للإنترنت بمساعدة Amazon Network Load Balancer. يمكننا العثور على اسم المضيف لموازن الحمل باستخدام الأمر التالي:
kubectl get service apisix-gateway \
--namespace ingress-apisix \
-o jsonpath='{.status.loadBalancer.ingress[].hostname}'
كما يرجى ملاحظة: يجب تخصيص حقل allow.ipList لنطاقات CIDR لـ EKS في مجموعة Amazon EKS الخاصة بنا، بحيث يمكن ترخيص apisix-ingress-controller بواسطة Apache APISIX (لدفع الموارد).
راجع value.yaml لمزيد من المعلومات حول جميع عناصر التكوين إذا كانت هناك أي متطلبات أخرى.
تثبيت apisix-ingress-controller
بعد نشر Apache APISIX بنجاح، حان الوقت لتثبيت مكون Controller.
cd /path/to/apisix-ingress-controller
# تثبيت الموارد الأساسية، مثل ServiceAccount.
helm install ingress-apisix-base -n ingress-apisix . /charts/base
# تثبيت apisix-ingress-controller
helm install ingress-apisix . /charts/ingress-apisix \
--set ingressController.image.tag=dev \
--set ingressController.config.apisix.baseURL=http://apisix-admin:9180/apisix/admin \
--set ingressController.config.apisix.adminKey={YOUR ADMIN KEY} \
--namespace ingress-apisix
سيقوم مخطط ingress-apisix-base بتثبيت بعض التبعيات الأساسية لـ apisix-ingress-controller، مثل ServiceAccount و CRD المخصصة له.
سيقوم مخطط ingress-apisix بإرشادنا خلال تثبيت Controller نفسه، يمكننا تغيير علامة الصورة إلى الإصدار المطلوب ويمكننا تغيير قيمة ingressController.config.apisix.adminKey في الأمر أعلاه، يمكن تعديل هذه التكوينات وفقًا للسيناريوهات الفعلية (وتأكد من أن مفتاح Admin المستخدم هنا هو نفسه المفتاح المستخدم في نشر Apache APISIX). إذا كانت لديك متطلبات أخرى، يمكنك الرجوع إلى value.yaml لمعرفة المزيد عن جميع عناصر التكوين.
ثم حاول فتح وحدة تحكم Amazon EKS، حدد مجموعتك وانقر على علامة التبويب Workloads وسترى أن جميع Pods، etcd و apisix-ingress-controller لـ Apache APISIX جاهزة.
بدء الاختبار
في هذه المرحلة، قمنا بنشر جميع مكونات Ingress APISIX، لذا تأكد من التحقق من أن كل شيء يعمل بشكل صحيح. سنقوم بعد ذلك بنشر خدمة httpbin وطلب من Apache APISIX توجيه جميع الطلبات إلى المضيف "local.httpbin.org" إلى هذه الخدمة.
للقيام بذلك، نحتاج أولاً إلى إنشاء عبء عمل httpbin وتعريضه.
kubectl run httpbin --image kennethreitz/httpbin --port 80
kubectl expose pod httpbin --port 80
من أجل جعل Apache APISIX يقوم بتوجيه الطلبات بشكل صحيح، نحتاج إلى إنشاء مورد ApisixRoute لدفع العملية.
# ar-httpbin.yaml
apiVersion: apisix.apache.org/v1
kind: ApisixRoute
metadata:
name: httpserver-route
spec:
rules:
- host: local.httpbin.org
http:
paths:
- backend:
serviceName: httpbin
servicePort: 80
path: /*
سيسمح مورد ApisixRoute أعلاه لـ Apache APISIX بتوجيه الطلبات ذات رأس المضيف "local.httpbin.org" إلى الخلفية httpbin (التي أنشأناها للتو).
ثم يتم تطبيق هذا الإعداد، ولكن يرجى ملاحظة أن الخدمة ومورد ApisixRoute يجب أن يوضعا في نفس مساحة الاسم، ولا يُسمح لـ apisix-ingress-controller بعبر مساحات الأسماء.
kubectl apply -f ar-httpbin.yaml
اختبر النتائج باستدعاء curl بسيط من أي مكان يمكنه الوصول إلى خدمة Apache APISIX.
$ curl http://{apisix-gateway-ip}:{apisix-gateway-port}/headers -s -H 'Host: local.httpbin.org'
{
"headers": {
"Accept": "*/*",
"Host": "httpbin.org",
"User-Agent": "curl/7.64.1",
"X-Amzn-Trace-Id": "Root=1-5ffc3273-2928e0844e19c9810d1bbd8a"
}
}
إذا كان نوع الخدمة هو ClusterIP، فأنت بحاجة إلى تسجيل الدخول إلى Pod في مجموعة Amazon EKS واستخدام ClusterIP أو Service FQDN للوصول إلى Apache APISIX. إذا كان قد تم تعريضه بالفعل (إما NodePort أو LoadBalancer)، فيمكن الوصول إلى نقطة النهاية الخارجية القابلة للوصول مباشرة.
ملاحظة: تمت إعادة طباعة هذه المقالة من موقع aws WeChat العام.