Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Private Service Connect

ميزة باقة Scale

GCP PSC متوفرة في باقتَي Scale وEnterprise. للترقية، انتقل إلى صفحة الخطط في Cloud Console.

تُعد Private Service Connect (PSC) إحدى ميزات الشبكات في Google Cloud، وتتيح للمستهلكين الوصول بشكل خاص إلى الخدمات المُدارة داخل شبكة السحابة الخاصة الافتراضية (VPC) الخاصة بهم. وبالمثل، تتيح لمنتجي الخدمات المُدارة استضافة هذه الخدمات داخل شبكات VPC منفصلة خاصة بهم، وتوفير اتصال خاص للمستهلكين.

ينشر منتجو الخدمات تطبيقاتهم للمستهلكين من خلال إنشاء خدمات Private Service Connect. ويصل مستهلكو الخدمات إلى خدمات Private Service Connect هذه مباشرةً عبر أحد أنواع Private Service Connect.

نظرة عامة على Private Service Connect

اعتبارات مهمة عند استخدام Global Access مع Private Service Connect:

  1. يجب أن تنتمي المناطق التي تستخدم Global Access إلى شبكة VPC نفسها.
  2. يجب تمكين Global Access صراحةً على مستوى PSC (راجع لقطة الشاشة أدناه).
  3. تأكد من أن إعدادات firewall لديك لا تمنع الوصول إلى PSC من مناطق أخرى.
  4. انتبه إلى أنك قد تتحمل رسوم نقل البيانات بين المناطق في GCP.

لا يتوفر دعم للاتصال بين المناطق. يجب أن تكون منطقتا المنتج والمستهلك متماثلتين. ومع ذلك، يمكنك الاتصال من مناطق أخرى داخل شبكة VPC الخاصة بك عبر تمكين Global Access على مستوى Private Service Connect (PSC).

أكمل الخطوات التالية لتمكين GCP PSC:

  1. احصل على service attachment في GCP لـ Private Service Connect.
  2. أنشئ نقطة نهاية للخدمة.
  3. أضف "Endpoint ID" إلى خدمة ClickHouse Cloud.
  4. أضف "Endpoint ID" إلى قائمة السماح لخدمة ClickHouse.

انتباه

يحاول ClickHouse تجميع خدماتك لإعادة استخدام PSC endpoint المنشور نفسه داخل منطقة GCP. ومع ذلك، لا يضمن هذا التجميع دائمًا، خاصةً إذا كانت خدماتك موزعة على عدة مؤسسات في ClickHouse. إذا كان PSC مُعدًّا بالفعل لخدمات أخرى ضمن مؤسسة ClickHouse الخاصة بك، فبإمكانك غالبًا تخطي معظم الخطوات بفضل هذا التجميع والانتقال مباشرةً إلى الخطوة الأخيرة: إضافة "Endpoint ID" إلى قائمة السماح لخدمة ClickHouse.

يمكنك العثور على أمثلة Terraform هنا.

قبل البدء

ستحتاج إلى استرجاع معلومات عن خدمة ClickHouse Cloud الخاصة بك. يمكنك القيام بذلك إما عبر وحدة تحكم ClickHouse Cloud أو عبر ClickHouse API. وإذا كنت ستستخدم ClickHouse API، فالرجاء تعيين متغيرات البيئة التالية قبل المتابعة:

REGION=<Your region code using the GCP format, for example: us-central1>
PROVIDER=gcp
KEY_ID=<Your ClickHouse key ID>
KEY_SECRET=<Your ClickHouse key secret>
ORG_ID=<Your ClickHouse organization ID>
SERVICE_NAME=<Your ClickHouse service name>

يمكنك إنشاء مفتاح API جديد لـ ClickHouse Cloud أو استخدام مفتاح موجود.

احصل على INSTANCE_ID الخاص بمثيل ClickHouse لديك عبر التصفية حسب المنطقة والمزوّد واسم الخدمة:

