كيفية الوصول إلى تطبيقات Kubernetes البعيدة باستخدام إعادة توجيه منفذ Kubectl

كيفية الوصول إلى تطبيقات Kubernetes البعيدة باستخدام إعادة توجيه منفذ Kubectl

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

تم دمج إعادة توجيه المنفذ في Kubectl. يمكن لـ CLI بدء جلسات الأنفاق التي تعيد توجيه حركة المرور على المنافذ المحلية إلى Pods في مجموعة Kubernetes الخاصة بك. طريقة الإعداد على النحو التالي.

كيف يعمل ميناء الشحن

إعادة توجيه المنفذ هو نوع من قواعد ترجمة عنوان الشبكة (NAT) التي توجه حركة المرور من شبكة إلى أخرى. في سياق Kubernetes ، الطلبات التي يبدو أنه تم إنهاؤها بواسطة localhost ستتم إعادة توجيهك إلى الشبكة الداخلية للمجموعة.

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

باستخدام هذه التقنية ، يمكنك الوصول إلى أحمال عمل Kubernetes الخاصة التي لم يتم الكشف عنها بواسطة NodePort أو Ingress أو LoadBalancer. يمكن إرسال حركة المرور المحلية مباشرة إلى المجموعة ، مما يلغي الحاجة إلى إنشاء خدمات Kubernetes لأحمال العمل الداخلية. هذا يمكن أن يقلل من سطح الهجوم الخاص بك.

نشر تطبيق العينة

الآن دعنا نرى إعادة توجيه منفذ Kubernetes قيد التنفيذ. ابدأ بإنشاء نشر أساسي يستخدم إعادة توجيه المنفذ للاتصال في القسم التالي.

أنا أستخدم حجرة قاعدة بيانات MySQL كمثال حقيقي على متى يجب عليك استخدام هذه التقنية. نظرًا لأن قواعد البيانات لا يتم عرضها للجمهور عادةً ، غالبًا ما يستخدم مسؤولو Kubernetes إعادة توجيه المنفذ لفتح الاتصالات المباشرة.

قم بإنشاء ملف YAML للنشر.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - image: mysql:8.0
        name: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: mysql

تأكد من تغيير قيمة MYSQL_ROOT_PASSWORD قم بتغيير متغيرات البيئة قبل استخدام هذا البيان في الإنتاج.يجري kubectl apply لإنشاء نشر MySQL:

$ kubectl apply -f mysql.yaml
deployment.apps/mysql created

ثم استخدام get pods أمر لتأكيد أن عبء العمل بدأ بنجاح:

$ kubectl get pods
NAME                     READY   STATUS    RESTARTS   AGE
mysql-5f54dd5789-t5fzc   1/1     Running   0          2s

استخدم Kubectl لإعادة التوجيه إلى Kubernetes

تعمل MySQL حاليًا في كتلة ، لكن لا توجد طريقة للوصول إليها خارجيًا.بعد ذلك ، قم بإعداد جلسة إعادة توجيه المنفذ حتى تتمكن من استخدام الأدوات المثبتة محليًا mysql CLI للاتصال بقاعدة البيانات.

إليك مثال بسيط:

$ kubectl port-forward deployment/mysql 33060:3306
Forwarding from 127.0.0.1:33060 -> 3306
Forwarding from [::1]:33060 -> 3306

تتم إعادة توجيه الاتصالات بالمنفذ 33060 إلى المنفذ 3306 لأجهزة Pods التي تشغل عمليات نشر MySQL. يمكنك الآن بدء جلسة MySQL shell في Kubernetes تستهدف قاعدة بياناتك.

$ mysql --host 127.0.0.1 --port 33060 -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.29 MySQL Community Server - GPL

استمر في تشغيل نافذة القشرة kubectl port-forward افتح الأمر أثناء جلسة التصحيح. ينتهي إعادة توجيه المنفذ عند الضغط على Ctrl + C أو إغلاق النافذة.

تغيير أرقام المنافذ المحلية والبعيدة

بناء جملة ربط رقم المنفذ هو: local:remote. من 33060:3306 المثال أعلاه يعين المنفذ 33060 localhost إلى 3306 على جراب الهدف.

يتم تفسير رقم واحد بدون نقطتين على أنه منفذ محلي ومنفذ بعيد.

$ kubectl port-forward deployment/mysql 3306

بدلاً من ذلك ، يمكنك ترك المنفذ المحلي فارغًا وتعيين منفذ عشوائي تلقائيًا.

$ kubectl port-forward deployment/mysql :3306
Forwarding from 127.0.0.1:34923 -> 3306
Forwarding from [::1]:34923 -> 3306

هنا نستخدم رقم منفذ عشوائيًا 34923 في عميل MySQL المحلي لديك.

تغيير عنوان الاستماع

Kubectl هو 127.0.0.1 (IPv4) و ::1 (IPv6) بشكل افتراضي. بدلاً من ذلك ، يمكنك تحديد مجموعة عناوين IP الخاصة بك. --address أعلام وقت التشغيل port-forward تعليمات:

# Listen on two IPv4 addresses
$ kubectl port-forward deployment/mysql :3306 --address 127.0.0.1,192.168.0.1

يقبل العلم فقط عناوين IP ، localhost كلمة رئيسية. يتم تفسير هذا الأخير على أنه يشمل. 127.0.0.1 متي ::1، إذا كان يطابق الأمر الافتراضي --address تم حذفه.

ملخص

يعد إعادة توجيه المنفذ أسلوبًا مناسبًا للوصول إلى التطبيقات الخاصة داخل مجموعة Kubernetes. تقوم Kubectl بتوجيه حركة المرور من شبكتك المحلية إلى منفذ معين على Pod معين. هذه آلية منخفضة المستوى نسبيًا يمكنها التعامل مع اتصالات TCP التعسفية. إعادة توجيه منفذ UDP غير مدعوم حتى الآن.

يعد استخدام جلسة إعادة توجيه منفذ مخصصة طريقة آمنة لتصحيح أخطاء أعباء العمل التي لا تحتاج إلى كشفها خارجيًا. قد يسمح إنشاء خدمة لكل عملية نشر جديدة للمتطفلين والمهاجمين باكتشاف نقاط النهاية المحمية. يتيح لك إعادة توجيه منفذ Kubectl الاتصال بأمان مباشرة بالتطبيق الخاص بك دون تحديد العقدة التي يعمل عليها.