Skip to main content
يشرح هذا الدليل كيفية تشفير عنقود ClickHouse بالكامل: إصدار شهادة باستخدام cert-manager، وتمكين TLS على العنقود، وتوصيل عميل عبر المنافذ الآمنة، وتوسيع نطاق التشفير ليشمل حركة تنسيق Keeper. وهو دليل عملي موجّه للمهام. للاطلاع على مرجع تفصيلي لكل حقل في spec.settings.tls، راجع Configuration → TLS/SSL configuration ومرجع واجهة برمجة التطبيقات.

المتطلبات الأساسية

  • عنقود ClickHouse قيد التشغيل ويديره المشغِّل (راجع المقدمة).
  • تثبيت cert-manager في العنقود.
  • امتلاك صلاحية وصول kubectl إلى حيّز اسم العنقود.
لا يُنشئ المشغِّل الشهادات بنفسه، بل يستخدم مورد Kubernetes من نوع Secret توفّره أنت. ويُعد cert-manager الطريقة الموصى بها لإنشاء هذا الـ Secret وتدويره، لكن أي أداة تكتب Secret بالتنسيق المتوقع ستفي بالغرض.

كيف يتوقع المُشغِّل الشهادات

يُفعَّل TLS من خلال توجيه spec.settings.tls.serverCertSecret إلى Secret يحتوي على زوج مفاتيح الخادم: وهذا هو نفس التنسيق الذي يكتبه cert-manager تمامًا لمورد Certificate، لذلك لا تحتاج إلى أي تحويل. ويقوم المُشغِّل بربط زوج المفاتيح داخل كل كبسولة عند /etc/clickhouse-server/tls/ وتهيئته ضمن إعداد openSSL في ClickHouse.
يُعد serverCertSecret إلزاميًا عندما تكون tls.enabled: true. إذ يرفض webhook الخاص بالتحقق أي عنقود يفعّل TLS من دونه، كما يرفض required: true ما لم تكن enabled: true.
1

إعداد CA باستخدام cert-manager

أكثر الإعدادات قابليةً لإعادة الإنتاج هو استخدام CA موقَّعة ذاتيًا لتوقِّع بعد ذلك شهادة الخادم. يوفّر لك هذا ملف ca.crt ثابتًا يمكن للعملاء الوثوق به.
في بيئة الإنتاج، استبدل Bootstrap ذاتي التوقيع بالجهة المُصدِرة الفعلية لديك (مثل CA مؤسسية أو Vault أو ACME أو غير ذلك). التغيير الوحيد يكون في الخطوة 2 — أما إعدادات العنقود فمتطابقة.
2

إصدار شهادة الخادم

اطلب شهادة طرفية من الجهة المُصدِرة لـ CA. يجب أن تغطي dnsNames عناوين الوصول التي يستخدمها العملاء للكبسولات. ينشئ المشغّل خدمة headless واحدة باسم <cluster-name>-clickhouse-headless، ويمكن الوصول إلى كل كبسولة نسخة متماثلة عبر <cluster-name>-clickhouse-<shard>-<index>-0.<cluster-name>-clickhouse-headless.<namespace>.svc.cluster.local. ويغطي استخدام wildcard على نطاق خدمة headless جميع النسخ المتماثلة:
لا ينشئ المشغّل خدمة على مستوى العنقود بأكمله (مع موازنة حمل). إذا كنت تريد نقطة نهاية واحدة مستقرة للاتصال بها، فأنشئ خدمة ClusterIP خاصة بك تحدد كبسولات العنقود وأضف اسم DNS الخاص بها إلى dnsNames أعلاه.
ينشئ cert-manager مورد Secret باسم clickhouse-cert ويضم tls.crt وtls.key و ca.crt، ويحدّثه قبل انتهاء صلاحيته. تحقّق من وجوده:
3

تفعيل TLS على العنقود

وجّه العنقود لاستخدام مورد Secret:

ما الذي يفعله المشغّل

عندما يكون tls.enabled: true، فإن المشغّل:
  • يفتح المنافذ الآمنة على كل كبسولة وخدمة headless: 9440 ‏(TLS أصلي) و8443 ‏(HTTPS). وتُضاف هذه المنافذ إلى جانب المنافذ الحالية.
  • يربط مورد Secret عند /etc/clickhouse-server/tls/ ويُنشئ كتلة ClickHouse ‏openSSL مع verificationMode: relaxed، وdisableProtocols: sslv2,sslv3، وpreferServerCiphers: true. وهذه هي القيم الافتراضية — راجع تخصيص إعدادات TLS لتجاوزها.
وعندما تضبط أيضًا required: true، فإن المشغّل بالإضافة إلى ذلك:
  • يزيل المنافذ غير الآمنة 9000 ‏(أصلي) و8123 ‏(HTTP) — ولا تبقى إلا إصدارات TLS، لذلك لن تعود عملاء plaintext قادرة على الاتصال.
  • يحوّل مسبار الحيوية للكبسولة إلى المنفذ الأصلي الآمن 9440، بحيث يستمر فحص السلامة في العمل دون مستمع plaintext.
المنفذان 8443 و9440 الخاصان بـ TLS محجوزان بواسطة webhook دائمًا، حتى عندما يكون TLS متوقفًا، لذا فإن تبديل tls.enabled لاحقًا لا يتعارض أبدًا مع إدخال spec.additionalPorts. راجع Configuration → additionalPorts.
4

الاتصال باستخدام TLS

مع required: true، يجب على العملاء استخدام المنافذ الآمنة وأن يثقوا في CA. وجّه الاتصال إلى كبسولة نسخة متماثلة محددة عبر خدمة headless (أو خدمة ClusterIP الخاصة بك إذا كنت قد أنشأت واحدة).البروتوكول الأصلي (clickhouse-client، المنفذ 9440):
HTTPS (المنفذ 8443):
استخرج ca.crt مباشرةً من مورد Secret لأغراض الاختبار المحلي:

تشفير حركة المرور إلى Keeper

إن تفعيل TLS على عنقود ClickHouse لا يشفّر الاتصال بـ Keeper. فعِّل ذلك على KeeperCluster بشكل مستقل — أصدر شهادة لخدمة Keeper (الخطوتان 1–2 مع dnsNames الخاصة بخدمة Keeper) وأشِر إليها:
يكشف Keeper عن منفذ العميل الآمن على 2281. وبمجرد تفعيل TLS في Keeper، يتصل عنقود ClickHouse به عبر TLS تلقائيًا — من دون أي إعداد إضافي على جانب ClickHouseCluster. ويتحقق ClickHouse من شهادة Keeper بالاستناد إلى مخزن الثقة الخاص بالنظام، بالإضافة إلى أي caBundle تقوم بتهيئته.

حزمة CA مخصصة

يتحقق ClickHouse افتراضيًا من الجهات النظيرة التي يتصل بها (النسخ المتماثلة الأخرى، وKeeper، ومصادر القواميس عبر HTTPS، وS3، …) بالرجوع إلى مخزن الثقة في النظام. ولإضافة الثقة أيضًا إلى CA خاصة — سواء كانت موقَّعة ذاتيًا أو داخلية ولا تكون شهادتها الجذرية موجودة في مخزن النظام — وفّر caBundle:
يقوم المشغِّل بربط هذه الحزمة وإضافتها إلى مخزن الثقة الخاص بعميل openSSL (caConfig). يظل مخزن الثقة الخاص بالنظام ساريًا — وتصبح CA الخاصة بك موثوقًا بها بالإضافة إلى الجذور العامة، لذلك تظل الاتصالات بنقاط النهاية العامة تعمل. وفي إعداد موقَّع ذاتيًا، وجّه caBundle إلى المفتاح ca.crt في كائن Secret نفسه الذي أنشأه cert-manager (كما في المثال cluster_with_ssl).

تخصيص إعدادات TLS

إن مقطع openSSL الذي يُنشئه المشغّل هو إعداد افتراضي، وليس حدًا أقصى. ويُكتب في تهيئة الخادم الرئيسية؛ وأي شيء ضمن spec.settings.extraConfig يُضاف إلى config.d/99-extra-config.yaml، ثم يدمجه ClickHouse أخيرًا — لذلك يتجاوز القيم المُولَّدة. لتشديد الإعدادات الافتراضية — على سبيل المثال، فرض تحقّق صارم من النظير ورفع الحد الأدنى للبروتوكول إلى TLS 1.2 — عيّن مفاتيح openSSL.server التي تريد تغييرها:
يتم الدمج على مستوى كل مفتاح: لا تُستبدل إلا القيم التي تضبطها، بينما تُحفَظ المفاتيح المُنشأة التي لا تذكرها (مسارات الشهادات، إعدادات CA). راجع إعدادات خادم openSSL للاطلاع على الخيارات المتاحة، و التهيئة → التهيئة الإضافية المضمّنة لمعرفة كيفية دمج extraConfig.

التحقق واستكشاف الأخطاء وإصلاحها

تأكد من أن المنافذ الآمنة مفعّلة على خدمة headless:
تأكد من أن الشهادة مربوطة داخل الكبسولة:

انظر أيضًا

آخر تعديل في ٢٣ يوليو ٢٠٢٦