Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

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

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

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

سياسات الشبكة للمجموعة

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

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 تلقائيًا، بما في ذلك المراجع من مساحات الأسماء الأخرى.

السماح بوصول العملاء والمراقبة

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

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.

إلغاء التفعيل على مستوى الـ cluster بالكامل

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

# in the operator Deployment spec
env:
- name: ENABLE_NETWORK_POLICY
  value: "false"

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

# values.yaml
controller:
  networkPolicyManagement:
    enabled: false

سياسات بود المشغّل

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

ما الذي ينشئه مخطط Helm

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

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

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

سلوك الرفض الافتراضي

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

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

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

تمكين السياسات

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

# values.yaml
networkPolicy:
  enabled: true
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. تتضمن ملفات manifest الخام السياستين نفسهما.

وضع تسميات على مساحات أسماء العميل

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

# 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 الخاص بالمقاييس الموضَّح في المراقبة → تأمين نقطة نهاية المقاييس: تتحكم NetworkPolicy في قابلية الوصول، بينما يتحكم ربط ClusterRole في التفويض. ويجب توفّر كلاهما لكي ينجح scrape المؤمَّن.

التحقّق

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.

Navigation