INSTANCE_ID=$(curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" \
"https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services" | \
jq ".result[] | select (.region==\"${REGION:?}\" and .provider==\"${PROVIDER:?}\" and .name==\"${SERVICE_NAME:?}\") | .id " -r)

الحصول على service attachment في GCP واسم DNS لـ Private Service Connect

الخيار 1: ClickHouse Cloud console

في ClickHouse Cloud console، افتح الخدمة التي تريد الاتصال بها باستخدام Private Service Connect، ثم افتح قائمة Settings. انقر على الزر Set up private endpoint. دوّن اسم الخدمة (endpointServiceId) واسم DNS (privateDnsHostname). ستستخدمهما في الخطوات التالية.

نقاط النهاية الخاصة

الخيار 2: API

احصل على service attachment وDNS name لخدمة Private Service Connect في GCP:

curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" "https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services/${INSTANCE_ID:?}/privateEndpointConfig" | jq  .result
{
  "endpointServiceId": "projects/.../regions/us-central1/serviceAttachments/production-us-central1-clickhouse-cloud",
  "privateDnsHostname": "xxxxxxxxxx.us-central1.p.gcp.clickhouse.cloud"
}

دوّن endpointServiceId وprivateDnsHostname. ستستخدمهما في الخطوات التالية.

إنشاء نقطة نهاية للخدمة

في هذا القسم، ستنشئ نقطة نهاية للخدمة.

إضافة Private Service Connection

أولًا، ستُنشئ Private Service Connection.

الخيار 1: استخدام Google Cloud console

في Google Cloud console، انتقل إلى Network services -> Private Service Connect.

افتح Private Service Connect في Google Cloud console

افتح مربع حوار إنشاء Private Service Connect بالنقر على الزر Connect Endpoint.

  • Target: استخدم Published service
  • Target service: استخدم endpointServiceIdواجهة برمجة تطبيقات أو Service nameconsole من خطوة الحصول على service attachment في GCP لـ Private Service Connect.
  • Endpoint name: عيّن اسمًا لـ PSC Endpoint name.
  • Network/Subnetwork/IP address: اختر الشبكة التي تريد استخدامها للاتصال. ستحتاج إلى إنشاء عنوان IP أو استخدام عنوان موجود لنقطة نهاية Private Service Connect. في مثالنا، أنشأنا مسبقًا عنوانًا بالاسم your-ip-address وعيّنا له عنوان IP 10.128.0.2.
  • لجعل نقطة النهاية متاحة من أي Region، يمكنك تفعيل مربع الاختيار Enable global access.
فعّل Global Access لـ Private Service Connect

لإنشاء PSC Endpoint، استخدم الزر ADD ENDPOINT.

سيتغير عمود Status من Pending إلى Accepted بمجرد الموافقة على الاتصال.

انسخ PSC Connection ID

انسخ PSC Connection ID؛ ستستخدمه بوصفه Endpoint ID في الخطوات التالية.

الخيار 2: استخدام Terraform

provider "google" {
  project = "my-gcp-project"
  region  = "us-central1"
}

variable "region" {
  type    = string
  default = "us-central1"
}

variable "subnetwork" {
  type = string
  default = "https://www.googleapis.com/compute/v1/projects/my-gcp-project/regions/us-central1/subnetworks/default"
}

variable "network" {
  type = string
  default = "https://www.googleapis.com/compute/v1/projects/my-gcp-project/global/networks/default"
}

resource "google_compute_address" "psc_endpoint_ip" {
  address      = "10.128.0.2"
  address_type = "INTERNAL"
  name         = "your-ip-address"
  purpose      = "GCE_ENDPOINT"
  region       = var.region
  subnetwork   = var.subnetwork
}

resource "google_compute_forwarding_rule" "clickhouse_cloud_psc" {
  ip_address            = google_compute_address.psc_endpoint_ip.self_link
  name                  = "ch-cloud-${var.region}"
  network               = var.network
  region                = var.region
  load_balancing_scheme = ""
  # service attachment
  target = "https://www.googleapis.com/compute/v1/$TARGET" # See below in notes
}

output "psc_connection_id" {
  value       = google_compute_forwarding_rule.clickhouse_cloud_psc.psc_connection_id
  description = "Add GCP PSC Connection ID to allow list on instance level."
}

اضبط اسم DNS الخاص لنقطة النهاية

تحتاج إلى توجيه "اسم DNS"، المأخوذ من خطوة الحصول على service attachment واسم DNS لـ Private Service Connect، إلى عنوان IP لنقطة نهاية GCP Private Service Connect. ويضمن ذلك أن تتمكن الخدمات/المكونات داخل VPC/الشبكة لديك من resolve هذا الاسم بشكل صحيح.

أضِف Endpoint ID إلى مؤسسة ClickHouse Cloud

الخيار 1: ClickHouse Cloud console

لإضافة نقطة نهاية إلى مؤسستك، انتقل إلى خطوة إضافة "Endpoint ID" إلى قائمة السماح لخدمة ClickHouse. تؤدي إضافة PSC Connection ID باستخدام ClickHouse Cloud console إلى قائمة السماح للخدمة إلى إضافته تلقائيًا إلى المؤسسة أيضًا.

لإزالة نقطة نهاية، افتح Organization details -> Private Endpoints وانقر على زر الحذف لإزالة نقطة النهاية.

إزالة Private Endpoint من ClickHouse Cloud

الخيار 2: API

عيّن متغيرات البيئة التالية قبل تشغيل أي أوامر:

استبدل ENDPOINT_ID أدناه بالقيمة الواردة في Endpoint ID ضمن خطوة إضافة Private Service Connection.

لإضافة نقطة نهاية، شغّل:

cat <<EOF | tee pl_config_org.json
{
  "privateEndpoints": {
    "add": [
      {
        "cloudProvider": "gcp",
        "id": "${ENDPOINT_ID:?}",
        "description": "A GCP private endpoint",
        "region": "${REGION:?}"
      }
    ]
  }
}
EOF

لإزالة نقطة نهاية، نفِّذ:

cat <<EOF | tee pl_config_org.json
{
  "privateEndpoints": {
    "remove": [
      {
        "cloudProvider": "gcp",
        "id": "${ENDPOINT_ID:?}",
        "region": "${REGION:?}"
      }
    ]
  }
}
EOF

إضافة/إزالة Private Endpoint لمؤسسة:

curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" -X PATCH -H "Content-Type: application/json" "https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}" -d @pl_config_org.json

