انتقل إلى المحتوى

نشر NGINX Ingress Controller مع خدمات Wallarm المدمجة

توفر هذه التعليمات البرمجية الخطوات لنشر متحكم الوصول (ingress) NGINX-المستند إلى Wallarm في تجمع K8s. تشمل الحلول الوظيفة الافتراضية لـCommunity Ingress NGINX Controller مع خدمات Wallarm المدمجة.

هذه الحلول تتضمن الهندسة المعمارية التالية:

Solution architecture

الحل مُنشر من خلال الرسم البياني لـHelm الخاص بـ Wallarm.

حالات الاستخدام

من بين جميع خيارات نشر Wallarm المدعومة، يُفضل هذا الحل للحالات التالية:

  • لا يوجد متحكم الوصول وطبقة الأمان التي توجه الحركة إلى موارد الوصول المتوافقة مع Community Ingress NGINX Controller.

  • أنت تستخدم حاليا Community Ingress NGINX Controller وتبحث عن حل أمان يقدم كل من وظائف المتحكم القياسية وميزات الأمان المحسنة. في هذه الحالة، يمكنك الانتقال بسهولة إلى متحكم الوصول Wallarm-NGINX المفصل في هذه التعليمات. ببساطة، قم بترحيل التكوين الحالي الخاص بك إلى نشر جديد لإكمال التبديل.

    في حالة الاستخدام المتزامن لكل من متحكم الوصول الحالي والمتحكم Wallarm، راجع دليل سلسلة متحكم الوصول للحصول على تفاصيل التكوين.

المتطلبات

  • Kubernetes platform version 1.26-1.30

  • Helm package manager

  • Compatibility of your services with the Community Ingress NGINX Controller version 1.11.5

  • Access to the account with the Administrator role in Wallarm Console for the US Cloud or EU Cloud

  • Access to https://us1.api.wallarm.com for working with US Wallarm Cloud or to https://api.wallarm.com for working with EU Wallarm Cloud

  • Access to https://charts.wallarm.com to add the Wallarm Helm charts. Ensure the access is not blocked by a firewall

  • Access to the Wallarm repositories on Docker Hub https://hub.docker.com/r/wallarm. Make sure the access is not blocked by a firewall

  • Access to the IP addresses below for downloading updates to attack detection rules and [API specifications][api-spec-enforcement-docs], as well as retrieving precise IPs for your allowlisted, denylisted, or graylisted countries, regions, or data centers

    34.96.64.17
    34.110.183.149
    35.235.66.155
    34.102.90.100
    34.94.156.115
    35.235.115.105
    
    34.160.38.183
    34.144.227.90
    34.90.110.226
    

القيود المعروفة

  • العمل بدون وحدة postanalytics غير مدعوم.

  • قد يؤدي التقليل من وحدة postanalytics إلى فقدان جزئي لبيانات الهجوم.

التثبيت

  1. تثبيت المتحكم Wallarm Ingress.

  2. تمكين تحليل الحركة لـ Ingress الخاصة بك.

  3. التحقق من عملية المتحكم Wallarm Ingress.

الخطوة 1: تثبيت Wallarm Ingress Controller

