> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-trino-dialect.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# سياسات الشبكة

> كيف يدير المشغّل Kubernetes NetworkPolicies لتجمّعات ClickHouse وKeeper، وكيفية السماح بحركة مرور العملاء والمراقبة، وكيفية تقييد حركة المرور الواردة إلى بود مدير وحدة التحكم.

يدير المشغّل موارد Kubernetes `NetworkPolicy` على مستويين، وكلاهما
معطّل افتراضيًا:

* **سياسات التجمّع** — سياسات لكل تجمّع تغطي حركة المرور الداخلية لموارد
  `ClickHouseCluster` و`KeeperCluster`، وتُفعَّل من خلال
  `spec.networkPolicy` في كل مورد مخصص.
* **سياسات بود المشغّل** — سياسات مضمّنة في chart تقيّد حركة المرور الواردة إلى
  بود مدير وحدة التحكم نفسه لنقطتَي نهاية المقاييس وwebhook.

<Note>
  لا يتم تطبيق `NetworkPolicy` إلا إذا كانت إضافة CNI في التجمّع تدعمها
  (مثل Calico أو Cilium). أمّا إذا كانت إضافة CNI لا تطبّق NetworkPolicy، فسيتم
  إنشاء الموارد لكنها لن يكون لها أي تأثير بصمت — ولن يعيد Kubernetes أي
  error. تأكّد من أن إضافة CNI لديك تطبّق السياسات قبل الاعتماد عليها.
</Note>

<div id="cluster-network-policies">
  ## سياسات الشبكة للمجموعة
</div>

فعّل السياسة المُدارة لكل مجموعة:

```yaml theme={null}
apiVersion: clickhouse.com/v1alpha1
kind: ClickHouseCluster
spec:
  networkPolicy:
    policy: Enabled
---
apiVersion: clickhouse.com/v1alpha1
kind: KeeperCluster
spec:
  networkPolicy:
    policy: Enabled
```

تغطي السياسات المُدارة **حركة المرور داخل العنقود فقط**. يؤدي اختيار البودات إلى
تطبيق سياسة الرفض الافتراضي على حركة المرور الواردة إليها، بينما يسمح المشغّل فقط بما
تحتاجه العناقيد للعمل:

| العنقود    | المصدر المسموح به                                                        | المنافذ المسموح بها                         |
| ---------- | ------------------------------------------------------------------------ | ------------------------------------------- |
| ClickHouse | بودات العنقود نفسه                                                       | `9009` (بين الخوادم)، `9001` (الإدارة)      |
| ClickHouse | بودات المشغّل (التسمية `clickhouse.com/role: operator`، في أي مساحة اسم) | `9001`، `9002` (الإدارة)                    |
| Keeper     | بودات العنقود نفسه                                                       | `9234` (Raft)                               |
| Keeper     | بودات المشغّل وكل `ClickHouseCluster` يشير إلى هذا الـKeeper             | `2181`، `2281` (العميل)، `9123` (تحكم HTTP) |

يقبل Keeper عناقيد ClickHouse استنادًا إلى `keeperClusterRef` الخاص بها — وتؤدي إضافة
مرجع أو إزالته إلى تحديث سياسة Keeper تلقائيًا، بما في ذلك
المراجع من مساحات الأسماء الأخرى.

<div id="allowing-clients">
  ### السماح بوصول العملاء والمراقبة
</div>

لا تشمل السياسة اتصالات العملاء وجمع المقاييس: فعند تفعيل السياسة المُدارة،
لن يتمكن أي شيء من الوصول إلى منافذ العملاء (`9000`/`8123` أو متغيرات TLS
الخاصة بها) أو منفذ المقاييس إلى أن تسمح بذلك. سياسات الشبكة (NetworkPolicy) تراكمية،
لذا امنح الوصول باستخدام سياستك الخاصة إلى جانب السياسة المُدارة:

```yaml theme={null}
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-clients
  namespace: <cluster-namespace>
spec:
  podSelector:
    matchLabels:
      app: <name>-clickhouse
  policyTypes: [Ingress]
  ingress:
  - from:
    - podSelector:
        matchLabels:
          role: my-app
    ports:
    - protocol: TCP
      port: 9000
```

ينطبق النمط نفسه على عمليات scrape في Prometheus (المنفذ `9363` على ClickHouse،
و`9090` على Keeper) — اسمح صراحةً بمساحة الأسماء المخصصة للمراقبة.