أضف "Endpoint ID" إلى قائمة السماح لخدمة ClickHouse

تحتاج إلى إضافة Endpoint ID إلى قائمة السماح لكل مثيل يُفترض إتاحته عبر Private Service Connect.

الخيار 1: ClickHouse Cloud console

في ClickHouse Cloud console، افتح الخدمة التي تريد الاتصال بها عبر Private Service Connect، ثم انتقل إلى Settings. أدخل Endpoint ID الذي حصلت عليه من خطوة إضافة Private Service Connection. انقر على Create endpoint.

عامل تصفية Private Endpoints

الخيار 2: API

عيّن متغيرات البيئة التالية قبل تشغيل أي أوامر:

استبدل ENDPOINT_ID أدناه بالقيمة الواردة في Endpoint ID ضمن خطوة إضافة Private Service Connection.

نفّذ ذلك لكل خدمة يجب أن تكون متاحة عبر Private Service Connect.

للإضافة:

cat <<EOF | tee pl_config.json
{
  "privateEndpointIds": {
    "add": [
      "${ENDPOINT_ID}"
    ]
  }
}
EOF

لإزالة:

cat <<EOF | tee pl_config.json
{
  "privateEndpointIds": {
    "remove": [
      "${ENDPOINT_ID}"
    ]
  }
}
EOF
curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" -X PATCH -H "Content-Type: application/json" "https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services/${INSTANCE_ID:?}" -d @pl_config.json | jq