لتثبيت Wallarm Ingress Controller:

  1. أنشئ رمز عقدة تصفية من النوع المناسب:

    1. افتح Wallarm Console → الإعداداترموز API في السحابة الأمريكية أو السحابة الأوروبية.
    2. البحث أو الإنشاء رمز API بدور المصدر Deploy.
    3. نسخ هذا الرمز.
    1. افتح Wallarm Console → العقد في إما السحابة الأمريكية أو السحابة الأوروبية.
    2. إنشاء عقدة تصفية بنوع عقدة Wallarm ونسخ الرمز المُنتج.

      إنشاء عقدة Wallarm

  2. قم بإنشاء مساحة الأسماء Kubernetes لنشر الرسم البياني Helm مع المتحكم Wallarm Ingress:

    kubectl create namespace <KUBERNETES_NAMESPACE>
    
  3. أضف مستودع الرسم البياني Wallarm:

    helm repo add wallarm https://charts.wallarm.com
    
  4. أنشاء الملف values.yaml مع تكوين Wallarm. مثال على الملف بالتكوين الأدنى أدناه.

    عند استخدام رمز API، حدد اسم مجموعة العقدة في المعلمة nodeGroup. سيتم تعيين عقدتك إلى هذه المجموعة، والتي تظهر في قسم العقد Nodes في Wallarm Console. اسم المجموعة الافتراضي هو defaultIngressGroup.

    controller:
      wallarm:
        enabled: "true"
        token: "<NODE_TOKEN>"
        apiHost: "us1.api.wallarm.com"
        # nodeGroup: defaultIngressGroup
    
    controller:
      wallarm:
        enabled: "true"
        token: "<NODE_TOKEN>"
        # nodeGroup: defaultIngressGroup
    

    يمكنك أيضا تخزين رمز العقدة Wallarm في أسرار Kubernetes وسحبها إلى الرسم البياني Helm. اقرأ المزيد

    النشر من التسجيلات الخاصة بك

    يمكنك الكتابة فوق عناصر ملف values.yaml لتثبيت المتحكم Wallarm Ingress من الصور المخزنة في تسجيلاتك الخاصة.

  5. تثبيت حزم Wallarm:

    helm install --version 4.10.4 <RELEASE_NAME> wallarm/wallarm-ingress -n <KUBERNETES_NAMESPACE> -f <PATH_TO_VALUES>
    
    • <RELEASE_NAME> هو اسم الإصدار Helm للمتحكم الرسم البياني لـ Ingress
    • <KUBERNETES_NAMESPACE> هو مساحة أسماء Kubernetes التي أنشأتها للمتحكم الرسم البياني لـ Wallarm Ingress
    • <PATH_TO_VALUES> هو المسار إلى الملف values.yaml

الخطوة 2: تمكين تحليل الحركة لـ Ingress الخاصة بك

kubectl annotate ingress <YOUR_INGRESS_NAME> -n <YOUR_INGRESS_NAMESPACE> nginx.ingress.kubernetes.io/wallarm-mode=monitoring
kubectl annotate ingress <YOUR_INGRESS_NAME> -n <YOUR_INGRESS_NAMESPACE> nginx.ingress.kubernetes.io/wallarm-application="<APPLICATION_ID>"
  • <YOUR_INGRESS_NAME> هو اسم Ingress الخاص بك

  • <YOUR_INGRESS_NAMESPACE> هو مكان أسماء Ingress الخاص بك

  • <APPLICATION_ID> هو عدد موجب فريد لكل تطبيقاتك أو مجموعات التطبيقات. سيتيح لك هذا الحصول على إحصائيات منفصلة والتمييز بين الهجمات المستهدفة للتطبيقات المقابلة

الخطوة 3: التحقق من عملية Wallarm Ingress Controller

  1. الحصول على قائمة الأقدام:

    kubectl get pods -n <NAMESPACE> -l app.kubernetes.io/name=wallarm-ingress
    

    يجب على كل أقدام عرض الاتي: STATUS: Running و READY: N/N. على سبيل المثال:

    NAME                                                              READY     STATUS    RESTARTS   AGE
    ingress-controller-nginx-ingress-controller-675c68d46d-cfck8      3/3       Running   0          5m
    ingress-controller-nginx-ingress-controller-wallarm-tarantljj8g   4/4       Running   0          5m
    
  2. ارسال الطلب مع الهجوم الاختباري Path Traversal إلى خدمة Ingress Controller:

    curl http://<INGRESS_CONTROLLER_IP>/etc/passwd
    

    إذا كانت العقدة التصفية تعمل في وضع block، سيتم إرجاع الرمز 403 Forbidden في الرد على الطلب وسيتم عرض الهجوم في Wallarm Console → الهجمات.

نشر ARM64

