كيفية إنشاء بوابة API باستخدام Ambassador على Kubernetes

بوابة API باستخدام السفير على Kubernetes

تعد واجهة برمجة التطبيقات (API Gateway) جانبًا مهمًا في نشر Kubernetes لخدماتك. تعمل كنقطة دخول واحدة ويمكن أن تساعد في تبسيط الكثير من المهام مثل اكتشاف الخدمة والتتبع الموزع والتوجيه والحد من الأسعار. يمكن أن توفر مرونة كبيرة وتكوين أفضل لخدماتك.

Envoy هي إحدى بوابات واجهة برمجة التطبيقات الشائعة جدًا المتوفرة حاليًا والتي يمكنها التعامل مع الأحمال الكبيرة. مع Kubernetes ، يعد السفير الطريقة الأكثر شعبية وفعالية لاستخدام Envoy.

اليوم ، سوف أطلعك على الخطوات التفصيلية لنشر السفير على مجموعة Kubernetes التي نشرناها في مشاركتي السابقة ، وقم بتهيئتها لاستخدام موازن التحميل AWS لحركة المرور الواردة وتوجيهها إلى خدمات متنوعة وفقًا للقواعد.

تم نشر هذا المنشور في الأصل على مدونتي https://krish512.com/create-api-gateway-amb Ambassador-kubernetes/

المتطلبات الأساسية

قبل أن تبدأ هذا الدليل ، ستحتاج إلى ما يلي:

  • كتلة Kubernetes حسب مشاركتي السابقة
  • شهادة SSL باستخدام ACM للنطاق
  • جهاز Linux كخادم نشر ، ويفضل أن يكون Ubuntu 16.04 أو أحدث

الخطوة 1 - نشر السفير على Kubernetes العنقودية

إن عملية نشر Ambassador أسهل في Kubernetes حيث أن تكوين YAML متاح بسهولة على موقع Ambassador. إذا كنت قد أشرت إلى مقالتي السابقة حول إنشاء كتلة Kubernetes على AWS فأنت بالفعل RBAC ممكن.

راجع الوثائق الرسمية للسفير في حالة عدم تمكين RBAC أو أي مشاكل مع الأمر أعلاه.

قم بتسجيل الدخول إلى خادم النشر الخاص بك وقم بتنفيذ الأمر kubectl التالي ،

تطبيق kubectl -f https://getamb Ambassador.io/yaml/ambvoy/amb Ambassador-rbac.yaml

يمكنك أيضا استخدام هيلم لنشر السفير.

أولاً قم بإضافة الريم هيلم كما احتفظ به Datawire (فريق السفير)

$ helm repo add datawire https://www.getambvoy.io

الآن نشر السفير مع هيلم ،

$ هيلم الترقية ، تثبيت ، انتظار السفير datawire / السفير

سيستغرق ذلك بعض الوقت وينشئ عملية نشر السفير والقرون في مساحة الاسم الافتراضية. تحقق مما إذا تم إنشاء القرون باستخدام الأمر التالي ،

kubectl $ الحصول على القرون

توقع الإخراج التالي

اسم جاهز الوضع الحالي المطاعم
Ambassador-6dfd64dd49-dgmcf 2/2 الجري 0 1 د
Ambassador-6dfd64dd49-mz5bf 2/2 الجري 0 1 د
Ambassador-6dfd64dd49-xd6g4 2/2 الجري 0 1 د

إذا كان بإمكانك مشاهدة 3 قرون "أمباسادور" قيد التشغيل ، يمكنك إعداد "السفير" بنجاح. دعنا ننتقل إلى الخطوة التالية حيث سننشئ نقطة نهاية موازن التحميل لفضح بوابة API الخاصة بنا.

الخطوة 2 - إنشاء خدمة السفير و Loadbalancer

يجب توجيه كل حركة المرور الواردة إلى خدمات Kubernetes من خلال API Gateway Ambassador الخاصة بنا.

