كيفية استخدام Gateway API في APISIX Ingress Controller
Yeqi Peng
November 11, 2022
ما هي واجهة برمجة تطبيقات Kubernetes Gateway
Gateway API هي مواصفات أخرى بدأها المجتمع (تديرها sig-network) لمساعدة المستخدمين في تعريض الخدمات في Kubernetes خارج الكتلة، بالإضافة إلى الخدمة الأصلية وIngress.
تدعم Gateway API العديد من بروتوكولات الشبكة الشائعة (مثل HTTP، TCP، UDP) بالإضافة إلى TLS. علاوة على ذلك، تتضمن Gateway API موارد Gateway التي تجعل من الممكن إدارة دورة حياة الوكيل أو البوابة من خلال واجهة برمجة تطبيقات Kubernetes.
لماذا نحتاج إلى Gateway API
مقارنةً بـ Ingress، تمثل Gateway API المجموعة الوظيفية الفائقة لـ Ingress، مع التحسينات التالية:
- موجهة نحو الأدوار: تتكون Gateway من موارد API التي تمثل الأدوار التنظيمية التي تستخدم وتكوين شبكة خدمة Kubernetes.
- تعبيرية: تدعم موارد Gateway API الوظائف الأساسية لأشياء مثل المطابقة بناءً على الرأس، وزن حركة المرور، وغيرها من القدرات التي كانت ممكنة فقط في Ingress من خلال التعليقات التوضيحية المخصصة.
- قابلة للتوسيع: تسمح Gateway API بربط موارد مخصصة في طبقات مختلفة من API، مما يجعل التخصيص الدقيق ممكنًا في الأماكن المناسبة داخل هيكل API.
بالإضافة إلى ذلك، تتضمن المواصفات ميزات مثل قابلية النقل، البوابات المشتركة، والمراجع عبر النطاقات.
كما هو موضح في الرسم البياني، يسمح التصميم الموجه نحو الأدوار بمشاركة البنية التحتية للشبكة داخل الكتلة بين الفرق المختلفة ومشاركة السياسات والقيود التي يحددها مدير الكتلة. هذا يسمح لأنواع مختلفة من الأدوار، مثل مزودي البنية التحتية، مديري الكتلة، ومطوري التطبيقات، بالتركيز على عملهم الخاص وليس على ما يتحملونه من مسؤوليات.
تقوم الأدوار المختلفة بتكوين مستويات مختلفة من موارد Gateway API، وتعمل المستويات المختلفة معًا:
الحالة الحالية لـ Gateway API
حاليًا، مع إصدار Gateway API v0.5.0، تأتي بعض واجهات برمجة التطبيقات الأساسية المهمة إلى Beta لأول مرة، بما في ذلك GatewayClass، Gateway، وHTTPRoute.
كيفية استخدام Gateway API في APISIX Ingress
دعم APISIX Ingress Controller لـ Gateway API قيد التطوير وهو في مرحلة Alpha، ويدعم حاليًا موارد مثل HTTPRoute، TCPRoute.
تثبيت CRD لـ Gateway API
لاستخدام Gateway API، تحتاج أولاً إلى تثبيت CRD لـ Gateway API، إما من خلال نسخة تحت مستودع APISIX Ingress Controller أو المستودع الرسمي kubernetes-sigs/gateway-api. هنا نستخدم نسخة من CRD من مستودع APISIX Ingress Controller كمثال.
نفذ الأمر التالي لتثبيت CRD لـ Gateway API.
git pull git@github.com:apache/apisix-ingress-controller.git
cd apisix-ingress-controller
kubectl apply -f ./samples/deploy/gateway-api/
تثبيت APISIX Ingress Controller
دعم Gateway API غير مفعل بشكل افتراضي في APISIX Ingress Controller ويمكن تفعيله باستخدام المعلمة -enable-gateway-api=true
.
عند التثبيت باستخدام Helm، يمكنك تفعيله عن طريق تكوين القيم.
استخدم الأمر التالي لتثبيت APISIX وAPISIX Ingress Controller.
helm repo add apisix https://charts.apiseven.com
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
kubectl create ns apisix-ingress
helm install apisix apisix/apisix --namespace apisix-ingress \
--set gateway.type=NodePort \
--set ingress-controller.enabled=true \
--set ingress-controller.config.apisix.serviceNamespace=apisix-ingress \
--set ingress-controller.config.kubernetes.enableGatewayAPI=true
لاحظ المعلمة -set ingress-controller.config.kubernetes.enableGatewayAPI=true
التي تُستخدم لتفعيل دعم Gateway API.
ستنشئ هذه الأوامر بيئة اختبار كاملة تحت النطاق apisix-ingress
، بما في ذلك APISIX، etcd وAPISIX Ingress Controller.
نشر حمل الاختبار
استخدم صورة kennethreitz/httpbin
كحمل اختبار.
استخدم الأمر التالي لنشر هذه الأحمال تحت النطاق الافتراضي.
kubectl run httpbin --image kennethreitz/httpbin --port 80
kubectl expose pod httpbin --port 80
تكوين HTTPRoute
حاليًا، يدعم APISIX Ingress Controller الإصدار v1alpha2
من مورد Gateway API.
لأغراض الاختبار، استخدم تكوين HTTPRoute التالي واحفظه في ملف httproute.yaml
:
# httproute.yaml
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: HTTPRoute
metadata:
name: basic-http-route
spec:
hostnames:
- local.httpbin.org
rules:
- backendRefs:
- name: httpbin
port: 80
matches:
- path:
type: PathPrefix
value: /
استخدم الأمر التالي لنشر تكوين HTTPRoute هذا:
kubectl apply -f ./httproute.yaml
التحقق
يمكن التحقق مباشرة في Pod APISIX عن طريق تنفيذ الأمر التالي:
kubectl -n apisix-ingress exec -it $(kubectl -n apisix-ingress get Pods -l "app.kubernetes.io/name=apisix" -o name) -c apisix -- curl -H "Host: local.httpbin.org" localhost:9080/ip
الناتج المتوقع هو:
{
"origin": "127.0.0.1"
}
هذا يشير إلى أن تكويننا قد تم تفعيله بنجاح.
كيف يدعم APISIX Ingress Gateway API
حاليًا، يقوم APISIX Ingress Controller بإضافة دعم لـ Gateway API ويدعم موارد مثل HTTPRoute، TCPRoute، إلخ.
دعم APISIX Ingress Controller لـ Gateway وGateway Class قيد التطوير النشط، لذلك لن يتم تفعيل تكوين هذه الموارد حاليًا.
الخلاصة
في هذه المقالة، قدمنا Gateway API، وهي مواصفات جديدة تمامًا في المجتمع لتعريض الخدمات خارج الكتلة، ووصفنا كيفية استخدامها في APISIX Ingress Controller.
الدعم الكامل لـ Gateway API في APISIX Ingress Controller قيد التطوير النشط.