يؤدي ضبط `networkPolicy.policy: Disabled` (الإعداد الافتراضي) إلى إزالة
السياسة المُدارة؛ ولا يلمس المشغّل السياسات التي يعرّفها المستخدم ما لم
تحمل تسمية `app` الخاصة بالـ cluster.

<div id="np-cluster-wide-disable">
  ### إلغاء التفعيل على مستوى الـ cluster بالكامل
</div>

يمكن أيضًا تعطيل إدارة NetworkPolicy على مستوى الـ cluster بالكامل عبر متغير البيئة
`ENABLE_NETWORK_POLICY` الخاص بـ المشغّل. عند ضبط `ENABLE_NETWORK_POLICY=false`،
يتجاوز المشغّل خطوة reconcile الخاصة بـ NetworkPolicy لجميع
ClickHouseCluster وKeeperCluster، بغض النظر عن قيمة `spec.networkPolicy.policy`،
و**لا يراقب** موارد `NetworkPolicy` إطلاقًا. لذلك، لا يحتاج
ServiceAccount الخاص بـ المشغّل إلى أذونات RBAC على
`networkpolicies.networking.k8s.io`، مما يفيد عند تشغيل المشغّل
باستخدام ServiceAccount مقيّد لا يتضمن تلك الأذونات عمدًا.

```yaml theme={null}
# in the operator Deployment spec
env:
- name: ENABLE_NETWORK_POLICY
  value: "false"
```

باستخدام Helm، يتوفر المفتاح نفسه كقيمة للمخطط:

```yaml theme={null}
# values.yaml
controller:
  networkPolicyManagement:
    enabled: false
```

<div id="operator-pod-policies">
  ## سياسات بود المشغّل
</div>

يوفّر المخطط أيضًا سياسات اختيارية تقيّد أنواع حركة المرور المسموح لها بالوصول إلى
**بود مدير وحدة التحكم** — أي عملية المشغّل نفسها. تغطي هذه السياسات المنفذين
اللذين يعرّضهما المشغّل للعملاء الآخرين: نقطة نهاية المقاييس و
admission webhook.

<div id="what-the-helm-chart-creates">
  ## ما الذي ينشئه مخطط Helm
</div>

عند تفعيله، ينشئ المخطط ما يصل إلى سياستين للدخول فقط، وكلتاهما تستهدفان
بود مدير وحدة التحكم:

| السياسة                 | المصدر المسموح به                              | المنفذ المسموح به                             |
| ----------------------- | ---------------------------------------------- | --------------------------------------------- |
| `allow-metrics-traffic` | مساحات الأسماء المعلَّمة بـ `metrics: enabled` | `metrics.port` (القيمة الافتراضية `8080`/TCP) |
| `allow-webhook-traffic` | مساحات الأسماء المعلَّمة بـ `webhook: enabled` | `webhook.port` (القيمة الافتراضية `9443`/TCP) |

تُعرّف كلتا السياستين فقط `policyTypes: [Ingress]`. وهما لا تقيّدان حركة الخروج
من المشغّل، ولا تمسّان بودات خادم ClickHouse أو Keeper.

<div id="default-deny">
  ## سلوك الرفض الافتراضي
</div>

يؤدي تحديد بود باستخدام `NetworkPolicy` واردة إلى تحويل هذا البود إلى **رفض
افتراضي لحركة المرور الواردة**: فبمجرد سريان أي من السياستين، تُسقَط أي حركة مرور
واردة إلى بود مدير وحدة التحكم ما لم يُسمح بها صراحةً. بعد التمكين،
تقتصر الاتصالات الواردة التي تصل إلى المشغّل على ما يلي:

* كشط المقاييس من مساحة أسماء موسومة بـ `metrics: enabled`، و
* استدعاء admission webhook من مساحة أسماء موسومة بـ `webhook: enabled`.

ويُرفض كل ما عدا ذلك من حركة المرور إلى البود. هذا هو التحصين المقصود، لكنه
يعني أن أي scraper أو مستدعٍ لـ webhook غير موسوم سيتوقف عن العمل فور
بدء سريان السياسات.

<div id="enabling">
  ## تمكين السياسات
</div>

باستخدام Helm، اضبط مفتاح التفعيل في values لديك:

```yaml theme={null}
# values.yaml
networkPolicy:
  enabled: true
```

