Skip to content

Conversation

@eedugon
Copy link
Contributor

@eedugon eedugon commented Nov 7, 2025

This PR introduces the Remote Clusters -> API Key security model configuration for the following use cases:

  • ECH deployment to ECK-managed cluster
  • ECE deployment to ECE-managed cluster

TLS certificate-based authentication method (deprecated) has been left untouched, except of a minor step to expose the transport service of the destination ECK cluster, which was missing.

The procedure has been fully tested.

All based on snippets as the content of both pages is almost identital.

Relates to #1645

In future PRs we will handle the opposite use cases: ECK --> external clusters (self-managed, ECH/ECE, etc) setup.

Reviewing requests --> I'd like first a review from style and writing point of view and afterward we'll request a review from ECK devs in case they want to tweak or change anything.

@github-actions
Copy link

github-actions bot commented Nov 7, 2025

@eedugon eedugon marked this pull request as ready for review November 7, 2025 13:43
@eedugon eedugon requested a review from a team as a code owner November 7, 2025 13:43
Copy link
Collaborator

@shainaraskas shainaraskas left a comment

Choose a reason for hiding this comment

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

structurally lgtm. left some minor notes :)

Comment on lines +3 to +4
```sh
quickstart-es-remote-cluster ClusterIP None <none> 9443/TCP 4h13m
Copy link
Collaborator

Choose a reason for hiding this comment

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

I don't see a lot of value in this code snippet. would you consider removing it, or do you think it serves a specific purpose?

quickstart-es-remote-cluster ClusterIP None <none> 9443/TCP 4h13m
```

To allow other clusters running outside your Kubernetes environment to connect, you must expose this service externally. As of ECK {{version.eck}}, you cannot customize the service that ECK generates for the remote cluster interface, but you can create your own `LoadBalancer` service, `Ingress` object, or use another method available in your environment.
Copy link
Collaborator

Choose a reason for hiding this comment

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

do we need to specify "as of eck 3.2"? if this ever changes that change will be reflected here

--port=9443 --target-port=9443
```

1. On cloud providers which support external load balancers, setting the type to LoadBalancer provisions a load balancer for your service. Alternatively, expose the service `<cluster-name>-es-remote-cluster` through one of the Kubernetes Ingress controllers that support TCP services.
Copy link
Collaborator

Choose a reason for hiding this comment

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

Suggested change
1. On cloud providers which support external load balancers, setting the type to LoadBalancer provisions a load balancer for your service. Alternatively, expose the service `<cluster-name>-es-remote-cluster` through one of the Kubernetes Ingress controllers that support TCP services.
1. On cloud providers that support external load balancers, setting the type to `LoadBalancer` provisions a load balancer for your service. Alternatively, expose the service `<cluster-name>-es-remote-cluster` through one of the Kubernetes Ingress controllers that support TCP services.


* **{{es}} TLS termination**

If the connection reaches the {{es}} Pods without intermediate TLS termination, the {{es}} nodes present their transport certificates managed by ECK. The local cluster must therefore trust these certificates by including the ECK-managed transport CA, which you can retrieve in the next section.
Copy link
Collaborator

Choose a reason for hiding this comment

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

Suggested change
If the connection reaches the {{es}} Pods without intermediate TLS termination, the {{es}} nodes present their transport certificates managed by ECK. The local cluster must therefore trust these certificates by including the ECK-managed transport CA, which you can retrieve in the next section.
If the connection reaches the {{es}} Pods without intermediate TLS termination, the {{es}} nodes present transport certificates managed by ECK. The local cluster must therefore trust these certificates by including the ECK-managed transport CA, which you can retrieve in the next section.

1. On cloud providers which support external load balancers, setting the type to LoadBalancer provisions a load balancer for your service. Alternatively, expose the service `<cluster-name>-es-remote-cluster` through one of the Kubernetes Ingress controllers that support TCP services.


:::{admonition} About exposing the service and TLS certificates
Copy link
Collaborator

@shainaraskas shainaraskas Nov 10, 2025

Choose a reason for hiding this comment

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

didn't think too deeply about this, but does this snippet belong here, or would it make more sense in the Retrieve the ECK-managed CA certificate of the remote cluster server section (because that's what this information is relevant to)? you kind of have to restate some of your explanations the way you have the content organized.


If the external connections reach the {{es}} Pods on port `9443` without any intermediate TLS termination, you must retrieve this CA, as it will be required in the local cluster configuration to establish trust.

For example, to save the transport CA certificate of a cluster named `quickstart` into a local file, run:
Copy link
Collaborator

Choose a reason for hiding this comment

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

Suggested change
For example, to save the transport CA certificate of a cluster named `quickstart` into a local file, run:
For example, to save the transport CA certificate of a cluster named `quickstart` into a local file, run the following command:

-o go-template='{{index .data "ca.crt" | base64decode}}' > eck_transport_ca.crt
```

