ClusterLink Project
Disclaimers and Warnings
This is an incomplete work in progress, provided in the interest of sharing experience
and gathering feedback.
The code is pre-alpha quality right now. This means that it shouldn't be used in
production at all.
What Is ClusterLink?
The ClusterLink project simplifies the connection between application services that are
located in different domains, networks, and cloud infrastructures.
For more details, see the document: ClusterLink extended abstract.
ClusterLink deploys a gateway into each location, facilitating the configuration and
access to multi-cloud services.
The ClusterLink gateway contains the following components:
Control Plane
is responsible for maintaining the internal state of the gateway,
for all the communications with the remote peer gateways by means of the ClusterLink CP
Protocol (REST APIs), and for commanding the local DP to forward user traffic according
to policies.
Part of the control plane is the policy engine that can also apply network policies
(ACL, load-balancing, etc.)
Data Plane
responds to user connection requests, both local and remote,
initiates policy resolution in the CP, and maintains the established connections.
ClusterLink DP relies upon standard protocols and avoids redundant encapsulations,
presenting itself as a K8s service inside the cluster and as a regular HTTP endpoint
from outside the cluster, requiring only a single open port (HTTP/443) and leveraging
HTTP endpoints for connection multiplexing.
gwctl
is CLI implementation that uses REST APIs to send control messages to the
ClusterLink Gateway.
The ClusterLink APIs use the following entities for configuring cross cluster communication:
- Peer. Represent remote ClusterLink gateways and contain the metadata necessary for
creating protected connections to these remote peers.
- Exported service. Represent application services hosted in the local cluster and
exposed to remote ClusterLink gateways as Imported Service entities in those peers.
- Imported service. Represent remote application services that the gateway makes
available locally to clients inside its cluster.
- Policy. Represent communication rules that must be enforced for all cross-cluster
communications at each ClusterLink gateway.
Getting Started
Building ClusteLink
Here are the key steps for setting up your developer environment, making a change and testing it:
- Install Go version 1.20 or higher.
- Clone our repository with
git clone git@github.com:clusterlink-net/clusterlink.git
.
- Run
make test-prereqs
and manually install any missing required development tools.
- Run
make build
to ensure the code builds fine. This will pull in all needed
dependencies.
- If you are planning on contributing back to the project, please see our
contribution guide.
How to setup and run ClusterLink
ClusterLink can be set up and run on different environments: local environment (Kind),
Bare-metal environment, or cloud environment. For more details, refer to the Installation Guide for ClusterLink.
Run ClusterLink in local environment (Kind)
ClusterLink can run in any K8s environment, such as Kind.
To run the ClusterLink in a Kind environment, follow one of the examples:
- Performance example - Run iPerf3 test between iPerf3 client and server using ClusterLink
components. This example is used for performance measuring. Instructions can be found
Here.
- Application example - Run the BookInfo application in different clusters using ClusterLink
components. This example demonstrates communication distributed applications (in different
clusters) with different policies.Instructions can be found Here.
TBD
Run ClusterLink in cloud environment
TBD
Contributing
Our project welcomes contributions from any member of our community. To get
started contributing, please see our Contributor Guide.
Scope
In Scope
ClusterLink is intended to connect services and applications running in different clusters.
As such, the project will implement or has implemented:
- Remote Service sharing
- Extending private Cloud service endpoints to remote sites
- Centralized management (future)
Out of Scope
ClusterLink will be used in a cloud native environment with other
tools. The following specific functionality will therefore not be incorporated:
- Certificate management: ClusterLink uses certificates and trust bundles provided to
it. It does not manage certificate lifetimes, rotation, etc. - these are delegated to external tools.
- Enabling IP level connectivity between sites. ClusterLink uses existing network paths.
- Pod to Pod communications. ClusterLink works at the level of
Service
s (but you could create a Service per Pod
Pod to Pod communications. ClusterLink works at the level of Service
s , but can support this scenario by creating a service per pod.
Communications
License
This project is licensed under Apache License, v2.0.
Code contributions require Developer Certificate of Originality.
Code of Conduct
We follow the CNCF Code of Conduct.