Skip to content

docs: add supported connection paths for remote clusters (CCS/CCR vs private connectivity) - #7567

Open
alxchalkias wants to merge 2 commits into
mainfrom
alxchalkias/remote-clusters-connection-paths
Open

docs: add supported connection paths for remote clusters (CCS/CCR vs private connectivity)#7567
alxchalkias wants to merge 2 commits into
mainfrom
alxchalkias/remote-clusters-connection-paths

Conversation

@alxchalkias

Copy link
Copy Markdown
Contributor

Summary

  • Adds a Supported connection paths subsection to the "Remote clusters and network security" section of deploy-manage/remote-clusters.md, with a table showing which network paths support CCS/CCR depending on where the local cluster runs, a warning against using private connection hostnames as proxy_address between two ECH deployments, and a billing tip (CCS/CCR traffic is metered as Data out on the deployment the data leaves).
  • Adds a remote clusters limitation note to the shared private connectivity limitations snippet (_snippets/private-connectivity-limitations-ech.md), which renders on the AWS PrivateLink, Azure Private Link, and GCP Private Service Connect pages: deployment-to-deployment remote cluster traffic does not traverse the customer's private endpoint.

Why

Recent support escalation (SDH via #cloud-networking Slack, Jul 17-24): a customer tried to configure CCR between two ECH deployments in Azure (eastus <-> westus2) using the Private Link hostname as proxy_address, which cannot work — PL hostnames only resolve inside the customer's VNet. The existing docs cover which filter type to use when network security is enabled, but not which connection paths are supported, and both support and the customer were confused about:

  1. Whether the PL hostname can be used for ECH-to-ECH remote clusters (no).
  2. Which direction private connectivity supports CCS/CCR (customer network -> ECH only; :9400 is open on the Azure PL LBs — ECPTRAFFIC-1076 — and :9443/RCS 2.0 was addressed in ECPTRAFFIC-1293).
  3. How CCR traffic is billed (Data out on the deployment the data leaves — messaging confirmed with platform-billing, Jul 24).

Test plan

  • Docs build passes
  • New subsection renders correctly on deploy-manage/remote-clusters
  • Snippet note renders on the AWS, Azure, and GCP private connectivity pages
  • Anchor #remote-clusters-connection-paths resolves from the snippet link

Made with Cursor

@alxchalkias
alxchalkias requested a review from a team as a code owner July 24, 2026 14:00
@cla-checker-service

cla-checker-service Bot commented Jul 24, 2026

Copy link
Copy Markdown

💚 CLA has been signed

@github-actions

Copy link
Copy Markdown
Contributor

Elastic Docs AI PR menu

Check the box to run an AI review for this pull request.

  • Review docs changes (docs-review). Status: not started.

Powered by GitHub Agentic Workflows and docs-actions. For more information, reach out to the docs team.

@github-actions

github-actions Bot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

✅ Elastic Docs Style Checker (Vale)

No issues found on modified lines!


The Vale linter checks documentation changes against the Elastic Docs style guide. To use Vale locally or report issues, refer to Elastic style guide for Vale.

@github-actions

github-actions Bot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

🔍 Preview links for changed docs

@eedugon eedugon left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great addition to the docs, thanks!!

I've shared a few comments, suggesting a small update in the title, because the main focus on our messages are about private connectivity.

There's one sentence that was contradictory with the rest of the PR and I've suggested to change the introductory path of the section (including a link to private connectivity docs, as we didn't have any in the section).

Let me know your thoughts!

Note that I've removed in the intro the message about 9400, 9443, API key, and TLS-based auth methods, as IMO that's out of the scope of this doc and it's explained already in all the setup docs plus the doc about authentication methods for RCS. But if we consider it's useful to add it also here we can find the way.

Comment thread deploy-manage/security/_snippets/private-connectivity-limitations-ech.md Outdated
Comment thread deploy-manage/remote-clusters.md Outdated
Comment thread deploy-manage/remote-clusters.md Outdated
Comment thread deploy-manage/remote-clusters.md Outdated
Comment thread deploy-manage/remote-clusters.md Outdated

@jakommo jakommo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Left a few minor / clarification comment, but LGTM in general.

Comment thread deploy-manage/remote-clusters.md Outdated
::::

::::{tip}
Traffic sent between deployments for {{ccs}} and {{ccr}} is metered as **Data out** on the deployment the data is replicated or searched from, regardless of destination or path. Refer to [Cloud Hosted deployment billing dimensions](/deploy-manage/cloud-organization/billing/cloud-hosted-deployment-billing-dimensions.md).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

or searched from

I think this is ambiguous and might cause confusion. For CCS is this the cluster initiating the search or the one that executes it?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch — reworded. It's the remote deployment being searched (the search results leave that deployment), not the initiating cluster. The tip now spells out both directions: for CCR the deployment you replicate from, for CCS the remote deployment being searched.

Comment thread deploy-manage/remote-clusters.md Outdated
| {{ech}} deployment | Self-managed cluster in your network | Outbound from Elastic over the public internet to your cluster's endpoint. Allow the connection with IP-based rules on your side. | **No.** {{ech}} deployments can't consume private endpoints in customer networks. |

::::{warning}
Don't use a private connection hostname (for example, `*.vpce.{region}.aws.elastic-cloud.com` or your Azure private hosted zone domain) as the `proxy_address` for a remote cluster connection between two {{ech}} deployments. The connection will fail because the hostname is not resolvable from Elastic-managed networks. Use the public proxy address from the remote deployment's **Security** page instead.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there a specific error for this? Something like "can't resolve" or "host unknown" or so? Would be great to add the symptom/error so users can more easily find the doc.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added. The symptom is a DNS resolution failure — unknown host / UnknownHostException in the Elasticsearch logs — since the private hostname isn't resolvable from Elastic-managed networks. The warning now includes it for searchability.

Comment thread deploy-manage/remote-clusters.md Outdated
Comment thread deploy-manage/remote-clusters.md Outdated
Comment thread deploy-manage/remote-clusters.md Outdated
Comment thread deploy-manage/remote-clusters.md Outdated
Comment thread deploy-manage/remote-clusters.md Outdated
Comment thread deploy-manage/remote-clusters.md Outdated
Comment thread deploy-manage/remote-clusters.md Outdated
Comment thread deploy-manage/remote-clusters.md Outdated
@shainaraskas

Copy link
Copy Markdown
Member

I think this PR will always fail CI because of the cursoragent commit ... might need to be recreated

@alxchalkias
alxchalkias force-pushed the alxchalkias/remote-clusters-connection-paths branch 2 times, most recently from f18d8e1 to 395be1e Compare July 28, 2026 09:38
@alxchalkias

Copy link
Copy Markdown
Contributor Author

Addressed all open review items and rebuilt the branch per @shainaraskas' CLA note:

  • Recreated as a single commit authored by me, without the cursoragent co-author trailer that was failing the CLA check. Review credit for @eedugon's and @shainaraskas' suggestions is preserved as co-author trailers. All previously reviewed content is unchanged except the items below.
  • Fixed a broken table: one applied suggestion had dropped a duplicate of the warning text into the middle of the connection-paths table, splitting it. Removed.
  • CCS billing direction (@jakommo): the tip now states explicitly that Data out is metered on the deployment that holds the data — for CCR the deployment you replicate from, for CCS the remote deployment being searched.
  • Error symptom (@jakommo): the warning now names the failure mode (unknown host / UnknownHostException in the ES logs) so users can find this doc from the error.
  • CRLF/^M noise (@jakommo): the file now keeps main's original line endings with the new section appended in LF — the diff is a clean ~22-line addition.

CI should be green now; ready for another look.

Add a Connection paths and private connectivity subsection to the
remote clusters network security section, clarifying which paths
support CCS/CCR by local cluster location and that private connection
hostnames cannot be used between two ECH deployments. Add a
corresponding limitation note to the shared private connectivity
limitations snippet (AWS/Azure/GCP), and a billing tip pointing at the
Data out dimension.

Co-authored-by: Edu González de la Herrán <25320357+eedugon@users.noreply.github.com>
Co-authored-by: shainaraskas <58563081+shainaraskas@users.noreply.github.com>

@eedugon eedugon left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@nikfot nikfot left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added some comments for clarity.

@@ -1,4 +1,5 @@
* **Transport client:** The {{es}} transport client is not supported over private connections.
* **Remote clusters between {{ech}} deployments:** Remote cluster connections ({{ccs}} and {{ccr}}) between two ECH deployments cannot use your private endpoint. Deployment-to-deployment traffic must use the remote deployment's public proxy address. Private connections apply to remote cluster traffic only when the local cluster runs in your own VPC or VNet (self-managed, {{ece}}, or {{eck}}). Refer to [Supported connection paths](/deploy-manage/remote-clusters.md#remote-clusters-connection-paths).

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe that "your private endpoint" can be misleading. Since this is in Elastic Cloud the user cannot create a private endpoint no matter what.

Maybe something like this:

Suggested change
* **Remote clusters between {{ech}} deployments:** Remote cluster connections ({{ccs}} and {{ccr}}) between two ECH deployments cannot use your private endpoint. Deployment-to-deployment traffic must use the remote deployment's public proxy address. Private connections apply to remote cluster traffic only when the local cluster runs in your own VPC or VNet (self-managed, {{ece}}, or {{eck}}). Refer to [Supported connection paths](/deploy-manage/remote-clusters.md#remote-clusters-connection-paths).
* **Remote clusters between {{ech}} deployments:** Remote cluster connections ({{ccs}} and {{ccr}}) between two ECH deployments cannot be connecte using private endpoints. Deployment-to-deployment traffic must use the remote deployment's public proxy address. Private connections apply to remote cluster traffic only when the local cluster runs in your own VPC or VNet (self-managed, {{ece}}, or {{eck}}). Refer to [Supported connection paths](/deploy-manage/remote-clusters.md#remote-clusters-connection-paths).


| Local cluster location | Remote cluster | Connection path | Private connectivity applicable? |
|---|---|---|---|
| {{ech}} deployment (any region or cloud provider) | {{ech}} deployment | Remote proxy address over public endpoints. Cross-region and cross-provider connections are supported. | **No.** Private connection hostnames resolve only inside your VPC or VNet through your private DNS zone. Deployment-to-deployment traffic originates from Elastic-managed networks and can't traverse your private endpoint. |

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The problem is not that the hostnames would not resolve. Ther problem is that the user does not have permission to create them inside the Elastic CLoud.

Suggested change
| {{ech}} deployment (any region or cloud provider) | {{ech}} deployment | Remote proxy address over public endpoints. Cross-region and cross-provider connections are supported. | **No.** Private connection hostnames resolve only inside your VPC or VNet through your private DNS zone. Deployment-to-deployment traffic originates from Elastic-managed networks and can't traverse your private endpoint. |
| {{ech}} deployment (any region or cloud provider) | {{ech}} deployment | Remote proxy address over public endpoints. Cross-region and cross-provider connections are supported. | **No.** You can only create private connection hostnames inside your VPC or VNet through your private DNS zone. Deployment-to-deployment traffic originates from Elastic-managed networks and can't traverse your private endpoint. |

| Local cluster location | Remote cluster | Connection path | Private connectivity applicable? |
|---|---|---|---|
| {{ech}} deployment (any region or cloud provider) | {{ech}} deployment | Remote proxy address over public endpoints. Cross-region and cross-provider connections are supported. | **No.** Private connection hostnames resolve only inside your VPC or VNet through your private DNS zone. Deployment-to-deployment traffic originates from Elastic-managed networks and can't traverse your private endpoint. |
| Self-managed or {{ece}} cluster in your VPC or VNet | {{ech}} deployment | Public proxy address, or a private connection: create a VPC endpoint (AWS), private endpoint (Azure), or Private Service Connect endpoint (GCP) and connect to the remote cluster through it. Inter-region private connections are supported where the cloud provider supports them. | **Yes** (in this direction only). |

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To keep capitalization common across services

Suggested change
| Self-managed or {{ece}} cluster in your VPC or VNet | {{ech}} deployment | Public proxy address, or a private connection: create a VPC endpoint (AWS), private endpoint (Azure), or Private Service Connect endpoint (GCP) and connect to the remote cluster through it. Inter-region private connections are supported where the cloud provider supports them. | **Yes** (in this direction only). |
| Self-managed or {{ece}} cluster in your VPC or VNet | {{ech}} deployment | Public proxy address, or a private connection: create a VPC Endpoint (AWS), Private Endpoint (Azure), or Private Service Connect endpoint (GCP) and connect to the remote cluster through it. Inter-region private connections are supported where the cloud provider supports them. | **Yes** (in this direction only). |

|---|---|---|---|
| {{ech}} deployment (any region or cloud provider) | {{ech}} deployment | Remote proxy address over public endpoints. Cross-region and cross-provider connections are supported. | **No.** Private connection hostnames resolve only inside your VPC or VNet through your private DNS zone. Deployment-to-deployment traffic originates from Elastic-managed networks and can't traverse your private endpoint. |
| Self-managed or {{ece}} cluster in your VPC or VNet | {{ech}} deployment | Public proxy address, or a private connection: create a VPC endpoint (AWS), private endpoint (Azure), or Private Service Connect endpoint (GCP) and connect to the remote cluster through it. Inter-region private connections are supported where the cloud provider supports them. | **Yes** (in this direction only). |
| {{ech}} deployment | Self-managed cluster in your network | Outbound from Elastic over the public internet to your cluster's endpoint. Allow the connection with IP-based rules on your side. | **No.** {{ech}} deployments can't consume private endpoints in customer networks. |

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
| {{ech}} deployment | Self-managed cluster in your network | Outbound from Elastic over the public internet to your cluster's endpoint. Allow the connection with IP-based rules on your side. | **No.** {{ech}} deployments can't consume private endpoints in customer networks. |
| {{ech}} deployment | Self-managed cluster in your network | Outbound from Elastic over the public internet to your cluster's endpoint. Allow the connection with IP-based rules on your side. | **No.** {{ech}} deployments can't create private endpoints for customer networks. |

| Local cluster location | Remote cluster | Connection path | Private connectivity applicable? |
|---|---|---|---|
| {{ech}} deployment (any region or cloud provider) | {{ech}} deployment | Remote proxy address over public endpoints. Cross-region and cross-provider connections are supported. | **No.** Private connection hostnames resolve only inside your VPC or VNet through your private DNS zone. Deployment-to-deployment traffic originates from Elastic-managed networks and can't traverse your private endpoint. |
| Self-managed or {{ece}} cluster in your VPC or VNet | {{ech}} deployment | Public proxy address, or a private connection: create a VPC endpoint (AWS), private endpoint (Azure), or Private Service Connect endpoint (GCP) and connect to the remote cluster through it. Inter-region private connections are supported where the cloud provider supports them. | **Yes** (in this direction only). |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think that "in this direction only" is very clear. What direction?

Suggested change
| Self-managed or {{ece}} cluster in your VPC or VNet | {{ech}} deployment | Public proxy address, or a private connection: create a VPC endpoint (AWS), private endpoint (Azure), or Private Service Connect endpoint (GCP) and connect to the remote cluster through it. Inter-region private connections are supported where the cloud provider supports them. | **Yes** (in this direction only). |
| Self-managed or {{ece}} cluster in your VPC or VNet | {{ech}} deployment | Public proxy address, or a private connection: create a VPC endpoint (AWS), private endpoint (Azure), or Private Service Connect endpoint (GCP) and connect to the remote cluster through it. Inter-region private connections are supported where the cloud provider supports them. | **Yes** (customer network → ECH only). |

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants