ترقية نهاية عمر واجهة تحكم NGINX Ingress المتكاملة مع وحدات Wallarm¶
تصف هذه التعليمات الخطوات لترقية Wallarm Ingress Controller المنتهي العمر (الإصدار 3.6 وأدناه) إلى الإصدار الجديد مع Wallarm node 4.10.
Wallarm nodes 3.6 and lower are not supported
You are recommended to upgrade the Wallarm nodes 3.6 and lower since these versions are not supported, they are end-of-life.
Node configuration and traffic filtration have been significantly simplified in the Wallarm node of the latest versions. Before upgrading the modules, please carefully review the list of changes and general recommendations. Please note that some settings of the latest node are incompatible with the nodes 3.6 and lower.
الإصدار المحدث لواجهة تحكم Community Ingress NGINX
إذا كنت تقوم بترقية العقدة من الإصدار 3.4 أو أقل، يرجى ملاحظة أن الإصدار من واجهة تحكم Community Ingress NGINX الذي يعتمد عليه واجهة تحكم Wallarm Ingress قد تم ترقيته من 0.26.2 إلى 1.9.5.
نظرًا لأن عملية واجهة تحكم Community Ingress NGINX 1.9.5 تغيرت بشكل ملحوظ، يجب ضبط التهيئة لتتكيف مع هذه التغييرات أثناء ترقية واجهة تحكم Wallarm Ingress.
تحتوي هذه التعليمات على قائمة إعدادات واجهة تحكم Community Ingress NGINX التي قد تحتاج إلى تغييرها. ومع ذلك، يرجى وضع خطة فردية لنقل التكوين بناءً على ملاحظات الإصدار لواجهة تحكم Community Ingress NGINX.
متطلبات¶
-
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 tohttps://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][ip-lists-docs] countries, regions, or data centers
الخطوة 1: أبلغ Wallarm technical support بالترقية¶
إذا كانت الترقية للعقدة 2.18 أو أقل، فـابلغ دعم فني Wallarm أنك تقوم بتحديث وحدات فرز العقدة إلى 4.10 واطلب تمكين منطق قوائم الأي بي الجديدة لحساب Wallarm الخاص بك.
عند تمكين منطق قوائم الأي بي الجديدة، يرجى فتح Wallarm Console والتأكد من أن القسم قوائم الأي بي متاح.
الخطوة 2: تعطيل وحدة التحقق من التهديد النشط (فقط إذا كانت الترقية للعقدة 2.16 أو أقل)¶
إذا كانت الترقية لـ Wallarm node 2.16 أو أقل، يرجى تعطيل وحدة التحقق من التهديد النشط في Wallarm Console → الثغرات الأمنية → تكوين.
يمكن أن يتسبب تشغيل الوحدة في إيجادات كاذبة أثناء عملية الترقية. يقلل تعطيل الوحدة من هذا المخاطر.
الخطوة 3: حدّث منفذ الواجهة البرمجية للتطبيق API¶
Starting with version 4.0, the filtering node uploads data to the Cloud using the us1.api.wallarm.com:443
(US Cloud) and api.wallarm.com:443
(EU Cloud) API endpoints instead of us1.api.wallarm.com:444
and api.wallarm.com:444
.
If you upgrade the node from the version 3.x or lower and your server with the deployed node has a limited access to the external resources and the access is granted to each resource separately, then after upgrade the synchronization between the filtering node and the Cloud will stop.
To restore the synchronization, in your configuration, change port 444
to 443
for API endpoint for each resource.
الخطوة 4: حدّث مستودع Wallarm Helm¶
أضف مستودع Wallarm Helm الذي يحتوي على جميع إصدارات الرسم البياني باستخدام الأمر أدناه. يرجى استخدام مستودع Helm للعمل التالي مع واجهة تحكم Wallarm Ingress.
الخطوة 5: حدّث التكوين values.yaml
¶
للانتقال إلى واجهة تحكم Wallarm Ingress 4.10، حدّث التكوين التالي المحدد في الملف values.yaml
:
-
التكوين القياسي لواجهة تحكم Community Ingress NGINX
-
تكوين وحدة Wallarm
التكوين القياسي لواجهة تحكم Community Ingress NGINX¶
-
تحقق من ملاحظات الإصدار على واجهة تحكم Community Ingress NGINX 0.27.0 وأعلى وحدد الإعدادات التي يجب تغييرها في الملف
values.yaml
. -
حدّث الإعدادات المحددة في الملف
values.yaml
.
هناك الإعدادات التالية التي يجب على الأرجح تغييرها:
-
تقرير صحيح لعنوان الأي بي العام لمستخدم النهاية إذا تم إرسال الطلبات عبر موزع الحمل قبل إرسالها إلى واجهة تحكم Wallarm Ingress.
-
تكوين IngressClasses. تم ترقية الإصدار من API الكوبرنتيس المستخدم في واجهة التحكم Ingress الجديدة التي تتطلب تكوين IngressClasses عبر المعلمات
.controller.ingressClass
,.controller.ingressClassResource
و.controller.watchIngressWithoutClass
. -
التحقق من بناء جملة Ingress عبر "admission webhook" الآن مُمكَّن بشكل افتراضي.
تعطيل التحقق من بناء الجملة لـ Ingress
يُوصى بتعطيل التحقق من بناء الجملة لـ Ingress فقط إذا كان يفسد استقرار تشغيل أجسام Ingress.
-
تنسيق التسمية. إذا وضع ملف
values.yaml
قواعد تجانس الحمولات، قم بتغيير تنسيق التسمية في هذه القواعد، مثلاً:controller: affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - podAffinityTerm: labelSelector: matchExpressions: - - key: app + - key: app.kubernetes.io/name operator: In values: - waf-ingress - - key: component + - key: app.kubernetes.io/component operator: In values: - - waf-ingress + - controller - - key: release + - key: app.kubernetes.io/instance operator: In values: - waf-ingress-ingress topologyKey: kubernetes.io/hostname weight: 100
تكوين وحدة Wallarm¶
قم بتغيير مجموعة تكوين وحدة Wallarm المضبوطة في ملف values.yaml
كما يلي:
-
إذا كانت الترقية من الإصدار 2.18 أو أقل، قم بـترحيل تكوين قائمة الأي بي. هناك المعلمات التالية المحتمل حذفها من
values.yaml
:نظرًا لأن منطق الجوهر لقوائم الأي بي تغير بشكل كبير في Wallarm node 3.x، يلزم ضبط التكوين المناسب لقائمة الأي بي.
-
تأكد أن السلوك المتوقع للإعدادات المدرجة أدناه يتوافق مع المنطق المتغير لوضعي الترشيح
off
وmonitoring
:- تعليمات
wallarm_mode
- قاعدة الترشيح العامة المكونة في Wallarm Console
- قواعد الترشيح الهدفية نقطة النهاية المكونة في Wallarm Console
إذا لم يتوافق السلوك المتوقع مع منطق وضع الترشيح المتغير، فالرجاء ضبط تعليمات Ingress و الإعدادات الأخرى للتغييرات المطلقة.
- تعليمات
-
التخلص من تكوين الخدمة المراقبة بشكل صريح. في إصدار واجهة تحكم Wallarm Ingress الجديدة، يتم تمكين الخدمة المراقبة بشكل افتراضي ولا تتطلب أي تكوين إضافي.
-
إذا كانت الصفحة
&/usr/share/nginx/html/wallarm_blocked.html
المكونة عبر ConfigMap تعود إلى طلبات محظورة، اضبط تكوينها على التغييرات المطلقة.في إصدار العقدة الجديد، لدى الصفحة العادية للحظر بواسطة Wallarm واجهة مستخدم محدثة بدون شعار و عنوان بريد الكتروني للدعم محدد بشكل افتراضي.
-
إذا كنت قد قمت بتخصيص كشف الهجوم
overlimit_res
من خلال توجيهات NGINXwallarm_process_time_limit
وwallarm_process_time_limit_block
، يرجى نقل هذه الإعدادات إلى القاعدة وحذفها من الملفvalues.yaml
.
الخطوة 6: نقل تكوين كشف الهجوم overlimit_res
من التوجيهات إلى القاعدة¶
Starting from the version 3.6, you can fine-tune the overlimit_res
attack detection using the rule in Wallarm Console.
Earlier, the wallarm_process_time_limit
and wallarm_process_time_limit_block
NGINX directives have been used. The listed directives are considered to be deprecated with the new rule release and will be deleted in future releases.
If the overlimit_res
attack detection settings are customized via the listed directives, it is recommended to transfer them to the rule as follows:
-
Open Wallarm Console → Rules and proceed to the Limit request processing time rule setup.
-
Configure the rule as done via the NGINX directives:
- The rule condition should match the NGINX configuration block with the
wallarm_process_time_limit
andwallarm_process_time_limit_block
directives specified. -
The time limit for the node to process a single request (milliseconds): the value of
wallarm_process_time_limit
.Risk of running out of system memory
The high time limit and/or continuation of request processing after the limit is exceeded can trigger memory exhaustion or out-of-time request processing.
-
The node will either block or pass the
overlimit_res
attack depending on the node filtration mode:- In the monitoring mode, the node forwards the original request to the application address. The application has the risk to be exploited by the attacks included in both processed and unprocessed request parts.
- In the safe blocking mode, the node blocks the request if it is originated from the graylisted IP address. Otherwise, the node forwards the original request to the application address. The application has the risk to be exploited by the attacks included in both processed and unprocessed request parts.
- In the block mode, the node blocks the request.
- The rule condition should match the NGINX configuration block with the
-
Delete the
wallarm_process_time_limit
andwallarm_process_time_limit_block
NGINX directives from thevalues.yaml
configuration file.If the
overlimit_res
attack detection is fine-tuned using both the directives and the rule, the node will process requests as the rule sets.
الخطوة 7: تحقق من جميع التغييرات المرتقبة لوثائق K8s¶
لتجنب تغيير سلوك واجهة تحكم Ingress بشكل غير متوقع، تحقق من جميع التغييرات المرتقبة لوثائق K8s باستخدام Helm Diff Plugin. يوفر هذا البرنامج المساعد الفرق بين وثائق K8s لإصدار واجهة تحكم Ingress المنشر والجديد.
لتثبيت وتشغيل البرنامج المساعد:
-
قم بتثبيت البرنامج المساعد:
-
قم بتشغيل البرنامج المساعد:
helm diff upgrade <RELEASE_NAME> -n <NAMESPACE> wallarm/wallarm-ingress --version 4.10.4 -f <PATH_TO_VALUES>
<RELEASE_NAME>
: اسم الإصدار Helm للرسم البياني لـ Ingress controller<NAMESPACE>
: الفضاء الاسمي الذي يتم نشر Ingress controller فيه<PATH_TO_VALUES>
: المسار إلى ملفvalues.yaml
الذي يحدد إعدادات واجهة تحكم Ingress 4.10
-
تأكد أن أي تغييرات لا يمكن أن تؤثر على استقرار الخدمات الجارية ودرس الأخطاء بعناية من stdout.
إذا كان stdout فارغًا، تأكد من أن ملف
values.yaml
صالح.
يرجى ملاحظة التغييرات التالية للتكوين:
-
الحقل الثابت، مثل محددات التوزيع و/أو StatefulSet.
-
تسميات الحمولة. التغييرات يمكن أن تؤدي إلى إنهاء عملية NetworkPolicy، على سبيل المثال:
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy spec: egress: - to: - namespaceSelector: matchExpressions: - key: name operator: In values: - kube-system # ${NAMESPACE} podSelector: matchLabels: # RELEASE_NAME=waf-ingress - app: waf-ingress + app.kubernetes.io/component: "controller" + app.kubernetes.io/instance: "waf-ingress" + app.kubernetes.io/name: "waf-ingress" - component: waf-ingress
-
تكوين Prometheus ذو التسميات الجديدة، على سبيل المثال:
- job_name: 'kubernetes-ingress' kubernetes_sd_configs: - role: pod namespaces: names: - kube-system # ${NAMESPACE} relabel_configs: # RELEASE_NAME=waf-ingress # Selectors - - source_labels: [__meta_kubernetes_pod_label_app] + - source_labels: [__meta_kubernetes_pod_label_app_kubernetes_io_name] action: keep regex: waf-ingress - - source_labels: [__meta_kubernetes_pod_label_release] + - source_labels: [__meta_kubernetes_pod_label_app_kubernetes_io_instance] action: keep regex: waf-ingress - - source_labels: [__meta_kubernetes_pod_label_component] + - source_labels: [__meta_kubernetes_pod_label_app_kubernetes_io_component] action: keep - regex: waf-ingress + regex: controller - source_labels: [__meta_kubernetes_pod_container_port_number] action: keep regex: "10254|18080" # Replacers - action: replace target_label: __metrics_path__ regex: /metrics - action: labelmap regex: __meta_kubernetes_pod_label_(.+) - source_labels: [__meta_kubernetes_namespace] action: replace target_label: kubernetes_namespace - source_labels: [__meta_kubernetes_pod_name] action: replace target_label: kubernetes_pod_name - source_labels: [__meta_kubernetes_pod_name] regex: (.*) action: replace target_label: instance replacement: "$1"
-
تحليل جميع التغييرات الأخرى.
الخطوة 8: ترقية واجهة التحكم Ingress¶
هناك ثلاث طرق لترقية واجهة تحكم Wallarm Ingress. اعتمادًا على ما إذا كان هناك موزع حمل مثبت في بيئتك، قم باختيار الطريقة للترقية:
-
تثبيت واجهة تحكم Ingress موقتة
-
إعادة إنشاء الإصدار بشكل عادي
-
إعادة إنشاء الإصدار دون التأثير على موزع الحمل
استخدام بيئة التطوير أو minikube
إذا كانت Wallarm Ingress تم تركيبها في بيئة التطوير الخاصة بك، يوصى بترقيتها أولاً. مع تشغيل جميع الخدمات بشكل صحيح في بيئة التطوير، يمكنك الانتقال إلى إجراء الترقية في بيئة الإنتاج.
إلا إذا كان يُوصى بـتركيب واجهة تحكم Wallarm Ingress 4.10 مع التكوين المحدث باستخدام minikube أو خدمة أخرى أولاً. تأكد من أن جميع الخدمات تعمل كما هو متوقع ثم قم بترقية واجهة التحكم Ingress في بيئة الإنتاج.
يساعد هذا النهج على تجنب توقف الخدمات في بيئة الإنتاج.
الطريقة 1: تثبيت واجهة تحكم Ingress موقتة¶
من خلال استخدام هذه الطريقة، يمكنك تثبيت واجهة تحكم Ingress 4.10 ككيان إضافي في بيئتك والتحويل إلى الحركة تدريجياً. تساعد على تجنب حتى توقف الخدمات مؤقتاً وتضمن الهجرة الآمنة.
-
قم بنسخ تكوين IngressClass من ملف
values.yaml
للإصدار السابق إلى ملفvalues.yaml
لواجهة التحكم Ingress 4.10.مع هذا التكوين، ستتعرف واجهة التحكم Ingress على أجسام الوصول ولكن لن تقوم بمعالجة حركة مرورها.
-
قم بتثبيت واجهة تحكم Ingress 4.10:
helm install <RELEASE_NAME> -n <NAMESPACE> wallarm/wallarm-ingress --version 4.10.4 -f <PATH_TO_VALUES>
<RELEASE_NAME>
: اسم لإصدار Helm لرسم البياني لواجهة التحكم Ingress<NAMESPACE>
: الفضاء الاسمي حيث يتم تثبيت واجهة التحكم Ingress<PATH_TO_VALUES>
: المسار إلى الملفvalues.yaml
الذي يحدد إعدادات واجهة تحكم Ingress 4.10
-
تأكد من أن جميع الخدمات تعمل بشكل صحيح.
-
قم بتحويل الحمولة إلى واجهة تحكم Ingress الجديدة تدريجيًا.
الطريقة 2: إعادة إنشاء الإصدار بشكل عادي¶
إذا كان موزع الحمل وواجهة التحكم Ingress غير موصوفة في نفس رسم الأخطية المصاحب في Helm chart، يمكنك ببساطة إعادة إنشاء الإصدار. سيستغرق الأمر عدة دقائق وواجهة التحكم Ingress ستكون غير متاحة لهذا الوقت.
إذا كان يوجد تكوين لموزع الحمل في Helm chart
إذا كان يوجد تكوين لموزع الحمل إلى جانب واجهة التحكم Ingress في Helm chart، يمكن أن يؤدي إعادة إبداع الإصدار إلى توقف طويل لموزع الحمل (يعتمد على مزود الحوسبة السحابية). قد يتم تغيير عنوان الأي بي لموزع الحمل بعد الترقية إذا لم يتم تعيين عنوان ثابت.
يرجى تحليل جميع المخاطر الممكنة إذا كنت تستخدم هذه الطريقة.
لإعادة إنشاء إصدار واجهة التحكم Ingress:
-
حذف الإصدار السابق:
-
<RELEASE_NAME>
: اسم الإصدار Helm للرسم البياني لـ Ingress controller -
<NAMESPACE>
: الفضاء الاسمي الذي يتم نشر Ingress controller فيه
يرجى عدم استخدام الخيار
--wait
عند تنفيذ الأمر لأنه يمكن أن يزيد من وقت الترقية. -
-
قم بإنشاء إصدار جديد مع واجهة التحكم Ingress 4.10:
helm install <RELEASE_NAME> -n <NAMESPACE> wallarm/wallarm-ingress --version 4.10.4 -f `<PATH_TO_VALUES>`
-
<RELEASE_NAME>
: اسم لإصدار Helm لرسم البياني لواجهة التحكم Ingress -
<NAMESPACE>
: الفضاء الاسمي حيث يتم تثبيت واجهة التحكم Ingress -
<PATH_TO_VALUES>
: المسار إلى الملفvalues.yaml
الذي يحدد إعدادات واجهة تحكم Ingress 4.10
-
الطريقة 3: إعادة إنشاء الإصدار من دون التأثير على موزع الحمل¶
عند استخدام موزع الحمل المكون من الموفر السحابي، يوصى بترقية واجهة التحكم Ingress بهذه الطريقة لأنها لا تؤثر على موزع الحمل.
سوف يستغرق إعادة إبداع الإصدار عدة دقائق وواجهة التحكم Ingress ستكون غير متاحة لهذا الوقت.
-
الحصول على الأجسام التي يجب حذفها (ما عدا موزع الحمل):
helm get manifest <RELEASE_NAME> -n <NAMESPACE> | yq -r '. | select(.spec.type != "LoadBalancer") | .kind + "/" + .metadata.name' | tr 'A-Z' 'a-z' > objects-to-remove.txt
لتثبيت الأداة
yq
، يرجى استخدام التعليمات.سيتم إخراج الأجسام التي يجب حذفها إلى ملف
objects-to-remove.txt
. -
حذف الأجسام المدرجة وإعادة إنشاء الإصدار:
cat objects-to-remove.txt | xargs kubectl delete --wait=false -n <NAMESPACE> && \ helm upgrade <RELEASE_NAME> -n <NAMESPACE> wallarm/wallarm-ingress --version 4.10.4 -f `<PATH_TO_VALUES>`
لتقليل وقت توقف الخدمة، فإنه لا يُوصى بتنفيذ الأوامر بشكل منفصل.
-
تأكد من أن جميع الأجسام مكونة بشكل صحيح:
يجب أن يقول الناتج أن جميع الأجسام موجودة بالفعل.
هناك المعلمات التالية التي يتم تمريرها في الأوامر:
-
<RELEASE_NAME>
: اسم الإصدار Helm للرسم البياني لـ Ingress controller -
<NAMESPACE>
: الفضاء الاسمي الذي يتم نشر Ingress controller فيه -
<PATH_TO_VALUES>
: المسار إلى الملفvalues.yaml
الذي يحدد إعدادات واجهة تحكم Ingress 4.10
الخطوة 9: اختبار واجهة التحكم Ingress المُرقاة¶
-
التحقق من أن الإصدار الخاص برسم الأخطية في Helm تم تحديثه:
يجب أن يتوافق إصدار الرسم البياني مع
wallarm-ingress-4.10.4
. -
احصل على قائمة الحمولات التي تحدد اسم واجهة التحكم Ingress في
<INGRESS_CONTROLLER_NAME>
:يجب أن يكون حالة كل حمولة الحالة: التشغيل أو جاهز: N/N. على سبيل المثال:
-
أرسل الطلب مع الاختبار Path Traversal الهجوم إلى عنوان واجهة التحكم Ingress:
إذا كانت العقدة تعمل في وضع
block
، سيرد الرمز403 Forbidden
كرد على الطلب وسيتم عرض الهجوم في Wallarm Console → الهجمات.
الخطوة 10: ضبط التعليمات البرمجية لـ Ingress حسب التغييرات المطلقة¶
قم بضبط التعليمات البرمجية التالية لـ Ingress وفقًا للتغييرات المطلقة في واجهة التحكم Ingress 4.10:
-
إذا كانت الترقية من الإصدار 2.18 أو أقل، قم بـترحيل تكوين قائمة الأي بي. نظرًا لأن منطق الجوهر لقوائم الأي بي تغير بشكل كافٍ في Wallarm node 3.x، يجب ضبط التكوين الموائم لقائمة الأي بي من خلال تغيير التعليمات البرمجية لـ Ingress (إذا تم تطبيقه).
-
تأكد أن السلوك المتوقع للإعدادات المدرجة أدناه يتوافق مع المنطق المتغير لوضعي الترشيح
off
وmonitoring
:- تعليمات
wallarm_mode
- قاعدة الترشيح العامة المكونة في Wallarm Console
- قواعد الترشيح الهدفية نقطة النهاية المكونة في Wallarm Console
إذا لم يتوافق السلوك المتوقع مع منطق وضع الترشيح المتغير، فالرجاء ضبط تعليمات Ingress للتغييرات المطلقة.
- تعليمات
-
إذا كان الإصدار مشفر بـ
nginx.ingress.kubernetes.io/wallarm-instance
، قم بتغيير هذا التعليم مع البرمجة إلىnginx.ingress.kubernetes.io/wallarm-application
.فقط اسم التعليمات تغير، بينما بقي منطقها كما هو. سيتم إهمال التعليمات بالاسم السابق قريبًا لذا يُوصى بتغيير اسمها قبل ذلك.
-
إذا كانت الصفحة
&/usr/share/nginx/html/wallarm_blocked.html
المكونة عبر تعليمات Ingress تمرة إلى طلبات محظورة، اضبط تكوينها على التغييرات المطلقة.في إصدار تحديث العقدة، لدى الصفحة المعاد حظرها من Wallarm واجهة مستخدم محدثة من دون شعار وعنوان البريد الإلكتروني المدعوم مخصص بشكل افتراضي.
الخطوة 11: إعادة تمكين وحدة التحقق من التهديد النشط (فقط إذا كانت الترقية للعقدة 2.16 أو أقل)¶
تعلم التوصيات على إعداد وحدة التحقق من التهديد النشط وقم بإعادة تمكينها إذا كان مطلوبًا.
بعد فترة، تأكد من أن تشغيل الوحدة لا يسبب إيجادات كاذبة. إذا تم اكتشاف الإيجادات الكاذبة، يرجى الاتصال بـ دعم فني Wallarm.