```bash theme={null}
helm upgrade --install clickhouse-operator \
  oci://ghcr.io/clickhouse/clickhouse-operator-helm \
  -n clickhouse-operator-system --create-namespace \
  -f values.yaml
```

يتطلب `allow-webhook-traffic` أيضًا تعيين `webhook.enabled: true` (وهو
الإعداد الافتراضي)، لذا فإن تعطيل webhook يزيل سياسته أيضًا.

عند استخدام ملفات manifest الخام الخاصة بـ `kubectl`، أزل التعليق عن قسم `[NETWORK POLICY]` كما
هو موضح في [دليل التثبيت الخاص بـ kubectl](/ar/products/kubernetes-operator/install/kubectl).
تتضمن ملفات manifest الخام السياستين نفسهما.

<div id="labeling-namespaces">
  ## وضع تسميات على مساحات أسماء العميل
</div>

نظرًا لأن كلتا السياستين تطابقان المصدر باستخدام `namespaceSelector`، يجب أن تحمل كل مساحة اسم تحتاج إلى الوصول إلى المشغِّل التسمية المطابقة. وأي عملية كشط أو استدعاء webhook من مساحة اسم غير موسومة يتم إسقاطه.

```bash theme={null}
# Allow a Prometheus namespace to scrape the metrics endpoint
kubectl label namespace <prometheus-namespace> metrics=enabled

# Allow webhook callers from a given namespace
kubectl label namespace <caller-namespace> webhook=enabled
```

اقرن هذا مع RBAC الخاص بالمقاييس الموضَّح في
[المراقبة → تأمين نقطة نهاية المقاييس](/ar/products/kubernetes-operator/guides/monitoring#securing-the-metrics-endpoint):
تتحكم `NetworkPolicy` في قابلية الوصول، بينما يتحكم ربط `ClusterRole`
في التفويض. ويجب توفّر كلاهما لكي ينجح `scrape` المؤمَّن.

<Warning>
  تصدر طلبات admission webhook من خادم API لـ Kubernetes، وليس من
  `pod` عادي. وما إذا كانت هذه الحركة المرورية تخضع لـ `NetworkPolicy`، ومن
  أي مصدر تبدو آتية، يعتمد على بنية control plane وCNI لديك —
  وقد تصل control plane المُدارة، على وجه الخصوص، إلى webhook من عنوان لا
  يمكن لأي `namespaceSelector` مطابقته. وإذا لم تكن حركة مرور خادم API لـ Kubernetes
  مشمولة ضمن مساحة أسماء `webhook: enabled`، فقد يؤدي تفعيل `allow-webhook-traffic` إلى حظر
  admission والتسبب في انتهاء مهلة طلبات إنشاء وتحديث `ClickHouseCluster`/`KeeperCluster`.
  اختبر admission على cluster غير production بعد التفعيل، وأضف
  قاعدة سماح صريحة لخادم API لـ Kubernetes إذا لزم الأمر.
</Warning>

<div id="verifying">
  ## التحقّق
</div>

```bash theme={null}
NS=clickhouse-operator-system

# The policies exist
kubectl -n $NS get networkpolicy

# Inspect the selectors and allowed sources
kubectl -n $NS describe networkpolicy
```

بعد التمكين، أكِّد ما يلي:

* أن Prometheus لا يزال يكشط نقطة نهاية المقاييس (مساحة الاسم الخاصة به موسومة
  بـ `metrics: enabled` ومرتبطة بـ ClusterRole ‏metrics-reader).
* أن إنشاء `ClickHouseCluster` أو تحديثه لا يزال يجتاز مرحلة القبول (يمكن
  الوصول إلى webhook).

إذا لم تُرجِع عملية الكشط أي بيانات أو علِقت عملية تطبيق CR، فالسبب الأكثر
احتمالًا هو وجود مساحة اسم مصدر غير موسومة أو التحذير الوارد أعلاه بشأن
إمكانية وصول خادم API.

<div id="related-guides">
  ## أدلة ذات صلة
</div>

* [مراقبة المشغّل](/ar/products/kubernetes-operator/guides/monitoring) — نقطة نهاية المقاييس، وإعدادات RBAC الخاصة بها، وتأمين عمليات الكشط.
* [التثبيت باستخدام kubectl](/ar/products/kubernetes-operator/install/kubectl) — موضع إزالة التعليق من قسم سياسة الشبكة.
* [التثبيت باستخدام Helm](/ar/products/kubernetes-operator/install/helm) — قيم Helm ذات الصلة بالمشغّل.