يستخدم Ambassador موازن التحميل من AWS لاستقبال كل حركة المرور وتوجيههم إلى خدمة Ambassador لتتمكن من تطبيق القواعد وتوجيههم إلى الخدمات التي تم تكوينها.

قبل إنشاء موازن التحميل الخاص بنا ، دعونا نحصل على شهادة HTTPS جاهزة باستخدام خدمة AWS ACM لنطاقنا krish512.com والمجال الثانوي * .dev.krish512.com. يمكنك إضافة ما يصل إلى 8 مجالات ثانوية وفقًا لمتطلباتك.

دعونا الآن إنشاء خدمة للسفير. قم بإنشاء ملف باسم Ambassador-service.yaml

مسة سفير - خدمة

الآن باستخدام VIM أو nano Editor ، افتح الملف وأدخل محتوى yaml التالي ،

apiVersion: v1
النوع: الخدمة
البيانات الوصفية:
  تسميات:
  الخدمة: السفير
    الاسم: السفير
  الشروح:
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: "arn: aws: acm: ap-south-1: 123403005789: certificate / 1a2b3c54-b001-12fg-9h33-f98f7f65432d"
    service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "443"
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: "http"
    service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled: "true"
    service.beta.kubernetes.io/aws-load-balancer-proxy-protocol: "*"
    service.beta.kubernetes.io/aws-load-balancer-extra-security-groups: "sg-01a889992221b2cde"
    getamb Ambassador.io/config: |
      ---
      apiVersion: السفير / v1
      النوع: وحدة
      الاسم: tls
      التكوين:
        الخادم:
          تمكين: صحيح
          redirect_cleartext_from: 80
المواصفات:
  loadBalancerSourceRanges:
  - 0.0.0.0/0
  النوع: LoadBalancer
  الموانئ:
  - الاسم: السفير المتشعب
    الميناء: 80
    الهدف المنفذ: 80
  - الاسم: السفير HTTPS
    الميناء: 443
    الهدف المنفذ: 80
  محدد:
    الخدمة: السفير

في yaml أعلاه ، يحدد قسم التعليقات التوضيحية تفاصيل موازن التحميل لدينا. نظرًا لأن AWS ALB غير مدعوم في Kubernetes حاليًا ، سيؤدي ذلك إلى إنشاء موازن تحميل كلاسيكي لـ Ambassador.

  • قيمة قيمة service.beta.kubernetes.io/aws-loadbalancer-ssl-cert هي ARN لشهادتنا من AWS ACM
  • توضح قيمة service.beta.kubernetes.io/aws-loadbalancer-ssl-ports منفذ HTTPS الخاص بنا لموازنة التحميل
  • مفتاح service.beta.kubernetes.io/aws-loadbalancer-extra-security-groups اختياري ويسمح لنا بإضافة قواعد إضافية لمجموعة الأمان وإرفاقها بموازن التحميل الخاص بنا عن طريق تحديد معرف مجموعة الأمان كقيمة لها.

في قسم المواصفات ، يعد loadBalancerSourceRanges مرة أخرى مفتاحًا اختياريًا يستخدم لتقييد الوصول إلى موازن التحميل باستخدام مجموعة الأمان الافتراضية الخاصة به. لقد أبقيناها مفتوحة ، وهذا فقط لغرض التظاهر. يمكنك إزالة هذا الحقل أو تغيير القيمة وفقًا لمتطلباتك.

دعنا ننشئ الخدمة الآن

kubectl $ تطبق -f Ambassador-service.yaml

سيؤدي هذا إلى إنشاء خدمة على الفور والبدء في إنشاء موازن التحميل في وحدة التحكم AWS EC2.

لتجنب تحديد تعيين DNS لكل مجال فرعي ، أشر إلى * .dev.krish512.com إلى موازن التحميل هذا في خدمة AWS Route53.

الخطوة 3 - نشر الخدمات والطريق باستخدام Ambassador

لاختبار إعداد Ambassador وميزاته ، سنقوم بنشر خدمتين على Kubernetes وتوجيه حركة المرور إليهم عبر Ambassador باستخدام التعليقات التوضيحية.

