نهج شبكة Azure Kubernetes

توفر نهج الشبكة تجزئة مصغرة للقرون تماما مثل مجموعات أمان الشبكة (NSGs) التي توفر التجزئة الصغيرة للأجهزة الظاهرية. يدعم تنفيذ Azure Network Policy Manager مواصفات نهج شبكة Kubernetes القياسية. يمكنك استخدام التسميات لتحديد مجموعة من أجهزة pods وتحديد قائمة بقواعد الدخول والخروج لتصفية حركة المرور من وإلى هذه الأجهزة. تعرف على المزيد حول نُهج شبكة Kubernetes في وثائق Kubernetes.

رسم تخطيطي لنظرة عامة على نهج شبكة Kubernetes.

يعمل تنفيذ Azure Network Policy Management مع Azure CNI الذي يوفر تكامل الشبكة الظاهرية للحاويات. يتم دعم Network Policy Manager على Linux وWindows Server. يفرض التنفيذ تصفية حركة المرور عن طريق تكوين السماح ورفض قواعد IP استنادا إلى النهج المحددة في Linux IPTables أو Host Network Service (HNS) ACLPolicies ل Windows Server.

تخطيط الأمان لمجموعة Kubernetes الخاصة بك

عند تنفيذ الأمان لمجموعتك، استخدم مجموعات أمان الشبكة (NSGs) لتصفية حركة المرور الداخلة إلى الشبكة الفرعية للمجموعة والخارجة منها (حركة المرور بين الشمال والجنوب). استخدم Azure Network Policy Manager لحركة المرور بين القرون في نظام المجموعة (نسبة استخدام الشبكة بين الشرق والغرب).

استخدام Azure Network Policy Manager

يمكن استخدام Azure Network Policy Manager بالطرق التالية لتوفير التجزئة الدقيقة للقرون.

خدمة Azure Kubernetes ‏(AKS)

يتوفر Network Policy Manager في الأصل في AKS ويمكن تمكينه في وقت إنشاء نظام المجموعة.

لمزيد من المعلومات، راجع تأمين نسبة الاستخدام بين الحاويات باستخدام نُهُج الشبكة في Azure Kubernetes Service (AKS).

افعل ذلك بنفسك (DIY) مجموعات Kubernetes في Azure

بالنسبة إلى مجموعات DIY، قم أولاً بتثبيت المكون الإضافي CNI وتمكينه على كل جهاز ظاهري في مجموعة. للحصول على إرشادات مفصلة، راجع نشر المكون الإضافي لمجموعة Kubernetes التي تنشرها بنفسك.

بمجرد نشر نظام المجموعة، قم بتشغيل الأمر التالي kubectl لتنزيل وتطبيق البرنامج الخفي Azure Network Policy Manager المعين على نظام المجموعة.

لـ Linux:

kubectl apply -f https://raw.githubusercontent.com/Azure/azure-container-networking/master/npm/azure-npm.yaml

لـ Windows:

 kubectl apply -f https://raw.githubusercontent.com/Azure/azure-container-networking/master/npm/examples/windows/azure-npm.yaml

الحل أيضاً عبارة عن مصدر مفتوح والتعليمات البرمجية متوفرة على مستودع Azure Container Networkory.

مراقبة تكوينات الشبكة وتصورها باستخدام Azure NPM

يتضمن Azure Network Policy Manager مقاييس Prometheus مفيدة تسمح لك بمراقبة تكويناتك وفهمها بشكل أفضل. ويوفر تصورات مضمنة إما في مدخل Microsoft Azure أو مختبرات Grafana. يمكنك البدء في جمع هذه المقاييس باستخدام إما Azure Monitor أو خادم Prometheus.

فوائد مقاييس Azure Network Policy Manager

كان المستخدمون سابقا قادرين فقط على التعرف على تكوين الشبكة الخاصة بهم مع iptables وتشغيل ipset الأوامر داخل عقدة نظام المجموعة، ما ينتج عنه إخراج مطول ويصعب فهمه.

بشكل عام، توفر المقاييس ما يلي:

  • عدد النهج وقواعد ACL ومجموعات ipset وإدخالات ipset والإدخالات في أي مجموعة ipset معينة

  • أوقات التنفيذ لمكالمات نظام التشغيل الفردية ومعالجة أحداث موارد kubernetes (متوسط و90 بالمائة ونسبة مئوية 99)

  • معلومات الفشل لمعالجة أحداث موارد kubernetes (تفشل أحداث الموارد هذه عند فشل استدعاء نظام التشغيل)