مع إصدار هيلم Helm لـ NGINX Ingress controller الإصدار 4.8.2، تم تقديم التوافق مع معالج ARM64. في البداية مجهزة لبنىة المعالجات x86، ينطوي النشر على عقد ARM64 على تعديل معلمات الرسم البياني Helm.

في إعدادات ARM64، غالبًا ما تحمل عقد Kubernetes تسمية arm64. لمساعدة المجدول Kubernetes في تخصيص الحمل العملي لـ Wallarm لنوع العقدة المناسب، ارجع إلى هذه التسمية باستخدام nodeSelector، أو tolerations، أو قواعد التوافق في تكوين الرسم البياني Helm الخاص بـ Wallarm.

أدناه مثال على رسم هيلم Helm لـ Wallarm بالنسبة لـ Google Kubernetes Engine (GKE)، الذي يستخدم تسمية kubernetes.io/arch: arm64 للعقد الأصلح. هذا القالب قابل للتعديل للتوافق مع غيرها من الإعدادات السحابية، مع احترام اصناف ARM64 الخاصة بها.

controller:
  nodeSelector:
    kubernetes.io/arch: arm64
  admissionWebhooks:
    nodeSelector:
      kubernetes.io/arch: arm64
    patch:
      nodeSelector:
        kubernetes.io/arch: arm64
  wallarm:
    tarantool:
      nodeSelector:
        kubernetes.io/arch: arm64
    enabled: true
    token: "<NODE_TOKEN>"
    apiHost: "us1.api.wallarm.com" # if using EU Cloud, comment out this line
    # If using an API token, uncomment the following line and specify your node group name
    # nodeGroup: defaultIngressGroup
controller:
  tolerations:
    - key: kubernetes.io/arch
      operator: Equal
      value: arm64
      effect: NoSchedule
  admissionWebhooks:
    patch:
      tolerations:
        - key: kubernetes.io/arch
          operator: Equal
          value: arm64
          effect: NoSchedule
  wallarm:
    tarantool:
      tolerations:
        - key: kubernetes.io/arch
          operator: Equal
          value: arm64
          effect: NoSchedule
    enabled: true
    token: "<NODE_TOKEN>"
    apiHost: "us1.api.wallarm.com" # if using EU Cloud, comment out this line
    # If using an API token, uncomment the following line and specify your node group name
    # nodeGroup: defaultIngressGroup

نشر من التسجيلات الخاصة بك

إذا لم تكن تستطيع سحب الصور Docker من المستودع العام Wallarm بسبب بعض الأسباب، على سبيل المثال بسبب سياسة الأمان الخاصة بشركتك تحد من استخدام أي موارد خارجية، بدلا من ذلك يمكنك:

  1. نسخ هذه الصور إلى سجلك الخاص.

  2. تثبيت Wallarm NGINX-based Ingress controller باستخدامها.

تستخدم الصور Docker التالية بواسطة الرسم البياني Helm لنشر Ingress Controller المبني على NGINX:

لتثبيت Wallarm NGINX-based Ingress controller باستخدام الصور المخزنة في سجلك، تجاوز ملف values.yaml الخاص برسم Wallarm Ingress controller Helm chart:

controller:
  image:
    ## The image and tag for wallarm nginx ingress controller
    ##
    registry: <YOUR_REGISTRY>
    image: wallarm/ingress-controller
    tag: <IMAGE_TAG>
  wallarm:
    helpers:
      ## The image and tag for the helper image
      ##
      image: <YOUR_REGISTRY>/wallarm/node-helpers
      tag: <IMAGE_TAG>

ثم قم بالتثبيت باستخدام values.yaml المعدل الخاص بك.

التعريف

بعد تثبيت والتحقق من Wallarm Ingress controller بنجاح، يمكنك إجراء تكوينات متقدمة للحل مثل:

للعثور على المعلمات المستخدمة للتكوين المتقدم والتعليمات المناسبة، يرجى اتباع الرابط.