دعونا أولاً إنشاء مساحة اسم تطوير لخدماتنا الجديدة.

{
  "النوع": "مساحة الاسم" ،
  "apiVersion": "v1" ،
  "البيانات الوصفية": {
    "الاسم": "التنمية" ،
    "تسميات": {
      "الاسم": "التنمية"
    }
  }
}

احفظ json أعلاه كـ development-namespace.json وقم بتنفيذ الأمر kubectl التالي لإنشاء مساحة الاسم

kubectl $ إنشاء -f التنمية- namespace.json

الآن ، فلنقم بإنشاء ملف httpd pod باستخدام نشر وعرضه على السفير باستخدام خدمة.

---
apiVersion: v1
النوع: الخدمة
البيانات الوصفية:
  الاسم: httpd الخدمة
  مساحة الاسم: التنمية
  الشروح:
    getamb Ambassador.io/config: |
      ---
      apiVersion: السفير / v1
      النوع: رسم الخرائط
      الاسم: httpd-service_mapping
      المضيف: service1.dev.krish512.com
      اختصار: /
      الخدمة: httpd-service.development: 80
المواصفات:
  محدد:
    التطبيق: httpd
    البيئة: التنمية
    الدور: الويب
  الموانئ:
  - البروتوكول: TCP
    الميناء: 80
---
apiVersion: ملحقات / v1beta1
النوع: النشر
البيانات الوصفية:
  الاسم: httpd
  مساحة الاسم: التنمية
المواصفات:
  النسخ المتماثلة: 1
  إستراتيجية:
    النوع: RollingUpdate
  قالب:
    البيانات الوصفية:
      تسميات:
        التطبيق: httpd
        البيئة: التنمية
        الدور: الويب
    المواصفات:
      حاويات:
      - الاسم: httpd
        الصورة: "httpd"
        الموانئ:
        - حاوية المنفذ: 80

احفظ yaml أعلاه كـ httpd.yaml.

في yaml أعلاه ، أنشأنا تعليق توضيحي getambvoy.io/config يُستخدم لتكوين السفير. يمكن تكوين هذه التعليقات التوضيحية في خدمة Ambassador إذا كنت ترغب في إدارتها مركزيًا.

في هذا التعليق التوضيحي ، قمنا بتعيين تكوين السفير إلى إحدى الخدمات وحددنا الاسم كـ httpd-service_mapping.

لأغراض التوجيه ، طلبنا من السفير توجيه جميع الطلبات القادمة للمضيف service1.dev.krish512.com باستخدام المسار الأساسي / لخدمة httpd-service.development: 80 حيث httpd-service هو اسم الخدمة ، والتنمية هي مساحة الاسم و 80 هي ميناء يتعرض للخدمة.

دعونا ننشئ خدمة httpd هذه في Kubernetes من خلال الأمر kubectl التالي ،

تطبيق kubectl $ -f httpd.yaml

يجب أن يستغرق هذا دقيقة لإنشاء الحافظة لنشرنا وتكون متاحة. تحقق مما إذا كان الملف متاحًا باستخدام ما يلي ،

kubectl $ الحصول على القرون -N التنمية

تتوقع الإخراج التالي ،

اسم جاهز الوضع الحالي المطاعم
httpd-56ddd7c88b-ddksp 1/1 الركض 0 28 متر

انتقل الآن إلى متصفحك ، وأدخل عنوان url https://service1.dev.krish512.com ، ومن المفترض أن تتمكن من رؤية الإخراج على النحو التالي

Httpd الصفحة الافتراضية لخادم الويب

وبالمثل ، فلنقم بإنشاء Nginx pod باستخدام نشر وعرضه على السفير باستخدام خدمة باسم ،

---
apiVersion: v1
النوع: الخدمة
البيانات الوصفية:
  الاسم: nginx الخدمة
  مساحة الاسم: التنمية
  الشروح:
    getamb Ambassador.io/config: |
      ---
      apiVersion: السفير / v1
      النوع: رسم الخرائط
      الاسم: nginx-service_mapping
      المضيف: service2.dev.krish512.com
      بادئة: / nginx
      الخدمة: nginx-service.development: 80