أمثلة على حالات استخدام المقاييس

التنبيهات عبر Prometheus AlertManager

راجع تكوين هذه التنبيهات كما يلي.

  1. تنبيه عندما يفشل Network Policy Manager مع استدعاء نظام التشغيل أو عند ترجمة نهج الشبكة.

  2. التنبيه عندما يكون متوسط الوقت لتطبيق التغييرات لحدث إنشاء أكثر من 100 مللي ثانية.

المرئيات وتصحيح الأخطاء عبر لوحة معلومات Grafana أو مصنف Azure Monitor
  1. راجع عدد قواعد IPTables التي تنشئها نهجك (قد يؤدي وجود عدد كبير من قواعد IPTables إلى زيادة زمن الانتقال قليلا).

  2. ربط عدد أنظمة المجموعة (مثل قوائم التحكم بالوصول) بأوقات التنفيذ.

  3. احصل على الاسم المألوف للإنسان لمجموعة ipset في قاعدة IPTables معينة (على سبيل المثال، azure-npm-487392 يمثل podlabel-role:database).

جميع المقاييس المدعومة

القائمة التالية هي من المقاييس المدعومة. تحتوي أي تسمية quantile على القيم الممكنة 0.5 و0.9 و0.99. تحتوي أي تسمية had_error على قيم ممكنة false وtrue، وتمثل ما إذا كانت العملية قد نجحت أو فشلت.

اسم المقياس ‏‏الوصف نوع مقاييس بروميثيوس بطاقات عنونة
npm_num_policies عدد نُهج الشبكة جهاز قياس -
npm_num_iptables_rules عدد قواعد IPTables جهاز قياس -
npm_num_ipsets عدد IPSets جهاز قياس -
npm_num_ipset_entries عدد إدخالات عنوان IP في جميع IPSets جهاز قياس -
npm_add_iptables_rule_exec_time وقت التشغيل لإضافة قاعدة IPTables الملخص quantile
npm_add_ipset_exec_time وقت التشغيل لإضافة IPSet الملخص quantile
npm_ipset_counts (متقدم) عدد الإدخالات داخل كل IPSet على حدة GaugeVec set_name & set_hash
npm_add_policy_exec_time وقت التشغيل لإضافة نهج شبكة الملخص quantile & had_error
npm_controller_policy_exec_time وقت التشغيل لتحديث / حذف نهج الشبكة الملخص quantile & had_error operation (مع القيم update أو delete)
npm_controller_namespace_exec_time وقت التشغيل لإنشاء/تحديث/حذف مساحة اسم الملخص quantile & had_error operation (مع القيم createأو updateأو delete)
npm_controller_pod_exec_time وقت التشغيل لإنشاء/تحديث/حذف حاوية الملخص quantile & had_error operation (مع القيم createأو updateأو delete)

توجد أيضاً مقاييس "exec_time_count" و"exec_time_sum" لكل مقياس ملخص "exec_time".

يمكن استخراج المقاييس من خلال مراقبة Azure للحاويات أو من خلال Prometheus.

إعداد سجلات مراقبة Azure

تتمثل الخطوة الأولى في تمكين Azure Monitor للحاويات الخاصة بمجموعة Kubernetes. يمكن العثور على الخطوات في نظرة عامة على Azure Monitor للحاويات. بمجرد تمكين Azure Monitor للحاويات، قم بتكوين Azure Monitor للحاويات ConfigMap لتمكين تكامل Network Policy Manager وجمع مقاييس Prometheus Network Policy Manager.

يحتوي Azure Monitor للحاويات ConfigMap على integrations قسم يحتوي على إعدادات لتجميع مقاييس Network Policy Manager.

يتم تعطيل هذه الإعدادات افتراضياً في ConfigMap. تمكين الإعداد collect_basic_metrics = trueالأساسي ، يجمع مقاييس إدارة نهج الشبكة الأساسية. يجمع تمكين الإعداد collect_advanced_metrics = true المتقدم المقاييس المتقدمة بالإضافة إلى المقاييس الأساسية.

بعد تحرير ConfigMap، احفظه محلياً وقم بتطبيق ConfigMap على مجموعتك على النحو التالي.

