نهج شبكة Azure Kubernetes
توفر نهج الشبكة تجزئة مصغرة للقرون تماما مثل مجموعات أمان الشبكة (NSGs) التي توفر التجزئة الصغيرة للأجهزة الظاهرية. يدعم تنفيذ Azure Network Policy Manager مواصفات نهج شبكة Kubernetes القياسية. يمكنك استخدام التسميات لتحديد مجموعة من أجهزة pods وتحديد قائمة بقواعد الدخول والخروج لتصفية حركة المرور من وإلى هذه الأجهزة. تعرف على المزيد حول نُهج شبكة 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
راجع تكوين هذه التنبيهات كما يلي.
تنبيه عندما يفشل Network Policy Manager مع استدعاء نظام التشغيل أو عند ترجمة نهج الشبكة.
التنبيه عندما يكون متوسط الوقت لتطبيق التغييرات لحدث إنشاء أكثر من 100 مللي ثانية.
المرئيات وتصحيح الأخطاء عبر لوحة معلومات Grafana أو مصنف Azure Monitor
راجع عدد قواعد IPTables التي تنشئها نهجك (قد يؤدي وجود عدد كبير من قواعد IPTables إلى زيادة زمن الانتقال قليلا).
ربط عدد أنظمة المجموعة (مثل قوائم التحكم بالوصول) بأوقات التنفيذ.
احصل على الاسم المألوف للإنسان لمجموعة 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
عدد التكامل المستمر مع مرور الوقت
إدخالات CI IPSet
كمية وقت تشغيل CI
عدد ملخصات لوحة معلومات Grafana
تحسب لوحة معلومات Grafana بمرور الوقت
إدخالات IPSet للوحة معلومات Grafana
الكمية الكمية لوقت تشغيل لوحة معلومات Grafana
الخطوات التالية
تعرف على خدمة Azure Kubernetes.
تعرف على شبكات الحاويات.
نشر المكون الإضافي لمجموعات Kubernetes أو حاويات Docker.