الوصول إلى المثيل عبر Private Service Connect

تحتوي كل خدمة مفعَّل لها Private Service Connect على نقطة نهاية عامة وأخرى خاصة. وللاتصال باستخدام Private Service Connect، يجب استخدام نقطة النهاية الخاصة، وهي privateDnsHostname المذكورة في خطوة الحصول على service attachment واسم DNS في GCP لـ Private Service Connect.

الحصول على اسم مضيف DNS خاص

الخيار 1: ClickHouse Cloud console

في ClickHouse Cloud console، انتقل إلى Settings. انقر على زر Set up private endpoint. في اللوحة المنبثقة التي تفتح، انسخ اسم DNS.

اسم DNS لنقطة النهاية الخاصة

الخيار 2: واجهة برمجة التطبيقات

curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" "https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services/${INSTANCE_ID:?}/privateEndpointConfig" | jq  .result
{
  ...
  "privateDnsHostname": "xxxxxxx.<region code>.p.gcp.clickhouse.cloud"
}

في هذا المثال، سيُوجَّه الاتصال إلى اسم المضيف xxxxxxx.yy-xxxxN.p.gcp.clickhouse.cloud عبر Private Service Connect. وفي المقابل، سيُوجَّه xxxxxxx.yy-xxxxN.gcp.clickhouse.cloud عبر الإنترنت.

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

اختبار إعدادات DNS

DNS_NAME - استخدم privateDnsHostname من خطوة الحصول على service attachment واسم DNS لـ Private Service Connect

nslookup $DNS_NAME
Non-authoritative answer:
...
Address: 10.128.0.2

إعادة تعيين الاتصال من الطرف المقابل

اختبار الاتصال

إذا واجهت مشكلات في الاتصال باستخدام رابط PSC، فتحقق من إمكانية الاتصال باستخدام openssl. تأكد من أن حالة نقطة نهاية Private Service Connect هي Accepted:

يجب أن يتمكن OpenSSL من الاتصال (ابحث عن CONNECTED في المخرجات). ومن المتوقع ظهور errno=104.

DNS_NAME - استخدم privateDnsHostname من خطوة الحصول على service attachment لـ Private Service Connect

openssl s_client -connect ${DNS_NAME}:9440
CONNECTED(00000003)
write:errno=104
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 335 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)

التحقق من مرشّحات نقاط النهاية

واجهة برمجة تطبيقات REST

curl --silent --user "${KEY_ID:?}:${KEY_SECRET:?}" -X GET -H "Content-Type: application/json" "https://api.clickhouse.cloud/v1/organizations/${ORG_ID:?}/services/${INSTANCE_ID:?}" | jq .result.privateEndpointIds
[
  "102600141743718403"
]

الاتصال بقاعدة بيانات بعيدة

وفقًا لـ وثائق GCP Private Service Connect:

تصميم موجّه للخدمات: تُنشر خدمات المنتجين عبر موازنات تحميل تعرض عنوان IP واحدًا لشبكة VPC الخاصة بالمستهلك. وتكون حركة مرور المستهلك التي تصل إلى خدمات المنتجين أحادية الاتجاه، ولا يمكنها الوصول إلا إلى عنوان IP الخاص بالخدمة بدلًا من الوصول إلى شبكة VPC مقترنة بالكامل.

لتوصيل دوال الجداول MySQL أو PostgreSQL في ClickHouse Cloud بقاعدة بيانات مستضافة في GCP VPC لديك، قم بتهيئة قواعد جدار الحماية في GCP VPC للسماح بالاتصالات من ClickHouse Cloud. راجع عناوين IP الصادرة الافتراضية لمناطق ClickHouse Cloud، إلى جانب عناوين IP الثابتة المتاحة.

مزيد من المعلومات

لمزيد من المعلومات التفصيلية، يُرجى زيارة cloud.google.com/vpc/docs/configure-private-service-connect-services.

Navigation