kubectl apply -f container-azm-ms-agentconfig.yaml

القصاصة البرمجية التالية من Azure Monitor للحاويات ConfigMap، والتي تعرض تكامل Network Policy Manager الممكن مع مجموعة المقاييس المتقدمة.

integrations: |-
    [integrations.azure_network_policy_manager]
        collect_basic_metrics = false
        collect_advanced_metrics = true

المقاييس المتقدمة اختيارية، وتشغيلها يؤدي تلقائيا إلى تشغيل مجموعة المقاييس الأساسية. تتضمن المقاييس المتقدمة حاليا فقط Network Policy Manager_ipset_counts.

تعرف على المزيد حول Azure Monitor لإعدادات مجموعة الحاويات في مخطط التكوين.

خيارات التصور ل Azure Monitor

بمجرد تمكين مجموعة مقاييس Network Policy Manager، يمكنك عرض المقاييس في مدخل Microsoft Azure باستخدام نتائج تحليلات الحاوية أو في Grafana.

عرض في مدخل Microsoft Azure ضمن نتائج التحليلات لنظام المجموعة

افتح بوابة Azure . بمجرد الوصول إلى نتائج تحليلات نظام المجموعة، انتقل إلى Workbooks وافتح Network Policy Manager (Network Policy Manager).

بالإضافة إلى عرض المصنف، يمكنك أيضا الاستعلام مباشرة عن مقاييس Prometheus في "السجلات" ضمن قسم نتائج التحليلات. على سبيل المثال، يقوم هذا الاستعلام بإرجاع كافة المقاييس التي يتم تجميعها.

| where TimeGenerated > ago(5h)
| where Name contains "npm_"

يمكنك أيضا الاستعلام عن تحليلات السجل مباشرة للمقاييس. لمزيد من المعلومات، راجع بدء استخدام استعلامات Log Analytics.

العرض في لوحة معلومات Grafana

قم بإعداد خادم Grafana وتكوين مصدر بيانات تحليلات السجل كما هو موضح هنا. بعد ذلك، قم باستيراد Grafana Dashboard مع خلفية Log Analytics الخلفية إلى Grafana Labs.

تحتوي لوحة المعلومات على مرئيات مشابهة لمصنف Azure. يمكنك إضافة لوحات إلى المخطط وتصور مقاييس Network Policy Manager من جدول InsightsMetrics.

إعداد لخادم Prometheus

قد يختار بعض المستخدمين جمع المقاييس باستخدام خادم Prometheus بدلا من Azure Monitor للحاويات. تحتاج فقط إلى إضافة وظيفتين إلى تكوين الاستخراج الخاص بك لجمع مقاييس Network Policy Manager.

لتثبيت خادم Prometheus، أضف مستودع helm هذا على نظام المجموعة:

helm repo add stable https://kubernetes-charts.storage.googleapis.com
helm repo update

ثم أضف خادم

helm install prometheus stable/prometheus -n monitoring \
--set pushgateway.enabled=false,alertmanager.enabled=false, \
--set-file extraScrapeConfigs=prometheus-server-scrape-config.yaml

حيث prometheus-server-scrape-config.yaml يتكون من:

- job_name: "azure-npm-node-metrics"
  metrics_path: /node-metrics
  kubernetes_sd_configs:
  - role: node
  relabel_configs:
  - source_labels: [__address__]
    action: replace
    regex: ([^:]+)(?::\d+)?
    replacement: "$1:10091"
    target_label: __address__
- job_name: "azure-npm-cluster-metrics"
  metrics_path: /cluster-metrics
  kubernetes_sd_configs:
  - role: service
  relabel_configs:
  - source_labels: [__meta_kubernetes_namespace]
    regex: kube-system
    action: keep
  - source_labels: [__meta_kubernetes_service_name]
    regex: npm-metrics-cluster-service
    action: keep
# Comment from here to the end to collect advanced metrics: number of entries for each IPSet
  metric_relabel_configs:
  - source_labels: [__name__]
    regex: npm_ipset_counts
    action: drop

يمكنك أيضا استبدال azure-npm-node-metrics الوظيفة بالمحتوى التالي أو دمجها في مهمة موجودة مسبقا لوحدات Kubernetes:

- job_name: "azure-npm-node-metrics-from-pod-config"
  metrics_path: /node-metrics
  kubernetes_sd_configs:
  - role: pod
  relabel_configs:
  - source_labels: [__meta_kubernetes_namespace]
    regex: kube-system
    action: keep
  - source_labels: [__meta_kubernetes_pod_annotationpresent_azure_Network Policy Manager_scrapeable]
    action: keep
  - source_labels: [__address__]
    action: replace
    regex: ([^:]+)(?::\d+)?
    replacement: "$1:10091"
    target_label: __address__

إعداد التنبيهات ل AlertManager

إذا كنت تستخدم خادم Prometheus، يمكنك إعداد AlertManager مثل ذلك. فيما يلي مثال على التكوين لقواعد التنبيه الموضحة سابقا:

groups:
- name: npm.rules
  rules:
  # fire when Network Policy Manager has a new failure with an OS call or when translating a Network Policy (suppose there's a scraping interval of 5m)
  - alert: AzureNetwork Policy ManagerFailureCreatePolicy
    # this expression says to grab the current count minus the count 5 minutes ago, or grab the current count if there was no data 5 minutes ago
    expr: (npm_add_policy_exec_time_count{had_error='true'} - (npm_add_policy_exec_time_count{had_error='true'} offset 5m)) or npm_add_policy_exec_time_count{had_error='true'}
    labels:
      severity: warning
      addon: azure-npm
    annotations:
      summary: "Azure Network Policy Manager failed to handle a policy create event"
      description: "Current failure count since Network Policy Manager started: {{ $value }}"
  # fire when the median time to apply changes for a pod create event is more than 100 milliseconds.
  - alert: AzurenpmHighControllerPodCreateTimeMedian
    expr: topk(1, npm_controller_pod_exec_time{operation="create",quantile="0.5",had_error="false"}) > 100.0
    labels:
      severity: warning
      addon: azure-Network Policy Manager
    annotations:
      summary: "Azure Network Policy Manager controller pod create time median > 100.0 ms"
      # could have a simpler description like the one for the alert above,
      # but this description includes the number of pod creates that were handled in the past 10 minutes, 
      # which is the retention period for observations when calculating quantiles for a Prometheus Summary metric
      description: "value: [{{ $value }}] and observation count: [{{ printf `(npm_controller_pod_exec_time_count{operation='create',pod='%s',had_error='false'} - (npm_controller_pod_exec_time_count{operation='create',pod='%s',had_error='false'} offset 10m)) or npm_controller_pod_exec_time_count{operation='create',pod='%s',had_error='false'}` $labels.pod $labels.pod $labels.pod | query | first | value }}] for pod: [{{ $labels.pod }}]"

خيارات التصور ل Prometheus

عند استخدام خادم Prometheus، يتم دعم لوحة معلومات Grafana فقط.

إذا لم تكن قد قمت بالفعل، فقم بإعداد خادم Grafana وتكوين مصدر بيانات Prometheus. وبعد ذلك، قم باستيراد Grafana Dashboard مع خلفية Prometheus الخلفية إلى Grafana Labs.

المرئيات للوحة المعلومات هذه مطابقة للوحة المعلومات مع خلفية تحليلات الحاوية/تحليلات السجل.

عينات لوحات المعلومات‬

فيما يلي بعض نماذج لوحة المعلومات لمقاييس Network Policy Manager في نتائج تحليلات الحاوية (CI) وGrafana.

عدد ملخصات CI

لقطة شاشة لحسابات ملخص مصنف Azure.

عدد التكامل المستمر مع مرور الوقت

لقطة شاشة لحسابات مصنف Azure بمرور الوقت.

إدخالات CI IPSet

لقطة شاشة لإدخالات Azure Workbook IPSet.

كمية وقت تشغيل CI

لقطة شاشة لأحجام وقت تشغيل مصنف Azure.

عدد ملخصات لوحة معلومات Grafana

لقطة شاشة لحسابات ملخص لوحة معلومات Grafana.

تحسب لوحة معلومات Grafana بمرور الوقت

لقطة شاشة لحسابات لوحة معلومات Grafana بمرور الوقت.

إدخالات IPSet للوحة معلومات Grafana

لقطة شاشة لإدخالات IPSet للوحة معلومات Grafana.

الكمية الكمية لوقت تشغيل لوحة معلومات Grafana

لقطة شاشة لوقت تشغيل لوحة معلومات Grafana.

الخطوات التالية