المواصفات:
  محدد:
    التطبيق: nginx
    البيئة: التنمية
    الدور: الويب
  الموانئ:
  - البروتوكول: TCP
    الميناء: 80
---
apiVersion: ملحقات / v1beta1
النوع: النشر
البيانات الوصفية:
  الاسم: nginx
  مساحة الاسم: التنمية
المواصفات:
  النسخ المتماثلة: 1
  إستراتيجية:
    النوع: RollingUpdate
  قالب:
    البيانات الوصفية:
      تسميات:
        التطبيق: nginx
        البيئة: التنمية
        الدور: الويب
    المواصفات:
      حاويات:
      - الاسم: nginx
        الصورة: "nginx"
        الموانئ:
        - حاوية المنفذ: 80

احفظ yaml أعلاه كـ nginx.yaml وتنفيذه ،

تطبيق kubectl $ -f nginx.yaml

هذا ينبغي أن يستغرق دقيقة واحدة لإنشاء قرنة. تحقق مما إذا تم إنشاء pod بنجاح باستخدام ما يلي ،

kubectl $ الحصول على القرون -N التنمية

تتوقع الإخراج التالي ،

اسم جاهز الوضع الحالي المطاعم
httpd-56ddd7c88b-ddksp 1/1 الركض 0 10 م
nginx-6455785f94-z992f 1/1 الجري 0 1 متر

في هذا yaml ، أشرنا إلى service2.dev.krish512.com للنطاق مع route / nginx إلى خدمة Nginx.

في متصفحك ، جرِّب الرابط https://service2.dev.krish512.com/nginx ونتوقع الشاشة التالية ،

الصفحة الافتراضية لخادم الويب Nginx

جرِّب إضافة المزيد من القرون وعرضها باستخدام الخدمة مع تعليقات السفراء لتتمكن من توجيهها وإدارتها. الرجوع وثائق السفير لمزيد من خيارات التكوين.

خطوات إضافية

السفير لديه واجهة المستخدم التشخيصية التي يمكن استخدامها لأغراض التصحيح والتشخيص. يعرض كل جراب Ambassador واجهة المستخدم هذه في المنفذ 8877. يمكننا إنشاء خدمة لفضح واجهة المستخدم هذه قيد التشغيل في المنفذ 8877 من الجراب ، ويمكن تعيينها إلى domain Ambassador.dev.krish512.com

لنقم بإنشاء خدمة لفضح واجهة المستخدم التشخيصية على النحو التالي:

---
apiVersion: v1
النوع: الخدمة
البيانات الوصفية:
  الاسم: السفير التشخيصي
  الشروح:
    getamb Ambassador.io/config: |
      ---
      apiVersion: السفير / v1
      النوع: رسم الخرائط
      الاسم: السفير التشخيص
      المضيف: Ambassador.dev.krish512.com
      timeout_ms: 30000
      اختصار: /
      الخدمة: السفير التشخيص: 8877
المواصفات:
  محدد:
    الخدمة: السفير
  الموانئ:
  - البروتوكول: TCP
    الميناء: 8877

الآن فقط قم بزيارة https://amb Ambassador.dev.krish512.com/ وستتمكن من رؤية شيء مثل واجهة المستخدم هذه:

استنتاج

أنشأنا بوابة API لخدماتنا المستضافة في Kubernetes. باستخدام هذا ، يمكننا توجيه حركة المرور إلى خدمة معينة بناءً على رؤوس الطلبات مثل اسم المضيف أو URI ، وما إلى ذلك. سنستخدم هذا في المستقبل لفضح المزيد من الخدمات عبر بوابة Ambassador API الخاصة بنا.

انضم إلى مجتمعنا Slack وقراءة موضوعات Faun الأسبوعية الخاصة بنا ⬇

إذا كانت هذه المشاركة مفيدة ، فالرجاء النقر على زر التصفيق أدناه عدة مرات لإظهار دعمك للمؤلف! ⬇