You can verify that the file contains a valid CA certificate by running:
Copy link
Collaborator

Choose a reason for hiding this comment

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

this is less fragmenty (localizes better)

Suggested change
You can verify that the file contains a valid CA certificate by running:
You can verify that the file contains a valid CA certificate by running the following command:

::::{important}
ECK-managed CA certificates are automatically rotated after one year by default, but you can [configure](/deploy-manage/deploy/cloud-on-k8s/configure-eck.md) a different validity period.

Ensure that this CA is updated in all environments where it's used after rotation to preserve trust.
Copy link
Collaborator

Choose a reason for hiding this comment

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

maybe? generally better to start a sentence with its context ("when x") before diving into the action. helps people skim.

Suggested change
Ensure that this CA is updated in all environments where it's used after rotation to preserve trust.
When the CA certificate is rotated, ensure that this CA is updated in all environments where it's used to preserve trust.


#### Establish trust in the {{ece}} cluster [ece_establish_trust_in_the_elastic_cloud_enterprise_cluster]

1. Save the ECK CA certificate to a file. For a cluster named `quickstart`, run:
Copy link
Collaborator

Choose a reason for hiding this comment

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

this is old - not sure if you were planning on changing it - but this pattern of linking deeply into the other tutorial is not ideal. I realize this is the deprecated approach so it's not as important to tidy up, but just stating this for the record.

Comment on lines +3 to +9
::::{note}
When configuring the remote cluster connection:

* **Remote address**: Use the FQDN or IP address of the LoadBalancer service, or similar resource, you created to expose the remote cluster server interface (for API key-based authentication) or the transport interface (for TLS certificate-based authentication).

* **TLS server name**: You can try leaving this field empty first. If the connection fails, and your environment is presenting the ECK-managed certificates during the TLS handshake, use `<cluster-name>-es-remote-cluster.<namespace>.svc` as the server name. For example, for a cluster named `quickstart` in the `default` namespace, use `quickstart-es-remote-cluster.default.svc`.
::::
Copy link
Collaborator

Choose a reason for hiding this comment

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

I don't think this should be in a note. it's basics about the variables.

type: LoadBalancer <1>
```
1. On cloud providers which support external load balancers, setting the type field to LoadBalancer provisions a load balancer for your service. Alternatively, expose the service `<cluster-name>-es-transport` through one of the Kubernetes Ingress controllers that support TCP services.
Copy link
Collaborator

Choose a reason for hiding this comment

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

Suggested change
1. On cloud providers which support external load balancers, setting the type field to LoadBalancer provisions a load balancer for your service. Alternatively, expose the service `<cluster-name>-es-transport` through one of the Kubernetes Ingress controllers that support TCP services.
1. On cloud providers which support external load balancers, setting the type field to `LoadBalancer` provisions a load balancer for your service. Alternatively, expose the service `<cluster-name>-es-transport` through one of the Kubernetes Ingress controllers that support TCP services.

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.

3 participants