spec.settings.tls، راجع
Configuration → TLS/SSL configuration
ومرجع واجهة برمجة التطبيقات.
المتطلبات الأساسية
- عنقود ClickHouse قيد التشغيل ويديره المشغِّل (راجع المقدمة).
- تثبيت cert-manager في العنقود.
- امتلاك صلاحية وصول
kubectlإلى حيّز اسم العنقود.
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 مستقرًا يمكن للعملاء الوثوق به.
الخطوة 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 أعلاه.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/ويُنشئ مقطعopenSSLفي ClickHouse معverificationMode: relaxed، وdisableProtocols: sslv2,sslv3، وpreferServerCiphers: true. وهذه هي القيم الافتراضية — راجع تخصيص إعدادات TLS لتجاوزها.
required: true، فإن المشغّل يقوم بالإضافة إلى ذلك بما يلي:
- يزيل المنافذ غير الآمنة
9000(native) و8123(HTTP) — ولا تبقى إلا النسخ العاملة عبر TLS، لذا لن يعود بإمكان العملاء غير المشفّرين الاتصال. - يحوّل مسبار الحيوية للكبسولة إلى المنفذ الآمن
9440الخاص بـ native، بحيث يستمر فحص الحالة في العمل من دون مستمع غير مشفّر.
المنافذ
8443 و9440 الخاصة بـ TLS محجوزة بواسطة webhook بشكل غير مشروط،
حتى عندما يكون TLS معطّلًا، لذلك فإن تبديل tls.enabled لاحقًا لا يتعارض أبدًا مع
مدخل spec.additionalPorts. راجع
Configuration → additionalPorts.الخطوة 4 — الاتصال عبر TLS
معrequired: true، يجب على برامج العميل استخدام المنافذ الآمنة والوثوق بـ CA. وجّه
الاتصال إلى كبسولة نسخة متماثلة محددة عبر خدمة headless (أو خدمة ClusterIP
الخاصة بك إذا كنت قد أنشأت واحدة).
البروتوكول الأصلي (clickhouse-client, المنفذ 9440):
8443):
ca.crt مباشرةً من الـ Secret للاختبار المحلي:
تشفير حركة المرور إلى Keeper
إن تفعيل TLS على عنقود ClickHouse لا يشفّر الاتصال بـ Keeper. فعِّل ذلك علىKeeperCluster بشكل مستقل — أصدر شهادة لخدمة Keeper
(الخطوتان 1–2 مع dnsNames الخاصة بخدمة Keeper) وأشِر إليها:
2281. وبمجرد تفعيل TLS في Keeper،
يتصل عنقود ClickHouse الذي يُشير إليه عبر keeperClusterRef به عبر TLS تلقائيًا — من دون أي إعداد إضافي على جانب ClickHouseCluster.
أما في حالة Keeper المُدار خارجيًا، فاضبط spec.externalKeeper.tls: Enabled بدلًا من ذلك، واضبط port لكل عقدة على منفذ العميل الآمن الخاص بمجموعة Keeper (مثل 9281)؛ إذ إن المنفذ الافتراضي 9181 ينقل البيانات نصًا صريحًا.
ويتحقق 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 التي تريد تغييرها:
openSSL
للاطلاع على الخيارات المتاحة، و
التهيئة → التهيئة الإضافية المضمّنة
لمعرفة كيفية دمج extraConfig.
التحقق واستكشاف الأخطاء وإصلاحها
تأكد من أن المنافذ الآمنة مفعّلة على خدمة headless:انظر أيضًا
- التهيئة → تهيئة TLS/SSL — مرجع الحقول
- التهيئة →
additionalPorts— المنافذ المحجوزة - مرجع واجهة برمجة التطبيقات → ClusterTLSSpec
- إعدادات الخادم
openSSL— خيارات TLS التي يمكنك تجاوزها عبرextraConfig