From 8619d02a3f8a6f7a8b6cdc09a5157ed5aac7a2df Mon Sep 17 00:00:00 2001 From: MICHAL MALKA Date: Wed, 24 Jul 2024 15:47:30 +0300 Subject: [PATCH 1/4] fix notice note in document to looks as all notes (with blue background) Signed-off-by: MICHAL MALKA --- website/content/en/docs/main/tasks/relay/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/content/en/docs/main/tasks/relay/index.md b/website/content/en/docs/main/tasks/relay/index.md index e7905bab..51242e61 100644 --- a/website/content/en/docs/main/tasks/relay/index.md +++ b/website/content/en/docs/main/tasks/relay/index.md @@ -56,8 +56,8 @@ This is an extension of the basic [nginx toturial][]. Please run it first and se ``` {{< notice note >}} - The relay cluster certificates should use the same Fabric CA files as the server and the client. - {{< /notice >}} + The relay cluster certificates should use the same Fabric CA files as the server and the client. + {{< /notice >}} 1. Deploy ClusterLink on the relay cluster: From 7c88ffc8d0c20613bd6db12605bb1cf544162cac Mon Sep 17 00:00:00 2001 From: Kfir Toledo Date: Wed, 24 Jul 2024 16:00:00 +0300 Subject: [PATCH 2/4] [website]: update docs to release v0.4 (#676) Add documentation for ClusterLink version v0.4.0. Signed-off-by: Kfir Toledo --- website/config.toml | 5 +- website/content/en/docs/v0.4/_index.md | 12 + .../content/en/docs/v0.4/concepts/_index.md | 5 + .../content/en/docs/v0.4/concepts/fabric.md | 54 +++ .../content/en/docs/v0.4/concepts/peers.md | 214 ++++++++++ .../content/en/docs/v0.4/concepts/policies.md | 183 +++++++++ .../content/en/docs/v0.4/concepts/services.md | 258 ++++++++++++ .../en/docs/v0.4/doc-contribution/_index.md | 96 +++++ .../en/docs/v0.4/getting-started/_index.md | 14 + .../docs/v0.4/getting-started/developers.md | 81 ++++ .../en/docs/v0.4/getting-started/users.md | 128 ++++++ .../content/en/docs/v0.4/overview/_index.md | 51 +++ website/content/en/docs/v0.4/tasks/_index.md | 5 + .../content/en/docs/v0.4/tasks/operator.md | 195 +++++++++ .../tasks/private-networks/frp-system.png | Bin 0 -> 173516 bytes .../docs/v0.4/tasks/private-networks/index.md | 378 +++++++++++++++++ .../content/en/docs/v0.4/tasks/relay/index.md | 165 ++++++++ .../en/docs/v0.4/tasks/relay/nginx-relay.png | Bin 0 -> 112485 bytes .../content/en/docs/v0.4/tutorials/_index.md | 5 + .../docs/v0.4/tutorials/bookinfo/bookinfo.png | Bin 0 -> 173819 bytes .../en/docs/v0.4/tutorials/bookinfo/index.md | 380 ++++++++++++++++++ .../en/docs/v0.4/tutorials/iperf/index.md | 288 +++++++++++++ .../en/docs/v0.4/tutorials/nginx/index.md | 268 ++++++++++++ 23 files changed, 2784 insertions(+), 1 deletion(-) create mode 100644 website/content/en/docs/v0.4/_index.md create mode 100644 website/content/en/docs/v0.4/concepts/_index.md create mode 100644 website/content/en/docs/v0.4/concepts/fabric.md create mode 100644 website/content/en/docs/v0.4/concepts/peers.md create mode 100644 website/content/en/docs/v0.4/concepts/policies.md create mode 100644 website/content/en/docs/v0.4/concepts/services.md create mode 100644 website/content/en/docs/v0.4/doc-contribution/_index.md create mode 100644 website/content/en/docs/v0.4/getting-started/_index.md create mode 100644 website/content/en/docs/v0.4/getting-started/developers.md create mode 100644 website/content/en/docs/v0.4/getting-started/users.md create mode 100644 website/content/en/docs/v0.4/overview/_index.md create mode 100644 website/content/en/docs/v0.4/tasks/_index.md create mode 100644 website/content/en/docs/v0.4/tasks/operator.md create mode 100644 website/content/en/docs/v0.4/tasks/private-networks/frp-system.png create mode 100644 website/content/en/docs/v0.4/tasks/private-networks/index.md create mode 100644 website/content/en/docs/v0.4/tasks/relay/index.md create mode 100644 website/content/en/docs/v0.4/tasks/relay/nginx-relay.png create mode 100644 website/content/en/docs/v0.4/tutorials/_index.md create mode 100644 website/content/en/docs/v0.4/tutorials/bookinfo/bookinfo.png create mode 100644 website/content/en/docs/v0.4/tutorials/bookinfo/index.md create mode 100644 website/content/en/docs/v0.4/tutorials/iperf/index.md create mode 100644 website/content/en/docs/v0.4/tutorials/nginx/index.md diff --git a/website/config.toml b/website/config.toml index 8c28a749..e5fc9f86 100644 --- a/website/config.toml +++ b/website/config.toml @@ -125,7 +125,7 @@ archived_version = false # point people to the main doc site. # url_latest_version = "https://clusterlink.net" -latest_stable_version = "v0.3" +latest_stable_version = "v0.4" # Repository configuration (URLs for in-page links to opening issues and suggesting changes) github_repo = "https://github.com/clusterlink-net/clusterlink" @@ -234,6 +234,9 @@ path = "github.com/martignoni/hugo-notice" version = "main-DRAFT" url = "/docs/main" +[[params.versions]] +version = "v0.4" +url = "/docs/v0.4/" [[params.versions]] version = "v0.3" diff --git a/website/content/en/docs/v0.4/_index.md b/website/content/en/docs/v0.4/_index.md new file mode 100644 index 00000000..dd752fb4 --- /dev/null +++ b/website/content/en/docs/v0.4/_index.md @@ -0,0 +1,12 @@ +--- +title: v0.4 +cascade: + version: v0.4 + versName: &name v0.4 + git_version_tag: v0.4.0 + exclude_search: false +linkTitle: *name +simple_list: true +weight: -9999 # Weight for doc version vX.Y should be -(100*X + Y)0 +# For example: v0.2.x => -20 v3.6.7 => -3060. `main` is arbitrarily set to -9999 +--- diff --git a/website/content/en/docs/v0.4/concepts/_index.md b/website/content/en/docs/v0.4/concepts/_index.md new file mode 100644 index 00000000..5ea1086e --- /dev/null +++ b/website/content/en/docs/v0.4/concepts/_index.md @@ -0,0 +1,5 @@ +--- +title: Core Concepts +description: Core Concepts of the ClusterLink system +weight: 30 +--- diff --git a/website/content/en/docs/v0.4/concepts/fabric.md b/website/content/en/docs/v0.4/concepts/fabric.md new file mode 100644 index 00000000..fdf39206 --- /dev/null +++ b/website/content/en/docs/v0.4/concepts/fabric.md @@ -0,0 +1,54 @@ +--- +title: Fabric +description: Defining a ClusterLink fabric +weight: 10 +--- + +The concept of a *Fabric* encapsulates a set of cooperating [peers][]. + All peers in a fabric can communicate and may share [services][] + between them, with access governed by [policies][]. + The Fabric acts as a root of trust for peer-to-peer communications (i.e., + it functions as the certificate authority enabling mutual authentication between + peers). + +Currently, the concept of a Fabric is just that - a concept. It is not represented + or backed by any managed resource in a ClusterLink deployment. Once a Fabric is created, + its only relevance is in providing a certificate for use by each peer's gateways. + One could potentially consider a more elaborate implementation where a central + management entity explicitly deals with Fabric life cycle, association of peers to + a fabric, etc. The role of this central management component in ClusterLink is currently + delegated to users who are responsible for coordinating the transfer of certificates + between peers, out of band. + +## Initializing a new fabric + +### Prerequisites + +The following sections assume that you have access to the `clusterlink` CLI and one or more + peers (i.e., clusters) where you'll deploy ClusterLink. The CLI can be downloaded + from the ClusterLink [releases page on GitHub][]. + +### Create a new fabric CA + +To create a new fabric certificate authority (CA), execute the following CLI command: + +```sh +clusterlink create fabric --name +``` + +This command will create the CA files `cert.pem` and `key.pem` in a directory named . + The `--name` option is optional, and by default, "default_fabric" will be used. + While you will need access to these files to create the peers` gateway certificates later, + the private key file should be protected and not shared with others. + +## Related tasks + +Once a Fabric has been created and initialized, you can proceed with configuring + [peers][]. For a complete, end-to-end use case, please refer to the + [iperf tutorial][]. + +[peers]: {{< relref "peers" >}} +[services]: {{< relref "services" >}} +[policies]: {{< relref "policies" >}} +[releases page on GitHub]: https://github.com/clusterlink-net/clusterlink/releases/tag/{{% param git_version_tag %}} +[iperf tutorial]: {{< relref "../tutorials/iperf" >}} diff --git a/website/content/en/docs/v0.4/concepts/peers.md b/website/content/en/docs/v0.4/concepts/peers.md new file mode 100644 index 00000000..16b43118 --- /dev/null +++ b/website/content/en/docs/v0.4/concepts/peers.md @@ -0,0 +1,214 @@ +--- +title: Peers +description: Defining ClusterLink peers as part of a fabric +weight: 20 +--- + +A *Peer* represents a location, such as a Kubernetes cluster, participating in a + [fabric][]. Each peer may host one or more [services][] + that it may wish to share with other peers. A peer is managed by a peer administrator, + which is responsible for running the ClusterLink control and data planes. The + administrator will typically deploy the ClusterLink components by configuring + the [Deployment Custom Resource (CR)][operator-cr]. They may also wish to define + coarse-grained access policies, in accordance with high level corporate + policies (e.g., "production peers should only communicate with other production peers"). + +Once a peer has been added to a fabric, it can communicate with any other peer + belonging to it. All configuration relating to service sharing (e.g., the exporting + and importing of services, and the setting of fine grained application policies) can be + done with lowered privileges (e.g., by users, such as application owners). Remote peers are + represented by the Peer Custom Resources (CRs). Each peer CR instance + defines a remote cluster and the network endpoints of its ClusterLink gateways. + +## Prerequisites + +The following sections assume that you have access to the `clusterlink` CLI and one or more + peers (i.e., clusters) where you'll deploy ClusterLink. The CLI can be downloaded + from the ClusterLink [releases page on GitHub][]. + It also assumes that you have access to the [previously created fabric][] + CA files. + +## Initializing a new peer + +{{< notice warning >}} +Creating a new peer is a **fabric administrator** level operation and should be appropriately + protected. +{{< /notice >}} + +### Create a new peer certificate + +To create a new peer certificate belonging to a fabric, confirm that the fabric + Certificate Authority (CA) files are available in the current working directory, + and then execute the following CLI command: + +```sh +clusterlink create peer-cert --name --fabric +``` + +{{< notice tip >}} +The fabric CA files (certificate and private key) are expected to be in a subdirectory + (i.e., `.//cert.name` and `.//key.pem`). +{{< /notice >}} + +This will create the certificate and private key files (`cert.pem` and + `key.pem`, respectively) of the new peer. By default, the files are + created in a subdirectory named `` under the subdirectory of the fabric ``. + You can override the default by setting the `--output ` option. + +{{< notice info >}} +You will need the CA certificate (but **not** the CA private key) and the peer's certificate + and private key pair in the next step. They can be provided out of band (e.g., over email) to the + peer administrator or by any other means for secure transfer of sensitive data. +{{< /notice >}} + +## Deploy ClusterLink to a new peer + +{{< notice info >}} +This operation is typically done by a local **peer administrator**, usually different + than the **fabric administrator**. +{{< /notice >}} + +Before proceeding, ensure that the following files (created in the previous step) are + available in the current working directory: + + 1. CA certificate; + 1. peer certificate; and + 1. peer private key. + +### Install the ClusterLink deployment operator + +Install the ClusterLink operator by running the following command: + +```sh +clusterlink deploy peer --name --fabric +``` + +The command assumes that kubectl is set to the correct context and credentials + and that the certificates were created in respective sub-directories + under the current working directory. + If they were not, add the `--path ` CLI option to set the correct path. + +This command will deploy the ClusterLink deployment CRDs using the current + `kubectl` context. The operation requires cluster administrator privileges + in order to install CRDs into the cluster. + The ClusterLink operator is installed to the `clusterlink-operator` namespace. + The CA, peer certificate, and private key are set as K8s secrets + in the namespace where ClusterLink components are installed, which by default is + `clusterlink-system`. You can confirm the successful completion of this step + using the following commands: + +```sh +kubectl get crds +kubectl get secret --namespace clusterlink-system +``` + +{{% expand summary="Example output" %}} + +```sh +$ kubectl get crds +NAME CREATED AT +accesspolicies.clusterlink.net 2024-04-07T12:08:24Z +exports.clusterlink.net 2024-04-07T12:08:24Z +imports.clusterlink.net 2024-04-07T12:08:24Z +instances.clusterlink.net 2024-04-07T12:08:24Z +peers.clusterlink.net 2024-04-07T12:08:24Z +privilegedaccesspolicies.clusterlink.net 2024-04-07T12:08:24Z + +$ kubectl get secret --namespace clusterlink-system +NAME TYPE DATA AGE +cl-controlplane Opaque 2 19h +cl-dataplane Opaque 2 19h +cl-ca Opaque 1 19h +cl-peer Opaque 1 19h +``` + +{{% /expand %}} + +### Deploy ClusterLink via the operator and ClusterLink CR + +After the operator is installed, you can deploy ClusterLink by applying + the ClusterLink CR. This will cause the ClusterLink operator to + attempt reconciliation of the actual and intended ClusterLink deployment. + By default, the operator will install the ClusterLink control and data plane + components into a dedicated and privileged namespace (defaults to `clusterlink-system`). + Configurations affecting the entire peer, such as the list of known peers, are also maintained + in the same namespace. + +Refer to the [operator documentation][] for a description of the ClusterLink CR fields. + +## Add or remove peers + +{{< notice info >}} +This operation is typically done by a local **peer administrator**, usually different + than the **fabric administrator**. +{{< /notice >}} + +Managing peers is done by creating, deleting and updating peer CRs + in the dedicated ClusterLink namespace (typically, `clusterlink-system`). Peers are + added to the ClusterLink namespace by the peer administrator. Information + regarding peer gateways and attributes is communicated out of band (e.g., provided + by the fabric or remote peer administrator over email). In the future, these may + be configured via a management plane. + +{{% expand summary="Peer Custom Resource" %}} + +```go +type Peer struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + Spec PeerSpec `json:"spec"` + Status PeerStatus `json:"status,omitempty"` +} + + +type PeerSpec struct { + Gateways []Endpoint `json:"gateways"` +} + +type PeerStatus struct { + Conditions []metav1.Condition `json:"conditions,omitempty"` +} + +type Endpoint struct { + Host string `json:"host"` + Port uint16 `json:"port"` +} +``` + +{{% /expand %}} + +There are two fundamental attributes in the peer CRD: the peer name and the list of + ClusterLink gateway endpoints through which the remote peer's services are available. + Peer names are unique and must align with the Subject name present in their certificate + during connection establishment. The name is used by importers in referencing an export + (see [services][] for details). + +Gateway endpoint would typically be implemented via a `NodePort` or `LoadBalancer` + K8s service. A `NodePort` service would typically be used in local deployments + (e.g., when running in kind clusters during development) and a `LoadBalancer` service + would be used in cloud-based deployments. These can be automatically configured and + created via the [ClusterLink CR][]. + The peer's status section includes a `Reachable` condition indicating whether the peer is currently reachable, + and in case it is not reachable, the last time it was. + +{{% expand summary="Example YAML for `kubectl apply -f `" %}} +{{< readfile file="/static/files/peer_crd_sample.yaml" code="true" lang="yaml" >}} +{{% /expand %}} + +## Related tasks + +Once a peer has been created and initialized with the ClusterLink control and data + planes as well as one or more remote peers, you can proceed with configuring + [services][] and [policies][]. + For a complete end-to-end use case, refer to the [iperf tutorial][]. + +[fabric]: {{< relref "fabric" >}} +[previously created fabric]: {{< relref "fabric#create-a-new-fabric-ca" >}} +[services]: {{< relref "services" >}} +[policies]: {{< relref "policies" >}} +[releases page on GitHub]: https://github.com/clusterlink-net/clusterlink/releases/tag/{{% param git_version_tag %}} +[operator-cr]: {{< relref "../tasks/operator#deploy-cr-instance" >}} +[operator documentation]: {{< relref "../tasks/operator#commandline-flags" >}} +[ClusterLink CR]: {{< relref "peers#deploy-clusterlink-via-the-operator-and-clusterlink-cr" >}} +[iperf tutorial]: {{< relref "../tutorials/iperf" >}} diff --git a/website/content/en/docs/v0.4/concepts/policies.md b/website/content/en/docs/v0.4/concepts/policies.md new file mode 100644 index 00000000..d8ac5caf --- /dev/null +++ b/website/content/en/docs/v0.4/concepts/policies.md @@ -0,0 +1,183 @@ +--- +title: Access Policies +description: Controlling service access across peers +weight: 40 +--- + +Access policies allow users and administrators fine-grained control over + which client workloads may access which service. This is an important security + mechanism for applying [micro-segmentation][], which is a basic requirement of [zero-trust][] + systems. Another zero-trust principle, "Deny by default / Allow by exception," is also + addressed by ClusterLink's access policies: a connection without an explicit policy allowing it + will be dropped. Access policies can also be used for enforcing corporate security rules, + as well as segmenting the fabric into trust zones. + +ClusterLink's access policies are based on attributes that are attached to + [peers][], [services][] and client workloads. + Each attribute is a key/value pair, similar to how [labels][] + are used in Kubernetes. This approach, called ABAC (Attribute Based Access Control), + allows referring to a set of entities in a single policy, rather than listing individual + entity names. Using attributes is safer, more resilient to changes, and easier to + control and audit. At the moment, a limited set of attributes is available to use. + We plan to enrich this set in the future. + +Every instance of an access policy either allows or denies a given set of connections. +This set is defined by specifying the sources and destinations of these connections. +Sources are defined in terms of the attributes attached to the client workloads. +Destinations are defined in terms of the attributes attached to the target services. +Both client workloads and target services may inherit some attributes from their hosting peer. + +There are two tiers of access policies in ClusterLink. The high-priority tier + is intended for cluster/peer administrators to set access rules which cannot be + overridden by cluster users. High-priority policies are controlled by the + `PrivilegedAccessPolicy` CRD, and are cluster scoped (i.e., have no namespace). + Regular policies are intended for cluster users, such as application developers + and owners, and are controlled by the `AccessPolicy` CRD. Regular policies are + namespaced, and have an effect in their namespace only. That is, they do not + affect connections to/from other namespaces. + +For a connection to be established, both the ClusterLink gateway on the client + side and the ClusterLink gateway on the service side must allow the connection. + Each gateway (independently) follows these steps to decide if the connection is allowed: + +1. All instances of `PrivilegedAccessPolicy` in the cluster with `deny` action are considered. + If the connection matches any of them, the connection is dropped. +1. All instances of `PrivilegedAccessPolicy` in the cluster with `allow` action are considered. + If the connection matches any of them, the connection is allowed. +1. All instances of `AccessPolicy` in the relevant namespace with `deny` action are considered. + If the connection matches any of them, the connection is dropped. +1. All instances of `AccessPolicy` in the relevant namespace with `allow` action are considered. + If the connection matches any of them, the connection is allowed. +1. If the connection matched none of the above policies, the connection is dropped. + +**Note**: The relevant namespace for a given connection is the namespace of + the corresponding Import CR on the client side and the namespace of the corresponding + Export on the service side. + +## Prerequisites + +The following assumes that you have `kubectl` access to two or more clusters where ClusterLink + has already been [deployed and configured][]. + +### Creating access policies + +Recall that a connection is dropped if it does not match any access policy. + Hence, for a connection to be allowed, an access policy with an `allow` action + must be created on both sides of the connection. + Creating an access policy is accomplished by creating an `AccessPolicy` CR in + the relevant namespace (see note above). + Creating a high-priority access policy is accomplished by creating a `PrivilegedAccessPolicy` CR. + Instances of `PrivilegedAccessPolicy` have no namespace and affect the entire cluster. + +{{% expand summary="PrivilegedAccessPolicy and AccessPolicy Custom Resources" %}} + +```go +type PrivilegedAccessPolicy struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + Spec AccessPolicySpec `json:"spec,omitempty"` +} + +type AccessPolicy struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + Spec AccessPolicySpec `json:"spec,omitempty"` +} + +type AccessPolicySpec struct { + Action AccessPolicyAction `json:"action"` + From WorkloadSetOrSelectorList `json:"from"` + To WorkloadSetOrSelectorList `json:"to"` +} + +type AccessPolicyAction string + +const ( + AccessPolicyActionAllow AccessPolicyAction = "allow" + AccessPolicyActionDeny AccessPolicyAction = "deny" +) + +type WorkloadSetOrSelectorList []WorkloadSetOrSelector + +type WorkloadSetOrSelector struct { + WorkloadSets []string `json:"workloadSets,omitempty"` + WorkloadSelector *metav1.LabelSelector `json:"workloadSelector,omitempty"` +} +``` + +{{% /expand %}} + +The `AccessPolicySpec` defines the following fields: + +- **Action** (string, required): whether the policy allows or denies the + specified connection. Value must be either `allow` or `deny`. +- **From** (WorkloadSetOrSelector array, required): specifies connection sources. + A connection's source must match one of the specified sources to be matched by the policy. +- **To** (WorkloadSetOrSelectorList array, required): specifies connection destinations. + A connection's destination must match one of the specified destinations to be matched by the policy. + +A `WorkloadSetOrSelector` object has two fields; exactly one of them must be specified. + +- **WorkloadSets** (string array, optional) - an array of predefined sets of workload. + Currently not supported. +- **WorkloadSelector** (LabelSelector, optional) - a [Kubernetes label selector][] + defining a set of client workloads or a set of services, based on their + attributes. An empty selector matches all workloads/services. + +### Example policies +The following policy allows all incoming/outgoing connections in the `default` namespace. + +```yaml +apiVersion: clusterlink.net/v1alpha1 +kind: AccessPolicy +metadata: + name: allow-all + namespace: default +spec: + action: allow + from: + - workloadSelector: {} + to: + - workloadSelector: {} +``` + +The following privileged policy denies incoming/outgoing connections originating from a cluster with a Peer named `testing`. +```yaml +apiVersion: clusterlink.net/v1alpha1 +kind: PrivilegedAccessPolicy +metadata: + name: deny-from-testing +spec: + action: deny + from: + - workloadSelector: + matchLabels: + peer.clusterlink.net/name: testing + to: + - workloadSelector: {} +``` + +More examples are available on our repo under [examples/policies][]. + +### Available attributes +The following attributes (labels) are set by ClusterLink on each connection request, and can be used in access policies within a `workloadSelector`. +#### Peer attributes - set when running `clusterlink deploy peer` +* `peer.clusterlink.net/name` - Peer name +#### Client attributes - derived from Pod info, as retrieved from Kubernetes API. Only relevant in the `from` section of access policies +* `client.clusterlink.net/namespace` - Pod's Namespace +* `client.clusterlink.net/service-account` - Pod's Service Account +* `client.clusterlink.net/labels.` - Pod's labels - an attribute for each Pod label with key `` +#### Service attributes - derived from the Export CR. Only relevant in the `to` section of access policies +* `export.clusterlink.net/name` - Export name +* `export.clusterlink.net/namespace` - Export namespace + +[peers]: {{< relref "peers" >}} +[services]: {{< relref "services" >}} +[micro-segmentation]: https://en.wikipedia.org/wiki/Microsegmentation_(network_security) +[zero-trust]: https://en.wikipedia.org/wiki/Zero_trust_security_model +[labels]: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ +[deployed and configured]: {{< relref "../getting-started/users#setup" >}} +[Kuberenetes label selector]: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#labelselector-v1-meta +[examples/policies]: https://github.com/clusterlink-net/clusterlink/tree/main/examples/policies diff --git a/website/content/en/docs/v0.4/concepts/services.md b/website/content/en/docs/v0.4/concepts/services.md new file mode 100644 index 00000000..1b078779 --- /dev/null +++ b/website/content/en/docs/v0.4/concepts/services.md @@ -0,0 +1,258 @@ +--- +title: Services +description: Sharing services +weight: 30 +--- + +ClusterLink uses services as the unit of sharing between peers. + One or more peers can expose an (internal) K8s Service to + be consumed by other [peers][] in the [fabric][]. + A service is exposed by creating an *Export* CR referencing it in the + source cluster. Similarly, the exported service can be made accessible to workloads + in a peer by defining an *Import* CR in the destination cluster[^KEP-1645]. + Thus, service sharing is an explicit operation. Services are not automatically + shared by peers in the fabric. Note that the exporting cluster must be + [configured as a peer][] of the importing cluster. + +{{< notice info >}} +Services sharing is done on a per namespace basis and does not require cluster wide privileges. + It is intended to be used by application owners having access to their own namespaces only. +{{< /notice >}} + +A service is shared using a logical name. The logical name does not have to match + the actual Kubernetes Service name in the exporting cluster. Exporting a service + does not expose cluster Pods or their IP addresses to the importing clusters. + Any load balancing and scaling decisions are kept local in the exporting cluster. + This reduces the amount, frequency and sensitivity of information shared between + clusters. Similarly, the imported service can have any arbitrary name in the + destination cluster, allowing independent choice of naming. + +Orchestration of service sharing is the responsibility of users wishing to + export or import it, and any relevant information (e.g, the exported service + name and namespace) must be communicated out of band. In the future, this could + be done by a centralized management plane. + + + + + +## Prerequisites + +The following assume that you have `kubectl` access to two or more clusters where ClusterLink + has already been [deployed and configured][]. + +### Exporting a service + +In order to make a service potentially accessible by other clusters, it must be + explicitly configured for remote access via ClusterLink. Exporting is + accomplished by creating an Export CR in the **same** namespace + as the service being exposed. The CR acts as a marker for enabling + remote access to the service via ClusterLink. + +{{% expand summary="Export Custom Resource" %}} + +```go +type Export struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + Spec ExportSpec `json:"spec,omitempty"` + Status ExportStatus `json:"status,omitempty"` +} + +type ExportSpec struct { + Host string `json:"host,omitempty"` + Port uint16 `json:"port,omitempty"` +} + +type ExportStatus struct { + Conditions []metav1.Condition `json:"conditions,omitempty"` +} +``` + +{{% /expand %}} + +The ExportSpec defines the following fields: + +- **Host** (string, optional): the name of the service being exported. The service + must be defined in the same namespace as the Export CR. If empty, + the export shall refer to a Kubernetes Service with the same name as the instance's + `metadata.name`. It is an error to refer to a non-existent service or one that is + not present in the local namespace. The error will be reflected in the CRD's status. +- **Port** (integer, required): the port number being exposed. If you wish to export + a multi-port service[^multiport], you will need to define multiple Exports using + the same `Host` value and a different `Port` each. This is aligned with ClusterLink's + principle of being explicit in sharing and limiting exposure whenever possible. + +Note that exporting a Service does not automatically make is accessible to other + peers, but only enables *potential* access. To complete service sharing, you must + define at least one [access control policy][concept-policy] that allows + access in the exporting cluster. + In addition, users in consuming clusters must still explicitly configure + [service imports][] and [policies][] in their respective namespaces. + +{{% expand summary="Example YAML for `kubectl apply -f `" %}} + +```yaml +apiVersion: clusterlink.net/v1alpha1 +kind: Export +metadata: + name: iperf3-server + namespace: default +spec: + port: 5000 +``` + +{{% /expand %}} + +### Importing a service + +Exposing remote services to a peer is accomplished by creating an Import CR + to a namespace. The CR represents the imported service and its + available backends across all peers. In response to an Import CR, ClusterLink + control plane will create a local Kubernetes Service selecting the ClusterLink + data plane Pods. The use of native Kubernetes constructs, allows ClusterLink + to work with any compliant cluster and CNI, transparently. + +The Import instance creates the service endpoint in the same namespace as it is + defined in. The created service will have the Import's `metadata.Name`. This + allows maintaining independent names for services between peers. Alternately, + you may use the same name for the import and related source exports. + You can define multiple Import CRs for the same set of Exports in different + namespaces. These are independent of each other. + +{{% expand summary="Import Custom Resource" %}} + +```go +type Import struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + Spec ImportSpec `json:"spec"` + Status ImportStatus `json:"status,omitempty"` +} + +type ImportSpec struct { + Port uint16 `json:"port"` + TargetPort uint16 `json:"targetPort,omitempty"` + Sources []ImportSource `json:"sources"` + LBScheme string `json:"lbScheme"` +} + +type ImportSource struct { + Peer string `json:"peer"` + ExportName string `json:"exportName"` + ExportNamespace string `json:"exportNamespace"` +} + +type ImportStatus struct { + Conditions []metav1.Condition `json:"conditions,omitempty"` +} +``` + +{{% /expand %}} + +The ImportSpec defines the following fields: + +- **Port** (integer, required): the imported, user facing, port number defined + on the created service object. +- **TargetPort** (integer, optional): this is the internal listening port + used by the ClusterLink data plane pods to represent the remote services. Typically the + choice of TargetPort should be left to the ClusterLink control plane, allowing + it to select a random and non-conflicting port, but there may be cases where + you wish to assume responsibility for port selection (e.g., a-priori define + local cluster Kubernetes NetworkPolicy object instances). This may result in + [port conflicts][] as is done for NodePort services. +- **Sources** (source array, required): references to remote exports providing backends + for the Import. Each reference names a different export through the combination of: + - *Peer* (string, required): name of ClusterLink peer where the export is defined. + - *ExportNamespace* (string, required): name of the namespace on the remote peer where + the export is defined. + - *ExportName* (string, required): name of the remote export. +- **LBScheme** (string, optional): load balancing method to select between different + Sources defined. The default policy is `random`, but you could override it to use + `round-robin` or `static` (i.e., fixed) assignment. + + + +As with exports, importing a service does not automatically make it accessible by + workloads, but only enables *potential* access. To complete service sharing, + you must define at least one [access control policy][] that + allows access in the importing cluster. To grant access, a connection must be + evaluated to "allow" by both egress (importing cluster) and ingress (exporting + cluster) policies. + +{{% expand summary="Example YAML for `kubectl apply -f `" %}} + +```yaml +apiVersion: clusterlink.net/v1alpha1 +kind: Import +metadata: + name: iperf3-server + namespace: default +spec: + port: 5000 + sources: + - exportName: iperf3-server + exportNamespace: default + peer: server +``` + +{{% /expand %}} + + +In certain cases, a service can be imported without creating another corresponding service at the imported side, but merging it along with a pre-existing service with the same `name`. This can be specified by adding the label `import.clusterlink.net/merge`, which is set to `true`. This would trigger the creation of an endpointslice which services requests to the imported service (by setting `kubernetes.io/service-name` to the imported service name). + +{{% expand summary="Example YAML for `kubectl apply -f `" %}} + +```yaml +apiVersion: clusterlink.net/v1alpha1 +kind: Import +metadata: + name: iperf3-server + namespace: default + labels: + import.clusterlink.net/merge: true +spec: + port: 5000 + sources: + - exportName: iperf3-server + exportNamespace: default + peer: server +``` +{{% /expand %}} + +## Related tasks + +Once a service is exported and imported by one or more clusters, you should + configure [polices][] governing its access. + For a complete end to end use case, refer to [iperf tutorial][]. + +[^KEP-1645]: While using similar terminology as the Kubernetes Multicluster Service + enhancement proposal ([MCS KEP][]), the ClusterLink implementation intentionally + differs from and is not compliant with the KEP (e.g., there is no `ClusterSet` + and "name sameness" assumption). + +[^multiport]: ClusterLink intentionally does not expose all service ports, as + typically only a small subset in a multi-port service is meant to be user + accessible, and other ports are service internal (e.g., ports used for internal + service coordination and replication). + +[fabric]: {{< relref "fabric" >}} +[peers]: {{< relref "peers" >}} +[configured as a peer]: {{< relref "peers#add-or-remove-peers" >}} +[policies]: {{< relref "policies" >}} +[service imports]: #importing-a-service +[port conflicts]: https://kubernetes.io/docs/concepts/services-networking/service/#avoid-nodeport-collisions +[access control policy]: {{< relref "policies" >}} +[iperf tutorial]: {{< relref "../tutorials/iperf" >}} +[deployed and configured]: {{< relref "../getting-started/users#setup" >}} +[MCS KEP]: https://github.com/kubernetes/enhancements/tree/master/keps/sig-multicluster/1645-multi-cluster-services-api diff --git a/website/content/en/docs/v0.4/doc-contribution/_index.md b/website/content/en/docs/v0.4/doc-contribution/_index.md new file mode 100644 index 00000000..b59dba19 --- /dev/null +++ b/website/content/en/docs/v0.4/doc-contribution/_index.md @@ -0,0 +1,96 @@ +--- +title: Contribution Guidelines +weight: 60 +description: How to contribute to the website +--- + +We use [Hugo][] to format and generate our [website][], the [Docsy][] theme + for styling and site structure, and [Netlify][] to manage the deployment of the site. + Hugo is an open-source static site generator that provides us with templates, + content organization in a standard directory structure, and a website generation + engine. We write the pages in Markdown (or HTML if you want), and Hugo wraps + them up into a website. + +All submissions, including submissions by project members, require review. We + use GitHub pull requests for this purpose. Consult + [GitHub Help][] for more information on using pull requests. + +## Quick start with Netlify + +Here's a quick guide to updating the docs. It assumes you're familiar with the + GitHub workflow and you're happy to use the automated preview of your website + updates: + +1. Fork the [ClusterLink repo][] on GitHub. +1. The documentation site is under the `website` directory. +1. Make your changes and send a pull request (PR). +1. If you're not yet ready for a review, add "WIP" to the PR name to indicate + it's a work in progress. (**Don't** add the Hugo property + "draft = true" to the page front matter, because that prevents the + auto-deployment of the content preview described in the next point). +1. Wait for the automated PR workflow to do some checks. When it's ready, + you should see a check named like this: **Pages changed - clusterlink-net** +1. Click **Details** to the right of "Pages changed" to see a preview + of your updates. Previews will be deployed to `https://deploy-preview---clusterlink-net.netlify.app/` +1. Continue updating your doc and pushing your changes until you're happy with + the content. +1. When you are ready for a review, add a comment to the PR, and remove any + "WIP" markers. + +## Updating a single page + +If you've just spotted something you'd like to change while using the docs, Docsy has a + shortcut for you: + +1. Click **Edit this page** in the top right hand corner of the page. +1. If you don't already have an up-to-date fork of the project repo, you are prompted to + get one - click **Fork this repository and propose changes** or **Update your Fork** to + get an up-to-date version of the project to edit. The appropriate page in your fork is + displayed in edit mode. +1. Follow the rest of the [Quick start with Netlify][] process above to make, preview, + and propose your changes. + +## Previewing your changes locally + +If you want to run your own local Hugo server to preview your changes as you work: + + + +1. Follow the instructions in [Getting started][] to install Hugo + and any other tools you need. You'll need at least **Hugo version 0.110** (we recommend + using the most recent available version), and it must be the **extended** version, + which supports SCSS. +1. Run `hugo server --gc` in the `website` directory. By default your site will be available + at http://localhost:1313/. Now that you're serving your site locally, Hugo will watch + for changes to the content and automatically refresh your site. +1. Continue with the usual GitHub workflow to edit files, commit them, push the + changes up to your fork, and create a pull request. + +## Creating an issue + +If you've found a problem in the docs, but you're not sure how to fix it yourself, + please create an [issue][] in the ClusterLink repo. + You can also create an issue about a specific page by clicking the **Create Issue** + button in the top right hand corner of the page. + +## Useful resources + +* [Docsy user guide][]: All about Docsy, including how it manages navigation, + look and feel, and multi-language support. +* [Hugo documentation][]: Comprehensive reference for Hugo. +* [Github Hello World!][]: A basic introduction to GitHub concepts and workflow. + + + +[Hugo]: https://gohugo.io/ +[website]: https://clusterlink.net +[Docsy]: https://github.com/google/docsy +[Netlify]: https://www.netlify.com/ +[GitHub Help]: https://help.github.com/articles/about-pull-requests/ +[Quick start with Netlify]: #quick-start-with-netlify +[Getting started]: {{< relref "../getting-started/" >}} +[ClusterLink repo]: https://github.com/clusterlink-net/clusterlink +[issue]: https://github.com/clusterlink-net/clusterlink/issues +[Docsy user guide]: https://www.docsy.dev/docs/ +[Hugo documentation]: https://gohugo.io/documentation/ +[Github Hello World!]: https://guides.github.com/activities/hello-world/ diff --git a/website/content/en/docs/v0.4/getting-started/_index.md b/website/content/en/docs/v0.4/getting-started/_index.md new file mode 100644 index 00000000..cb828f26 --- /dev/null +++ b/website/content/en/docs/v0.4/getting-started/_index.md @@ -0,0 +1,14 @@ +--- +title: Getting Started +description: Getting started guides for users and developers +weight: 20 +--- + +The following sections provide quick start guides for [users][] and [developers][]. + +If you're a content author who wishes to contribute additional documentation or guides, + please refer to the [contribution guidelines][]. + +[users]: {{< relref "users" >}} +[developers]: {{< relref "developers" >}} +[contribution guidelines]: {{< relref "../doc-contribution/" >}} diff --git a/website/content/en/docs/v0.4/getting-started/developers.md b/website/content/en/docs/v0.4/getting-started/developers.md new file mode 100644 index 00000000..3722293d --- /dev/null +++ b/website/content/en/docs/v0.4/getting-started/developers.md @@ -0,0 +1,81 @@ +--- +title: Developers +description: Setting up a development environment and contributing code +weight: 24 +--- + +This guide provides a quick start for developers wishing to contribute to ClusterLink. + +## Setting up a development environment + +Here are the key steps for setting up your developer environment, making a change and testing it: + +1. Install required tools (you can either do this manually or use the project's + [devcontainer specification][]) + - [Go][] version 1.20 or higher. + - [Git][] command line. + - We recommend using a [local development environment][] such as kind/kubectl for + local development and integration testing. + - Additional development packages, such as `goimports` and `golangci-lint`. See the full list in + [post-create.sh][]. +1. Clone our repository with `git clone git@github.com:clusterlink-net/clusterlink.git`. +1. Run `make test-prereqs` and install any missing required development tools. +1. Run `make build` to ensure the code builds as expected. This will pull in all needed + dependencies. + +## Making code changes + +- If you are planning on contributing back to the project, please carefully read the + [contribution guide][]. +- We follow [GitHub's Standard Fork & Pull Request Workflow][]. + +All contributed code should pass precommit checks such as linting and other tests. These + are run automatically as part of the CI process on every pull request. You may wish to + run these locally, before initiating a PR: + +```sh +$ make precommit +$ make unit-tests tests-e2e-k8s +$ go test ./... +``` + +Output of the end-to-end tests is saved to `/tmp/clusterlink-k8s-tests`. In case + of failures, you can also (re-)run individual tests by name: + +```sh +$ go test -v ./tests/e2e/k8s -testify.m TestConnectivity +``` + +### Tests in CICD + +All pull requests undergo automated testing before being merged. This includes, for example, + linting, end-to-end tests and DCO validation. Logs in CICD default to `info` level, and + can be increased to `debug` by setting environment variable `DEBUG=1`. You can also enable + debug logging from the UI when re-running a CICD job, by selecting "enable debug logging". + +## Release management + +ClusterLink releases, including container images and binaries, are built based + on version tags in github. Applying a tag that's prefixed by `-v` will automatically + trigger a new release through the github [release][] action. + +To aid in auto-generation of changelog from commits, please kindly mark all PR's + with one or more of the following labels: + +- `ignore-for-release`: PR should not be included in the changelog report. + This label should not be used together with any other label in this list. +- `documentation`: PR is a documentation update. +- `bugfix`: PR is fixing a bug in existing code. +- `enhancement`: PR provides new or extended functionality. +- `breaking-change`: PR introduces a breaking change in user facing aspects + (e.g., API or CLI). This label may be used in addition to other labels (e.g., + `bugfix` or `enhancement`). + +[devcontainer specification]: https://github.com/clusterlink-net/clusterlink/tree/main/.devcontainer/dev +[Go]: https://go.dev/doc/install +[Git]: https://git-scm.com/downloads +[local development environment]: https://kubernetes.io/docs/tasks/tools/ +[post-create.sh]: https://github.com/clusterlink-net/clusterlink/blob/main/.devcontainer/dev/post-create.sh +[contribution guide]: https://github.com/clusterlink-net/clusterlink/blob/main/CONTRIBUTING.md +[GitHub's Standard Fork & Pull Request Workflow]: https://gist.github.com/Chaser324/ce0505fbed06b947d962 +[release]: https://github.com/clusterlink-net/clusterlink/blob/main/.github/workflows/release.yml diff --git a/website/content/en/docs/v0.4/getting-started/users.md b/website/content/en/docs/v0.4/getting-started/users.md new file mode 100644 index 00000000..b9531319 --- /dev/null +++ b/website/content/en/docs/v0.4/getting-started/users.md @@ -0,0 +1,128 @@ +--- +title: Users +description: Installing and configuring a basic ClusterLink deployment +weight: 22 +--- + +This guide will give you a quick start on installing and setting up ClusterLink on a Kubernetes cluster. + +## Prerequisites + +Before you start, you must have access to a Kubernetes cluster. +For example, you can set up a local environment using [kind][]. + +## Installation + +1. {{< anchor install-cli>}}To install ClusterLink CLI on Linux or Mac, use the installation script: + + ```sh + curl -L https://github.com/clusterlink-net/clusterlink/releases/download/{{% param git_version_tag %}}/clusterlink.sh | sh - + ``` + +1. Check the installation by running the command: + + ```sh + clusterlink --version + ``` + +{{% expand summary="Download specific CLI version" %}} + To install a specific version of the ClusterLink CLI, use the URL path of the version release: + For example, to download version v0.2.1: + + ```sh + curl -L https://github.com/clusterlink-net/clusterlink/releases/download/v0.2.1/clusterlink.sh | sh - + ``` + +{{% /expand %}} + +## Setup + +To set up ClusterLink on a Kubernetes cluster, follow these steps: + +1. {{< anchor create-fabric-ca >}}Create the fabric's certificate authority (CA) certificate and private key: + + ```sh + clusterlink create fabric --name + ``` + + The ClusterLink fabric is defined as all K8s clusters (peers) that install ClusterLink gateways + and can share services between the clusters, enabling communication among those services. + This command will create the CA files `cert.pem` and `key.pem` in a directory named . + The `--name` option is optional, and by default, "default_fabric" will be used. + +1. {{< anchor create-peer-certs >}}Create a peer (cluster) certificate: + + ```sh + clusterlink create peer-cert --name --fabric + ``` + + This command will create the certificate files `cert.pem` and `key.pem` + in a directory named ``/``. + The `--path ` flag can be used to change the directory location. + Here too, the `--name` option is optional, and by default, "default_fabric" will be used. + +**All the peer certificates in the fabric should be created from the same fabric CA files in step 1.** + +1. {{< anchor install-cl-operator >}}Install ClusterLink deployment: + + ```sh + clusterlink deploy peer --name --fabric + ``` + + This command will deploy the ClusterLink operator on the `clusterlink-operator` namespace + and convert the peer certificates to secrets in the namespace where ClusterLink components will be installed. + By default, the `clusterlink-system` namespace is used. + In addition, it will create a ClusterLink instance custom resource object and deploy it to the operator. + The operator will then create the ClusterLink components in the `clusterlink-system` namespace and enable ClusterLink in the cluster. + The command assumes that `kubectl` is set to the correct peer (K8s cluster) + and that the certificates were created by running the previous command on the same working directory. + If they were not, use the flag `--path ` for pointing to the working directory + that was used in the previous command. + The `--fabric` option is optional, and by default, "default_fabric" will be used. + To install a specific image of ClusterLink use the `--tag ` flag. + For more details and deployment configuration see [ClusterLink deployment operator][]. +{{< notice note >}} +To set up ClusterLink on another cluster, create another set of peer certificates (step 2). +Deploy ClusterLink in a console with access to the cluster (step 3). +{{< /notice >}} + +## Try it out + +Check out the [ClusterLink tutorials][] for setting up multi-cluster connectivity + for applications using two or more clusters. + +## Uninstall ClusterLink + +1. To remove a ClusterLink instance from the cluster, please delete the ClusterLink instance custom resource. + The ClusterLink operator will subsequently remove all instance components (control-plane, data-plane, and ingress service). + + ```sh + kubectl delete instances.clusterlink.net -A --all + ``` + +2. To completely remove ClusterLink from the cluster, including the operator, CRDs, namespaces, and instances, + use the following command: + + ```sh + clusterlink delete peer --name peer1 + ``` + +{{< notice note >}} +This command using the current `kubectl` context. +{{< /notice >}} + +3. To uninstall the ClusterLink CLI, use the following command: + + ```sh + rm `which clusterlink` + ``` + +## Links for further information + +* [Kind](https://kind.sigs.k8s.io/) +* [ClusterLink deployment operator][] +* [ClusterLink tutorials][] + +[Kind]: https://kind.sigs.k8s.io/docs/user/quick-start/ +[ClusterLink deployment operator]: {{< relref "../tasks/operator/" >}} +[ClusterLink tutorials]: {{< relref "../tutorials/" >}} diff --git a/website/content/en/docs/v0.4/overview/_index.md b/website/content/en/docs/v0.4/overview/_index.md new file mode 100644 index 00000000..b2fc2285 --- /dev/null +++ b/website/content/en/docs/v0.4/overview/_index.md @@ -0,0 +1,51 @@ +--- +title: Overview +description: A high level overview of ClusterLink +weight: 10 +--- + +## What is ClusterLink? + + +ClusterLink simplifies the connection between application services that are located in different domains, + networks, and cloud infrastructures. + +## When should I use it? + + + +ClusterLink is useful when multiple parties are collaborating across administrative boundaries. + With ClusterLink, information sharing policies can be defined, customized, and programmatically + accessed around the world by the right people for maximum productivity while optimizing network + performance and security. + +## How does it work? + +ClusterLink uses a set of unprivileged gateways serving connections to and from K8s services according to policies + defined through the management APIs. ClusterLink gateways establish mTLS connections between them and + continuously exchange control-plane information, forming a secure distributed control plane. + In addition, ClusterLink gateways represent the remotely deployed services to applications running in a local cluster, + acting as L4 proxies. On connection establishment, the control plane components in the source and the target ClusterLink + gateways validate and establish the connection based on specified policies. + +## Why is it unique? + +The distributed control plane and the fine-grained connection establishment control are the main + advantages of ClusterLink over some of its competitors. Performance evaluation on clusters deployed in the same + Google Cloud zone shows that ClusterLink can outperform some existing solutions by almost 2× while providing + fine-grained authorization on a per connection basis. + +## Where should I go next? + +* [Getting Started][]: Get started with ClusterLink. +* [Tutorials][]: Check out some examples and step-by-step instructions for different use cases. + +[Getting Started]: {{< relref "../getting-started/" >}} +[Tutorials]: {{< relref "../tutorials/" >}} diff --git a/website/content/en/docs/v0.4/tasks/_index.md b/website/content/en/docs/v0.4/tasks/_index.md new file mode 100644 index 00000000..0271126b --- /dev/null +++ b/website/content/en/docs/v0.4/tasks/_index.md @@ -0,0 +1,5 @@ +--- +title: Tasks +description: How to do single specific targeted activities with ClusterLink +weight: 35 +--- diff --git a/website/content/en/docs/v0.4/tasks/operator.md b/website/content/en/docs/v0.4/tasks/operator.md new file mode 100644 index 00000000..d958a640 --- /dev/null +++ b/website/content/en/docs/v0.4/tasks/operator.md @@ -0,0 +1,195 @@ +--- +title: Deployment Operator +description: Usage and configuration of the ClusterLink deployment operator +weight: 50 +--- + +The ClusterLink deployment operator allows easy deployment of ClusterLink to a K8s cluster. +The preferred deployment approach involves utilizing the ClusterLink CLI, +which automatically deploys both the ClusterLink operator and ClusterLink components. +However, it's important to note that ClusterLink deployment necessitates peer certificates for proper functioning. +Detailed instructions for creating these peer certificates can be found in the [user guide][]. + +## The common use case + +The common use case for deploying ClusterLink on a cloud-based K8s cluster (i.e., EKS, GKE, IKS, etc.) is using the CLI command: + +```sh +clusterlink deploy peer --name --fabric +``` + +The command assumes that `kubectl` is configured to access the correct peer (K8s cluster) +and that certificate files are placed in the current working directory. +If they are not, use the flag `--path ` to reference the directory where certificate files are stored. +The command deploys the ClusterLink operator in the `clusterlink-operator` namespace and converts +the peer certificates to secrets in the `clusterlink-system` namespace, where ClusterLink components will be installed. +By default, these components are deployed in the `clusterlink-system` namespace. +In addition, the command will create a ClusterLink instance custom resource object and deploy it to the operator. +The operator will then create the ClusterLink components in the `clusterlink-system` namespace and enable ClusterLink in the cluster. +Additionally, a `LoadBalancer` service is created to allow cross-cluster connectivity using ClusterLink. + +## Deployment for Kind environment + +To deploy ClusterLink in a local environment like Kind, you can use the following command: + +```sh +clusterlink deploy peer --name --fabric --ingress=NodePort --ingress-port=30443 +``` + +The Kind environment doesn't allocate an external IP to the `LoadBalancer` service by default. +In this case, we will use a `NodePort` service to establish multi-cluster connectivity using ClusterLink. +Alternatively, you can install MetalLB to add a Load Balancer implementation to the Kind cluster. See instructions +[here][]. +The port flag is optional, and by default, ClusterLink will use any allocated NodePort that the Kind cluster provides. +However, it is more convenient to use a fixed setting NodePort for peer configuration, as demonstrated in the +[ClusterLink Tutorials][]. + +## Deployment of specific version + +To deploy a specific ClusterLink image version use the `tag` flag: + +```sh +clusterlink deploy peer --name --fabric --tag +``` + +The `tag` flag will change the tag version in the ClusterLink instance custom resource object that will be deployed to the operator. + +## Deployment using manually defined ClusterLink custom resource + +The deployment process can be split into two steps: + +1. Deploy only ClusterLink operator: + + ```sh + clusterlink deploy peer --name --fabric --start operator + ``` + + The `start` flag will deploy only the ClusterLink operator and the certificate's secrets as described in the [common use case][] above. + +2. {{< anchor deploy-cr-instance >}} Deploy a ClusterLink instance custom resource object: + + ```yaml + kubectl apply -f - < + dataplane: + type: envoy + replicas: 1 + logLevel: info + namespace: clusterlink-system + EOF + ``` + +## Full list of the deployment configuration flags + +The `deploy peer` {{< anchor commandline-flags >}} command has the following flags: + +1. Flags that are mapped to the corresponding fields in the ClusterLink custom resource: + + - **namespace:** This field determines the namespace where the ClusterLink components are deployed. + By default, it uses `clusterlink-system`, which is created by the `clusterlink deploy peer` command. + If a different namespace is desired, that namespace must already exist. + - **dataplane:** This field determines the type of ClusterLink dataplane, with supported values `go` or `envoy`. By default, it uses `envoy`. + - **dataplane-replicas:** This field determines the number of ClusterLink dataplane replicas. By default, it uses 1. + - **ingress:** This field determines the type of ingress service to expose ClusterLink deployment, + with supported values: `LoadBalancer`, `NodePort`, or `None`. By default, it uses `LoadBalancer`. + - **ingress-port:** This field determines the port number of the external service. + By default, it uses port `443` for the `LoadBalancer` ingress type. + For the `NodePort` ingress type, the port number will be allocated by Kubernetes. + In case the user changes the default value, it is the user's responsibility to ensure the port number is valid and available for use. + - **ingress-annotations:** This field adds annotations to the ingress service. + The flag can be repeated to add several annotations. For example: `--ingress-annotations load-balancer-type=nlb --ingress-annotations load-balancer-name=cl-nlb`. + - **log-level:** This field determines the severity log level for all the components (controlplane and dataplane). + By default, it uses `info` log level. + - **container-registry:** This field determines the container registry to pull the project images. + By default, it uses `ghcr.io/clusterlink-net`. + - **tag:** This field determines the version of project images to pull. By default, it uses the `latest` version. + +2. General deployment flags: + - **start:** Determines which components to deploy and start in the cluster. + `all` (default) starts the clusterlink operator, converts the peer certificates to secrets, + and deploys the operator ClusterLink custom resource to create the ClusterLink components. + `operator` deploys only the `ClusterLink` operator and convert the peer certificates to secrets. + Creates a custom resource example file that can be deployed to the operator. + `none` doesn't deploy the operator and creates a `k8s.yaml` file that allows deploying ClusterLink without the operator. + - **path**: Represents the path where the peer and fabric certificates are stored, + by default is the working current working directory. + +## Manual Deployment without the operator + +To deploy the ClusterLink without using the Operator, follow the instructions below: + +1. Create a `k8s.yaml` file to deploy ClusterLink without the operator: + + ```sh + clusterlink deploy peer --name --fabric --start none + ``` + + The `k8s.yaml` file contains the deployment of all ClusterLink components and can be configured for various purposes, such as adding sidecar pods or managing the ClusterLink certificates. + +1. Deploy ClusterLink CRDs: + + ```sh + curl -L https://github.com/clusterlink-net/clusterlink/archive/refs/heads/main.tar.gz | tar -xzO clusterlink-main/config/crds | kubectl apply -f - + ``` + +1. Apply the `k8s.yaml` file to the cluster: + + ```sh + kubectl apply .///k8s.yaml + ``` + +## Manual Deployment without CLI + +To deploy the ClusterLink without using the CLI, follow the instructions below: + +1. Download the configuration files (CRDs, operator RBACs, and deployment) from GitHub: + + ```sh + git clone git@github.com:clusterlink-net/clusterlink.git + ``` + +2. Install ClusterLink CRDs: + + ```sh + kubectl apply --recursive -f ./clusterlink/config/crds + ``` + +3. Install the ClusterLink operator: + + ```sh + kubectl apply --recursive -f ./clusterlink/config/operator + ``` + +4. Convert the peer and fabric certificates to secrets: + + ```sh + export CERTS = + kubectl create secret generic cl-ca -n clusterlink-system --from-file=ca=$CERTS /cert.pem + kubectl create secret generic cl-peer -n clusterlink-system --from-file=ca.pem=$CERTS /cert.pem --from-file=cert.pem=$CERTS /peer1/cert.pem --from-file=key.pem=$CERTS /peer1/key.pem + kubectl create secret generic cl-controlplane -n clusterlink-system --from-file=cert=$CERTS /peer1/controlplane/cert.pem --from-file=key=$CERTS /peer1/controlplane/key.pem + kubectl create secret generic cl-dataplane -n clusterlink-system --from-file=cert=$CERTS /peer1/dataplane/cert.pem --from-file=key=$CERTS /peer1/dataplane/key.pem + ``` + +5. Deploy a ClusterLink K8s custom resource object: + + ```yaml + kubectl apply -f - <}} +[ClusterLink tutorials]: {{< relref "../tutorials/" >}} +[here]: https://kind.sigs.k8s.io/docs/user/loadbalancer/ +[common use case]: #the-common-use-case diff --git a/website/content/en/docs/v0.4/tasks/private-networks/frp-system.png b/website/content/en/docs/v0.4/tasks/private-networks/frp-system.png new file mode 100644 index 0000000000000000000000000000000000000000..4d2d892318834607a5b36c48db43bd9d9874d521 GIT binary patch literal 173516 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 a!ar)-i|hX33a<7R{u{S_NBwr+&;K7(mnEqH literal 0 HcmV?d00001 diff --git a/website/content/en/docs/v0.4/tasks/private-networks/index.md b/website/content/en/docs/v0.4/tasks/private-networks/index.md new file mode 100644 index 00000000..ed3ddfe7 --- /dev/null +++ b/website/content/en/docs/v0.4/tasks/private-networks/index.md @@ -0,0 +1,378 @@ +--- +title: Private Networks +description: Running ClusterLink in a private network, behind a NAT or firewall. +--- + + +This task involves connecting ClusterLink behind a NAT or firewall. +To connect the ClusterLink gateway, each peer should have a public IP that will be reachable from other peers to enable cross-cluster communications. However, this is not always possible if clusters are behind corporate NAT or firewalls that allow outgoing connections only. In such scenarios, we will use the [Fast Reverse Proxy][] (FRP) open-source project to create reverse tunnels and connect all clusters behind a private network. With FRP, only one IP needs to be public to connect all the clusters in the fabric. + +To enable connectivity between the ClusterLink gateways, we need to set up one FRP server with a public IP and create an FRP client for each ClusterLink gateway that connects to the server. + +In this task, we will use the FRP Kubernetes image to create the FRP server and clients. We will create one FRP server and two FRP clients: one to create a reverse tunnel and provide access to the server cluster behind a NAT, and another to connect to the FRP server and provide access to the cluster behind the NAT. + +drawing +
+
+ +The FRP server can support multiple clusters behind a private network. However, it is also possible to establish multiple FRP servers, with one for each cluster. If a cluster gateway has a public IP, communication can occur without using FRP. +This task includes instructions on how to connect the peers using FRP. Instructions for creating full connectivity between applications to remote services can be found in the [Nginx tutorial][] and [iPerf3 tutorial][]. + +In this task, we will extend the peer connectivity instructions to use FRP. + +## Create FRP Server + +In this step, we will create the FRP server on the same cluster we use for ClusterLink (the `client cluster`), but it can be on any peer or Kubernetes cluster. + +1. Create a namespace for all FRP components: + + *Client cluster*: + + ```sh + echo " + apiVersion: v1 + kind: Namespace + metadata: + name: frp + " | kubectl apply -f - + ``` + + *Server cluster*: + + ```sh + echo " + apiVersion: v1 + kind: Namespace + metadata: + name: frp + " | kubectl apply -f - + ``` + +2. Create a configmap that contains the FRP server configuration: + + *Client cluster*: + + ```sh + echo " + apiVersion: v1 + kind: ConfigMap + metadata: + name: frps-config + namespace: frp + data: + frps.toml: | + bindPort = 4443 + " | kubectl apply -f - + ``` + + In this setup, we expose the FRP server pod on port `4443`. +3. Create FRP server deployment: + + *Client cluster*: + + ```sh + echo " + apiVersion: apps/v1 + kind: Deployment + metadata: + name: frps + namespace: frp + spec: + replicas: 1 + selector: + matchLabels: + app: frps + template: + metadata: + labels: + app: frps + spec: + hostNetwork: true + containers: + - name: frps + image: snowdreamtech/frps + volumeMounts: + - name: frps-config-volume + mountPath: /etc/frp/frps.toml + subPath: frps.toml + volumes: + - name: frps-config-volume + configMap: + name: frps-config + restartPolicy: Always + " | kubectl apply -f - + ``` + +4. Create an ingress service to expose the FRP server: + + *Client cluster*: +v + ```sh + echo " + apiVersion: v1 + kind: Service + metadata: + name: clusterlink-frps + namespace: frp + spec: + type: NodePort + selector: + app: frps + ports: + - port: 4443 + targetPort: 4443 + nodePort: 30444 + " | kubectl apply -f - + ``` + + In this case, we use a `NodePort` service, but it can be other types like `LoadBalancer`. + +## Create FRP Clients + +1. Set the `FRP_SERVER_IP` and `FRP_SECRET_KEY` variables for each cluster: + + *Client cluster*: + + ```sh + export FRP_SERVER_IP=`docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' client-control-plane` + export FRP_SECRET_KEY=`echo $USER | sha256sum | head -c 10` + ``` + + *Server cluster*: + + ```sh + export FRP_SERVER_IP=`docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' client-control-plane` + export FRP_SECRET_KEY=`echo $USER | sha256sum | head -c 10` + ``` + + The `FRP_SECRET_KEY` should be identical across all clusters. + +2. Deploy FRP client configuration on each cluster: + + *Client cluster*: + + ```sh + echo " + apiVersion: v1 + kind: ConfigMap + metadata: + name: frpc-config + namespace: frp + data: + frpc.toml: | + # Set server address + serverAddr = \""${FRP_SERVER_IP}"\" + serverPort = 30444 + + [[visitors]] + name = \"clusterlink-client-to-server-visitor\" + type = \"stcp\" + serverName = \"clusterlink-server\" + secretKey = \""${FRP_SECRET_KEY}"\" + bindAddr = \"::\" + bindPort = 6002 + " | kubectl apply -f - + ``` + + *Server cluster*: + + ```sh + echo " + apiVersion: v1 + kind: ConfigMap + metadata: + name: frpc-config + namespace: frp + data: + frpc.toml: | + # Set server address + serverAddr = \""${FRP_SERVER_IP}"\" + serverPort = 30444 + + [[proxies]] + name = \"clusterlink-server\" + type = \"stcp\" + localIP = \"clusterlink.clusterlink-system.svc.cluster.local\" + localPort = 443 + secretKey = \""${FRP_SECRET_KEY}"\" + + " | kubectl apply -f - + ``` + + For each configuration, we first set the FRP server's IP address and port number. + + In the server cluster, we create a `proxy` that connects to the local ClusterLink gateway and establishes a reverse tunnel to the FRP server, allowing other FRP clients to connect to it. + In the client cluster, we create an FRP `visitor` that specifies which other peers this client wants to connect to. (You need to create a visitor for each peer you want to connect to.) For more details about FRP configuration, you can refer to the [FRP configuration documentation][]. For an example of connecting multiple clusters behind a private network, see the [ClusterLink FRP example][]. + +3. Create a K8s service that connects to the FRP client `visitor`, allowing ClusterLink to connect to it: + + *Client cluster*: + + ```sh + echo ' + apiVersion: v1 + kind: Service + metadata: + name: server-peer-clusterlink + namespace: frp + spec: + type: ClusterIP + selector: + app: frpc + ports: + - port: 6002 + targetPort: 6002 + ' | kubectl apply -f - + ``` + +4. Create FRP client deployment for each cluster: + + *Client cluster*: + + ```sh + echo " + apiVersion: apps/v1 + kind: Deployment + metadata: + name: frpc + namespace: frp + spec: + replicas: 1 + selector: + matchLabels: + app: frpc + template: + metadata: + labels: + app: frpc + spec: + containers: + - name: frpc + image: snowdreamtech/frpc + volumeMounts: + - name: frpc-config-volume + mountPath: /etc/frp + volumes: + - name: frpc-config-volume + configMap: + name: frpc-config + restartPolicy: Always + " | kubectl apply -f - + ``` + + *Server cluster*: + + ```sh + echo " + apiVersion: apps/v1 + kind: Deployment + metadata: + name: frpc + namespace: frp + spec: + replicas: 1 + selector: + matchLabels: + app: frpc + template: + metadata: + labels: + app: frpc + spec: + containers: + - name: frpc + image: snowdreamtech/frpc + volumeMounts: + - name: frpc-config-volume + mountPath: /etc/frp + volumes: + - name: frpc-config-volume + configMap: + name: frpc-config + restartPolicy: Always + " | kubectl apply -f - + ``` + +## Create Peer CRD + +1. Create a Peer CRD that points to the server cluster. The Peer CRD should connect to a Kubernetes service that points to the `visitor` port in the frpc client. + + *Client cluster*: + + ```sh + echo " + apiVersion: clusterlink.net/v1alpha1 + kind: Peer + metadata: + name: server + namespace: clusterlink-system + spec: + gateways: + - host: server-peer-clusterlink.frp.svc.cluster.local + port: 6002 + " | kubectl apply -f - + ``` + + To verify that the connectivity between the peers is established correctly, + please check if the condition `PeerReachable` has been added to the peer CR status in each cluster. + + ```sh + kubectl describe peers.clusterlink.net -A + ``` + + {{% expand summary="Sample output" %}} + + ``` + Name: client + Namespace: clusterlink-system + Labels: + Annotations: + API Version: clusterlink.net/v1alpha1 + Kind: Peer + Metadata: + Creation Timestamp: 2024-05-28T12:47:33Z + Generation: 1 + Resource Version: 807 + UID: 1fdeafff-707a-43e2-bb3a-826f003a42ed + Spec: + Gateways: + Host: 172.18.0.4 + Port: 30443 + Status: + Conditions: + Last Transition Time: 2024-05-28T12:47:33Z + Message: + Reason: Heartbeat + Status: True + Type: PeerReachable + ``` + + {{% /expand %}} + +## Connect Application Services + +After creating the peer connectivity using FRP, continue to the next step of exporting services, importing services, and creating policies as described in the tutorials [Nginx tutorial][] and [iPerf3 tutorial][]. + +## Cleanup + +To remove all FRP components, delete the `frp` namespace: + +*Client cluster*: + +```sh +kubectl delete namespace frp +``` + +*Server cluster*: + +```sh +kubectl delete namespace frp +``` + +This part remove only the FRP components. To remove all ClusterLink components, please refer to the full instructions in the tutorials. + +[Nginx tutorial]: {{< relref "../../tutorials/nginx/_index.md" >}} +[iPerf3 tutorial]: {{< relref "../../tutorials/iperf/_index.md" >}} +[Fast Reverse Proxy]: https://github.com/fatedier/frp +[FRP configuration documentation]: https://github.com/fatedier/frp?tab=readme-ov-file#example-usage +[ClusterLink FRP example]: https://github.com/clusterlink-net/clusterlink/tree/main/demos/frp \ No newline at end of file diff --git a/website/content/en/docs/v0.4/tasks/relay/index.md b/website/content/en/docs/v0.4/tasks/relay/index.md new file mode 100644 index 00000000..e7905bab --- /dev/null +++ b/website/content/en/docs/v0.4/tasks/relay/index.md @@ -0,0 +1,165 @@ +--- +title: Relay Cluster +description: Running basic connectivity between nginx server and client through a relay cluster using ClusterLink. +--- + +This task involves creating multi-hop connectivity between a client and a server using relay clusters. +Multi-hop connectivity using a relay may be necessary for several reasons, such as: + +1. When the client needs to use an indirect connection due to network path limitations. +2. Using multiple relays allows for explicit selection between multiple network paths without impacting or changing the underlying routing information. +3. Using multiple relays provides failover for the network paths. + +In this task, we'll establish multi-hop connectivity across clusters using ClusterLink to access a remote nginx server. +In this case, the client will not access the service directly in the server cluster but will pass through a relay cluster. +The example uses three clusters: + +1) Client cluster - runs ClusterLink along with a client. +2) Relay cluster - runs ClusterLink and connects the services between the client and the server. +3) Server cluster - runs ClusterLink along with an nginx server. + +System illustration: + +drawing + +## Run basic nginx Tutorial + +This is an extension of the basic [nginx toturial][]. Please run it first and set up the nginx server and client cluster. + +## Create relay Cluster with ClusterLink + +1. Open third terminal for the relay cluster: + + *Relay cluster*: + + ```sh + cd nginx-tutorial + kind create cluster --name=relay + ``` + +1. Setup `KUBECONFIG` the relay cluster: + + *Relay cluster*: + + ```sh + kubectl config use-context kind-relay + cp ~/.kube/config $PWD/config-relay + export KUBECONFIG=$PWD/config-relay + ``` + +1. Create peer certificates for the relay: + + *Relay cluster*: + + ```sh + clusterlink create peer-cert --name relay + ``` + + {{< notice note >}} + The relay cluster certificates should use the same Fabric CA files as the server and the client. + {{< /notice >}} + +1. Deploy ClusterLink on the relay cluster: + + *Relay cluster*: + + ```sh + clusterlink deploy peer --name relay --ingress=NodePort --ingress-port=30443 + ``` + +## Enable cross-cluster access using the relay + +1. Establish connectivity between the relay and the server by adding the server peer, importing the nginx service from the server, + and adding the allow policy. + + *Relay cluster*: + + ```sh + export TEST_FILES=https://raw.githubusercontent.com/clusterlink-net/clusterlink/main/demos/nginx/testdata + export SERVER_IP=`docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' server-control-plane` + curl -s $TEST_FILES/clusterlink/peer-server.yaml | envsubst | kubectl apply -f - + kubectl apply -f $TEST_FILES/clusterlink/import-nginx.yaml + kubectl apply -f $TEST_FILES/clusterlink/allow-policy.yaml + ``` + +1. Establish connectivity between the relay and the client by adding the relay peer to the client cluster, + exporting the nginx service in the relay, and importing it into the client. + + *Relay cluster*: + + ```sh + kubectl apply -f $TEST_FILES/clusterlink/export-nginx.yaml + ``` + + *Client cluster*: + + ```sh + export TEST_FILES=https://raw.githubusercontent.com/clusterlink-net/clusterlink/main/demos/nginx/testdata + export RELAY_IP=`docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' relay-control-plane` + curl -s $TEST_FILES/clusterlink/peer-relay.yaml | envsubst | kubectl apply -f - + kubectl apply -f $TEST_FILES/clusterlink/import-nginx-relay.yaml + ``` + +## Test service connectivity + +Test the connectivity between the clusters (through the relay) with a batch job of the ```curl``` command: + +*Client cluster*: + +```sh +kubectl apply -f $TEST_FILES/nginx-relay-job.yaml +``` + +Verify the job succeeded: + +```sh +kubectl logs jobs/curl-nginx-relay-homepage +``` + +{{% readfile file="/static/files/tutorials/nginx/nginx-output.md" %}} + +## Cleanup + +1. Delete the kind clusters: + *Client cluster*: + + ```sh + kind delete cluster --name=client + ``` + + *Server cluster*: + + ```sh + kind delete cluster --name=server + ``` + + ```sh + kind delete cluster --name=relay + ``` + +1. Remove the tutorial directory: + + ```sh + cd .. && rm -rf nginx-tutorial + ``` + +1. Unset the environment variables: + *Client cluster*: + + ```sh + unset KUBECONFIG TEST_FILES + ``` + + *Server cluster*: + + ```sh + unset KUBECONFIG TEST_FILES + ``` + + *Rekay cluster*: + + ```sh + unset KUBECONFIG TEST_FILES + ``` + +[nginx toturial]: {{< relref "../../tutorials/nginx/_index.md" >}} diff --git a/website/content/en/docs/v0.4/tasks/relay/nginx-relay.png b/website/content/en/docs/v0.4/tasks/relay/nginx-relay.png new file mode 100644 index 0000000000000000000000000000000000000000..110b308c68360848869d4aa36b7b9a4739c2253f GIT binary patch literal 112485 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 z z04S51JrF-!8<$3zNw7IQ4>G-Ypm45n{p|4}wC+7?yDaJr)GpRIHLT0UovgAzAyw@! z42I2hPF#e$gj;5vkFVRJlz?ek7sQMFBITuGAGV{6*#Hga!wI~^M5UAh<^t^IPt^wq zk0_@*&!VWu;HLp}Rz-QWR(6Z^G(w3}Iq#YWx!Q95ZeTtz3g|rS@2`JjQEjSvtaH0I zw*@vP3b5FjDz{j(_DBG6yK{h>r82xX4=&NVvZ{HL0|y5T#lzVHYOS~ClEKOjntF0r zpro0YZU?h{_6KxWC_{SV61#KA+Tl7oApF{jLslx>y0RiW;(+0}6ylrIa_(;6lbwgV zOF`$vL)ImRWQiWE7A!K)A+N|MdhB>&vXiR8h68x>TEW2UP2@F~FoFiTuGA{}fnkoCKu2z)$T z?WAzYs)RsBAGPj3?&Vab`qz3e5U0vBkt&!m1dPq)=*#UxO``3q|a1WoPTp zWNx13s)vrr%?0SEc}ypski9IR1fuIc&vm-1!(sm_{I}70=k;1JEGIaSa1eA zL&Bn#X;U3*ieG{Kt*I!-O%LpH{u+ZH=Y_3Y0I6A>!rI)n|3G^BqznkmM@_x8{7G+} zWpXHEM1d6NkStBeiUu2<_I!Ten53_4?1{RXG{vxoOE_Ne@x*~5oRX%4N^~`-5E`LX9hxo<>z|>c)o&F_dQp<$wPCf;_5U_gZlI%I_(^Hh$W}7t77RIHe^-kb} z6t!tjDcJp?8&%~>IZS8NHam0}|1Jm$ILhuuXA}9+EIqKT`vC#D7P#}Q&@Q&ps9x!o zimxqhw{{zd!wtTU(??30pq7H@>2%qC-HPwEIC)7rD@Z0`+`(V!M1ZW%G+64K{jjP@ z9Xor)VzrCITmc?lw_HCSn7wNO&>hE&b>B9LoL7eyKKNb8(3)7qWAbVgqF*A&UkSu1 zW+Y4J4O?tg2DAJbPMMN^Y6w(A>ksdHfhs5vwXwK;5^dZa4MT{B#CYU2MEf&vRe2n3e+@PuvMi&Bdxk69p9!r%ku7W!tJkKoQAI{ zZkinznHeB^9mi>_b8ikZ*$QQ1HBr&1*|a}-)PGW19B zt5R6E9Rz$X@>B3-Qz-#77hKRgeo+9isGtyRz5SVYlxdxHJE|K+5H}<;iGYNQ7eG#X zrk`vvzY~~Mxl^yZ6tv(uWW5)P}dzaY*Zk?eyxL4<=;wy`bb&T}@M80TLAS+Rg(Sbt66z=wQ~BrkY?&NDT4l4EB^8aLZ9P^QYa!z0O2 zCdwJnk*|VH`LQ2vnOZt2rVZ**^;-3G@=60IRa|2noLHl(RB1&Wa4oeSA@olSCz=Wc z_5DP-53fVoEC?PaI!^EwUR;@iCr#l4v}QP8*5a-lY+V^qKrETcL+{q%N?*`JiAPog z`DQRnjvDXjTfP#`p7}7GvzYd;p#8ptmf%e8?sh+QT~M@fq_}Q8IgNBDRXwxbfP{3$ zmyij)TSSddgNp@J!6hs?mnBj(T~3gAOf0^d4}&s7V;g-5KmK`Ne-H>1VucM7`@ygud` zHNR5p#Pky*Sz_Et(io+T*Kr&vl}nHcTI4ACw2CS|8-hut}D>1`39{aB6DY&x*Z}cKQ>>;pn*L z7`X>^_2X)CVOpw)w*XEo!43|_Cvt3MFFNC;i9)DANT6sR3@bs5`9YUj@j}4VS(*bR zj(6Qow)q7;MhuVh%)Vk4s(Kb)CZjaPxc+-bmz&K#J@pDhhaqd%|)?nSkes1?{2 zz4F)Phq(s#tz5dlZU1)WGrRr_71D#FGkZdtIyt2$!eI z$_QpBb0vmQGW$z6iA%B~@)zeI$pUo&3Z>NK8o0D5Vi4B&fyJCqmWgMiNELNTf;nvIWF66j2P+l}SE|y;ZB^hH5&8;e>+YL^XFf z2Wp|SwTj8Wnn#hx5*ndVH0sn5H}l_hAz|o-n>l4pzi|Y-CtSKBF_)$+ZS2sFjxe;} zV&vj6r1t$VDM}Z@#L%4TusX?wj19_Hii3o)k>Uzt-$l*>*n^RXT;r zcax}^u>quJk3><^;_m}vw*x`m&DC0V&_%V+I*vvI9@)*6dplyda`O&;%ld%`M2=GA zI3B63k40(DO7Y{wWP-+;Cne3^7T`Rn`2|A$B#x}1(#}0o);@);uC`25=)TW!m^0+~0b%c^>&jk$-JJ51ln#2l4Fo>iXP6`vn!ekNdv5LKw z7Aj$jPf2m7#kk*8nz|yT`UHWL!igXeI*u1`;2$bOtK!(B26(p z^oQcGXGZxgGiRgwCp8$`q?8es;(e7v5B{NvvQCR2SkN27eSA#T!z%5NsUxGu9FwTC zT^uC2K*?eFpTo4`rTK6=TV!pUIx>wb=njiPw-U5t*95DO$z$C2$fOx=4NX(2vb{i* zM?6ram#C~BYNC&7`?2@SRS}P+L5H;+Swnh$ji4pza;S;)(kjr1M~afGQAvln9-c`9 z%<>9D`})P&GQe3{;J5q)l-H4dH_Bv$mJ#BFBg3k*ACcKVMTyGlQwJ>DZnrW;yC=oL zT?}KQc+ovE8-+|pQZ3(XHFUN_#TS$IrZK;ECpnT(L=VcM(pbbp^1+$f2Bt*|Zxt7P zgB#3XFwl>{q7Nf8vMNWWe zdq)+u+HTO(G$@t1lP8^+-rd?Q4O2T>a5$ojfH0XC_jqDoqG0R+`JgBA&J@kklaSOB zeWg42mKhiQS}gyyfoWQw+ZL{QnAP!=Wa}gqHwCQ>MdqxCj*=^eMU{W3!|gY%R|AYc__1DPNeixwT~5g6c5#YG{!x>>?FG`; zJz%4r7E0Y@^H%9&XsqnX?`zBh-nN{%}$<;d~ffN%cal=Tlt0hzP1%l-h)BF^|5WyV#17A7%vX)fVar6ijPm?%sw*durWDM2AyF{nFVA5q>cmaLbPHjcMGU=Mg9~JY zh01bR;^2O+x{Nn6s=(G!1^2V8yij*as$x5)DtU(Pbe@>UDPTT_)5TodXCf*~k;Cei z|JDH0Th6gos$>*Q;4o zDIqWm+*uZ!H~HJ_mS!8i*zFCpKs}#(-UK zxsTF(vlV6@kd7@;#tr5T%%d5-VHk8?xaDa&mFzQKtrF82$&{+sky@O5^cvT68<#0C z$OK<4P_(TqfZb0`bdd&Y4N8NF&%03uY4^HKFBfbaot}ROlLq^4nMmJ=GW0NO1I)+IZs4af>KkFP629QD_K0yX z!y5B$Z~ihT_1@Fyy>DZDW9rK79uUF1&;GL2aI-P8@SVl>0aCnP>*Vkg@^d5n_dg(g z-9vx0DSK{?m)GjKczP9EY%gehOnkr@`p(<%9(V1=x|7ww+=G7WO?%+yxQmpQCeHlP zoxxD-qm_{huTFE*!$W!RGBGfXoh(^Vc6dw4*(JWom zRv^AoA|R3iQ@Z=hvQWj!#uAb_(sS$?_+Aoow5XdDKkE^F^xW=zF$#-BI8bx=Ik*|w zKWjLU}Oss&VwX!uE!> zIU!~GTaQ-_HAjnY?vv! z@c>Q2wl|Ipz|1xu>#2WTX??B7@I?zry<#WN`bMf_klJ*Qt>WAFXXPf;&)qc$R(#9y zpPexB-WDdp1jX9h(*6@QlpFL=MNY{b*_r!PY>5IiNVb>Sd%@vJmt06!iM zJ_csp7P)z={qfqLNK;D!ETOXz(R^}iZ9s@c#6+d`A}Sq0qT~=|85#vzC3f*a*27{4 zsO@h9ii^v|BD8`VJjX#%HgSLm%X(!QYW`bsEMA5W@; zVv@Uqrx*i|rnVi9-z-ie~rc5 zQyTtItc^o++tzb;PjM{~=2BkwTDMe^C(}_iJ-@kNCg?NY;|+TE;iTCjZNp72w!&`H zW9FYS4Dg}yv2ZFRMjX=v=GMb_KsDC2e$L&)b!r*gg8E*r zV9Xu|W~|x;wt4f`a+mZolUSf6H#p{Jo1tVVbi~MF5Yf^0Tu3FG1i-f1JF|>ioPG*a z;ehiZBF{yzSM;^LEs(w{X3u7@SK#^^@tGQ~A%od7$vbQ2?b8qMz~uHd;<@4)0aJWn z8$;R{rL89}*Tz~3yeag-_le57fwKjP%1K@fgDDAl1*YOnyb=A?F$RYSq37^7E~we> z1w>P-bre2~GlcUeQD9X9MuE1*OMUpOI${+;zf_A%?^gQpz#+O#(U_yXIR8X_0G?W% zuhqO4#f(%kji5b^c*ypuI~?nJJ0eD+*9*STv4%hH?(RksMh^cS6L1=_o7cIvGBzsZgtCT8k@HUik z(y@Z$B?#r>;DnVe9iH-NOPX`1u%Y}n-1y=aq!;|>8v~Os-^U|Qu%E|9hiXli(YAs( z$c58d(?ZLO1GIsKB_L2^SfC5pf+(+w9^DRtM{eNqv~6d@yRd^`(5})OL_Wa`;hZT+dl|9k#Lvg0IDQo8%flK8lMm*Pnaqb zyrmLw17h`i$eqRuY$M`NX+Xlq#gRzdhxU+aw{M%s{rG;^q(%*!avG%xL$n5UeQL~rRvXG7akXhgqy}G$sKv``6f@e2epD?-K-4CR zqFctya;sxC0)Gv0K&xR6z-CeRJ{!C=ApyZ=zJQiL6^Gt^7sOB6SlUx#EiWW+TL`JyejT? z3A%%vaBb*S@z8$>z^;_Z9Dr)|6kID8-87MKtI#_%x^9&KWe@! za7pK2LZz(^*s?9F?&5w6X`_s>BkJ>&k~v!xG2hu{i-MSkgS|K;-iL_G?<6>*IKzAbtb>(St1-~Ys{xTY-KP~EdC_t7e~tJ5{~i7cD2;a3SOHoIoouu8t| z41co9^v71aOZTK9!|xs&%kztChOgTU2$UNbRs@bIhJN7_NmVdr>qcizC+&cf9eCoxp*$Le8`sne|PQq11 z*Sp+(+6@s-?KSk0=(`dlh3ON=OvU%(CXY0bI^}AjDL?((h{-w4KDA{eMr6BS!1#LY zjp%%TjM<**pF$ow-O#|SLbmyb+{ZhLw_dMLvMqiwdbSt-R?O5tru{-rcF#qoD5$Sr&2q3Enos=iur?>SK{CEef>I}7w1ALi5!;{U*88gX9TJ63IKNJ(^5}WqT&ARMRdG;h41i}ct z;|E|TIm=JM2(3{Dr_HazTCgdbsw#=aUvXy%H-on{v0Sv@G-M5k-9yevg16kQ52P$n zmgK_Dom)~DDQ)6spI=Qg?33;Fe^3-r?KG3KnpWmqyitbqr7{2Ay_9l1b^C#8h*KBUzL5yMp?|*-lD$9i4$_KuEAzh zxBBVvGYa=?yULLC{)cl$DQuIp?qR>=UkD!b#+Ldu=`z*sEXy^Th%3XyblkE zf6{r+7`-ggp)TAfLvfc@27fs}-pgPb#V^nksrKMk^#0i>wH>xjm11p7cEJ`K_n0 z$8ry?+p8y|DG;*9Ik+get-NUOd!wM&HCF~dL#(a!i+ou8HNxr~@2gRp6t&F}=2v^Z zN8=~Fx^~C6vFbFfm9KXAXt1r4O4G=5`-iVeRWmo7`?r6@l?o=1bX>ls*G?%&7#;$+y%53=Qp%D)awla83Y zocW5jB>%{cUIDTqx5V@0rI(AZG%vOK%EZj*=)H#*Jch2nG`iv#HF1LV!220m`NXNH z@5#O3=D{LUqSKPoMMd7*7Jcp7>u|bd&&!Kfl9#Ui`e1+e+RBJ)2}=#WE;cv+*(0Lr z@pl#eUa*l99BW-Dm%FQpwl{d;xC7x)?e+#?2`@+?p#XMh+c7yiaye5D3 zDwmz-0*bERcluJzy>5J?&13Z3_o36yqlIr^zi7tE>)d_z z#LLD8l43pJK4Ag=Df*fH&a@YsN=sE9FrU2x)BbOvJMKBBn69-5jJ*WEW@;9@-^g>u z|BCmu;DFM@qdAAwo=uJoSVpqNWw-5uFvVqmr%RSYua|Z#3wrBnQ#OQuCk*I!>0Q}Z z7=Ef@^>vzY{Tk=0F9up`GRLirJQbm@p0wP0Ot7d!e|YU4_9n@;?B)K%;nz(|ocC0` zKfR9odQrnH;has`ct=Ci@T05i*Jj<&m`8%qHP&7^=(N4-{{)Q<#Zp+e+s#sP+eL`sA$X2p_%-pKts1r&_$pT^*2-A(aQ)nX$ptAj<-1-H4Ddc=z;6RhHpI0`wdWjJ}sH}6iM(nI@#l8O~9N* zKIKx~P}?!09>Os+%26BHJQIir3+UQ*RhcAQ3IEEV1@=b0wf2E6%lxza1Flz%<}1HI zH6z1sqF3kzmHrfYCpxL@^MPXnkh$+WhUL%AzvbNCGM86uipi7m7OW2WZ0V`k%yDNm zYHo7^;lW1uz3&cwmN_MuExds@3H?&+t=ZDk3ix^ z%olrIPTY0zR$Ni=cgw5wkzjX6oVQ}1ZB*<|*(7{=*;@Tm&tmA0*H_HsrH;cDs$X>` zG!P-po7ST*-aBMcebECis)6j7_sfaz&OP7o{q4eees`jtxtX{vxijDB_;)T+(XQzJ zo11yJ=?i_s4MM-Tzm@hKBnUjCidTFHlN-u@II-PDv$*f+FDGT2qiH@18$QqqmtJk| zxJ8>y@by55YBu^V>i!Tm@0F0k2Fs2>_s<^oEQ$g?O<|c3Z?(~Y~GUV1@lhIidzv2Uw-K8)Lj4W{pQWdvs=HJ zI@yHDauAR*972%OrOTT~hWviq9c`3-#6$`|Vq*P4*nNjCetA2pd1Um;rr;wcW3%gf zmwdjG;CqhWe+|9z=x4(dd-X~`54$|i+*Vs?R^*A$Te$)Am#Yyr{Nc`l9ryf9DJA;a zGX30R`;AWy%U)e|m~#?O>ZxRRJL--R%r%q5r_3)mtoZh}%6$}@C|?%h#@RV1X^fTi zT(7>o{??794@?e1ZxR!;@$+)U1G(R6SM5o@-*xz*$wP-D0OH=-wqcuH?KR+eXxZV?^Np1fE}9#)$DCMJl=g0G@yd{F zzn-nEgJHG!b=k^zCqO~52MQ!F-kY_rIr-&%Il>z2 zUH{qmXj<9z%cOqen%;fLN`^7&9tU9hSVYN{CtlnI~2I)ixv?r_I8RvLgx&I5d z5*y_*!mNv6mbtkW>VXT-t?A*l+z>MgHcGo|N^>{WlG-*(ZU21ZT@`Ufa|*Qld={^P{RW@dv$O_7d3zc*}>(W9}e5=kDFIfKp#4R9)4!G_w-sgMi{{UD1u%-Y2 literal 0 HcmV?d00001 diff --git a/website/content/en/docs/v0.4/tutorials/_index.md b/website/content/en/docs/v0.4/tutorials/_index.md new file mode 100644 index 00000000..1b9f8990 --- /dev/null +++ b/website/content/en/docs/v0.4/tutorials/_index.md @@ -0,0 +1,5 @@ +--- +title: Tutorials +description: Guided ClusterLink tutorials +weight: 40 +--- \ No newline at end of file diff --git a/website/content/en/docs/v0.4/tutorials/bookinfo/bookinfo.png b/website/content/en/docs/v0.4/tutorials/bookinfo/bookinfo.png new file mode 100644 index 0000000000000000000000000000000000000000..d360870b52dae93da89d79ef832dab061a81590a GIT binary patch literal 173819 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

Ft9% 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ðOo*av4f`)n8lFkjU(DxV4DFZE@lpxT!SW z&V?8mZx{TG%5I5^tv&t{`$yN#r)P)No{qm#BwP(-p|N$*xJMS%A#oFDGs-qDkG&aF zH(k^xdR5UUnvU8nda!x-Pph-d+>0ZFx*7FjCH}V8^929yV~`x}Sz1>Iu0DvlJiTNN86d-1|oVwoM}w ztDp_YRbUEJzYI6r<^h-$+4?ZzsbCEdA?H6Fwc2xkjZncK5qc20bO}_W2I7&o_qQfBuCo#ec_L|J^d;i z$*vDa&eij;WS0|bv*#oxn@$xc_iYu%b8Us*ed{hgkADlWnB8P2L!TyrzCLBT;r#KD zvoN%IfIqclC=m40;+%};x@qsFXG@A#uUcVKFNwXl^#-j;mY4DpF940Yb*>rrkX*8+ z?Jlh(OlX$_8#Zi<8J5Cnm!`LZhGIeeLNe28wRU2uk+iv+i1=~x{p?L zsIK{>BsQz4O8`c401qOOTwS7B>U8=Ub*trD!Q-9@S2*-CSu^*uRa5Kp{-Q~#Wz&;> zS;n?B97~ZmvYDEmVLi|inqRahF~0~b25PkY6m+7IxX)*#XP=a`A%Z7vtNA;a#Bs>J827-@j!3V~HIeDH_VhmEZVc4gD<{^4l* zJ^U*~x&HxCFIFI`L1E7c8QsN6dVHRP)XqI}9ImdTI8`-3ammc2a|1az#z)u<1;P6V ztCPjQ4g>{*2Afr#SxaVanMk@Nh+}UKHM769_Swg6fas7+>RX4!?0lrEVPZITswgJ% zZ*+xKE;szUqC`c8EqBU3|C<5(f`h#N*6_o%r)94$giObSbp6kxyzs1@nAq zlU+uv-4HnzZo}k;VvACVnk6oB%-vWlt4o>u;^kX5qjv1B(vT`IX@X1CRo8K)9@)?@ zR5N#_?2(1xkzBjRLwgY;uj43Xu_wu$6MHamMm?>2sfYFw2cND+&j09?20GY#^rqdt zjtk^aVp4ySuP1)s;~gkT*1tqL@KuigBYwT#zL_?iI67Q#0CeG5D5bM;7)D#DgmFHO zxjRHzN(9{4k1It#vuV>)yLjh>Q;Svkc>!CTxk<~!{eal&({1f}k;rU7QWBAZul=l@ zBPfZVLpaU97Q(sR{g)#A1^`-t5`ROjj%v5qN&G#k(Tc(Qkc1x`gqH|^_HTDZ5wL?F zfkJyH=eJQJM>pEuS}XYqup|!vi1cwHit{m9LZLfjixP+y5G5D{bOGUOODSYmpxF4A zzM#3YZ+uky{WXchqUF^33uHJX==sdef%CKWS(q!6T}R;}#dW+Ny?`^_-thDF;Ux-6 zU_i~^o&^5+P%muwkz<~>c!e7yOitJh|3l>Y8ms#RmViB%)B*_V+wVD$gQ?F#g7 zmy;N0HL4Ljj20IIE3YGtD2ChSFs;253wjp@B=Hvp2iaH!^k~07M*sZ;BQ2#Ql*Z5Oig3L;pssj3)s@WgeKCMEk0R%hC z4Vw7KZ9u1f(o7R0$kLAidkYv2V2hLK77$@9NXb0Pj9Ke6bXeYWGU$z4+F9DwAStk* zdkWyl<*rir7@``-HZj|w?^?qgwKlEV&UNA|BT$G4Pj}tX2BsYk9UpG&3Of5Q;A;2_aBVLC1GrwFap7jxq&}ip(7KQonup?p z{Y{E+j^eywX`?2F;UbI6eMZN#X%XiiIb2>e-jH@QYyUnlbj5GpVln1U3J^aVrzQKLGCh!{eRZXo+5dR9oUp3wqS@UIhIv*3`Ll&qgM{C5gdw%$G`f+BRmQJ3v=xHgE@X; zUy&apjse{C?v`lUO>_^^g8UL`sktHk8kwt05|Nn=Uj-1(n%Ul}Dp0Go_FTCCU<&YK zBK1?0Rr=w5Tr6S2(rZ*1tXX5#3As|m+7 z0VmOr&50;zax+%I6MA!YZZc?-GxKB3Jc2J^ixTlbg$IMcep_azf$J5uJl|t%u(T~` z348g|cwBVyq0oQt&Y8S!Ij3p_IALV;nNT(?%AB@ztxwcD$KfBo|E)*s%z6&?g3vZg zbaCjIMmXfThMMF%uzE-2e}lmr4D2gK+hH3wM zv4fTGbuITZ-OY#=HR@Is{WPf@1O=va74+dbT&b`zA30}nGHvy3Y;gj?!ih)YWd_Xu zXfegWKGHY7mLf$zX~d6v5?*EcF08xz@& zWzW}@@ISnN+1|YE`GH03@cHoD)4+gSxaQgAhvGk+@$2S&i#oE81`@uKpenU)} z1Kbt1tH`WjfHMZ13wj{A2`Y6~uLeEUX=;Y{@uzmV^B&HdWT}nQ=7*t|y*W z89`)Mype#7Xw$!0k##nJa8)TedyMs#_BofJxbw^RET;6DqfX(GhizX@{5#ETfprbj zm9tvM0a)OxPcp3W)VlIAaX2uy$TIqQa@O0W!$e{z5DybKZgMlxKFi#)cw?z%a*A>W ztqtD~Um06IKD+rZ$%pBwq7_;P*~b z)(b#xJZXwI|8erIlYr0HvM7XSG35BE?^Kw8-A|O!|xu`p^zb12rr2^Tn(N z^Z6@*BX`OatDHve>xLT*_a{8Eem^K7{n>fnaW@sd03p7ww$~(z6DUye28!p>1_kYf zCk=~X>f~O?!%H8j8c%E(J-pK5$IXs219r?BXwc&omI3zKpGNG58KezD38iEc-0i@L@3aYY(i%S?!HQcp_?+|CNS5*7?hl;|DP8~3a0_^)L#LQzgspV&0R@{>)+EE|?T1jR4# z#HJ@L*Xp?wCoN6DSsK~LxdyW9+Z~PQIg<(>@Dxz}xi2%UooxROiKWH9^k))h9Dy6D zp|8a}R#=UEo?#8COH~?uvQYsWsIca5R&`?Or}-N8#rt8UcDJ4h!N_Yx2NJJZG%bc`I` zJ}w*o&^GIz;qmyPe|4JhzjT_JKW4=*{LfDD zpT$~gM}IBNAgVPne?cNCh0(t8?vwWB3 z%%_ttPrOJ>Dbgh}U68L|ri*IN73hhHUv(>|+yG;MyIf#1oji%$CZ*`Etl>fNvn}!vZXHm=6;Y?9k|Ku;= zhw4{$a6UQtpV7|C(+2%RH`zTN`%BYmY-$>9Yph!5Qd!37*_Ov?KVntak?s{INfh$NnP!PqY2^U%ghguk3cxm+OFKA))_1ZW7)EbS`MZHc{lz*vY?KvW)mZa;snTb$`EzZ)Dyo}!A#L-hA zq(p~&4irXvU(4v$9zKqBxX+SIcc*jIuRL;bM}f_Wx3s`aDu3o?1}CNYux<3ILOVpL zDfh+LnpdM+O+Tq7rfaNjb*!nPnCKvR8J`bQ3>V1cbTA;l{j9I|PW`t7U2oezSOsY6 zAE7%~eSLO0YXJq#>gOFjdvHv6)}=4g9Er1VdPQ>@H#?;dAK^0Nrnjg*J4ea*s=wh# zo?)Bc|DeZ7*k)qC%vJm&-*e=ChGm^RHrU!KUG$bGiUBYwp|h(K4j!vL?n9-vzg%@*K+qdO4rOKUBPow`Ev+d+dKVhXV zK07U5D?9_@=C2<;Lqdt`4>evOEhs+%c{4r%$7+Zj(mJ{cjnmYvKPUo&LY9M=Xka!0 z93?okoYUil=jc%`u}1cQ@nS03s%o^To%~o3rx88_w%G2>%Icne^_DoHh8!*ob+nI? zAC9rjT6|1%Ljo*+`y=4V)aM_@RHtGMXE;e`LJQbUx-HKUt%;UR_r`gjuj$k)C0Lm3GhxRT%6}v-%Y4`h%F+SPkTKsLw z(b}(NPeM>lL=>lDTb_|sXSHQo@9=Ch3;FsttY3OKj`d-mm8nQtAF%MV1!>$0+5TW< z>+|hnC||r}AeX}q7oxxcznkqZv-A74X}r>Lwz(J?z9g27KR=*%Ts|ZG`t^pG2HJ5G z^|Q>+>e)&2RQl=r|LsnW^3A}=$_jG-e)8j^StUYIJV3j@qMqK1a_RvO0Rvuh87k{w z$Vd=U_6r~Ra(-j`aJFkz?LJpqN}nqu2X~k+M{RWxQ}|3tu}vE2IMQ!ZGP8-R`LH&6r-+by?m8`6 zg6 z-kFyUS)!l~VwXc$d{2K#1jnrd&zaqpx5mSw?U~2sy3u~~hDS-~c&6zc@x;R{$M|P}>gTL%m8L|f ziygzBCCWZ{5q}^v5N5RQ@*sOjbJ{)vwq6IW1$8C069Py{x-o_nKH2xc!6;-V>X5Upz zXo;N2>iXlrLRmu{Fj))lIEKqMy1p1B(i=@FSB=#w+Ph&Hoxj>W2r}TRJ8}{J_}lU{ zxku%=y}4y0X}{)qO&1LzLt0sGDShwXt~&X@=z zRQ4jT#FBGorQ`fMaZ*&ZJ_90vL~|Uv!fspJH;2U5ejCr*=*hwCE+(Y{W{0Fwj^C{G zAK0^Rdg_+lziW1zn5ilTB{gvl%jvqBv?uiB0;;BdJ6u${8N?b{z+C7D7XKb3q;n&U z*7*Sg!FmZW=^_Q$=S%8n-V72@F?9*9w(*?cut-|!T`}N@-i>Lk^s~-S#N!I1x|v*r z0j1nW;R%el6G*9&q+S#M`P#&mkj#`Vq|SeD`O|imRB|fib!EG2NagCAcH0dvI0%NW zhEZ_o+B!>@GnQXx3Fq{#{DCwAS)m(iKRAyw4HN=~T+vLYr_Z`!tFPt7v{%5BY;Iy!;GoPd%|qj76` z`)pKC`*@b}8`k|jbHG|kHeuli`b8&84k(U!F__ar=i&_lh8rUIW zlhMkp@@0SN#iqGOddI7u9(6O^|9Mk|T~ zcQdZL--Bz%Myh0>Ba@8aNX(!bsCSGgjeM!{tlW4wR++Rf4;zU-ySw&UnP%4|WEnTG zx>C|kvI=G;h?Yk*CKT%>^ zWSZ5H3Oezv1wHZY3;H<@>*lW(m#@ToNWe}|V_eqm2sj)U^Dw;QWv~1;D&lw|Oi7m< z*70acBE+fMKPdQIA0N%>YwczvK~Lda$3d>(;G1XNQjW>qBR~k{zY@Y$zc*3d>?)uk z`)QzO#wZ|Mfa~hL2QB0K>Jkyb?TYYL=QMIG8m5D*`{2N%=lte_yPofG^}2_{RoQ5t z0kh8IF6#Q{K2`)jydgEpN{YiiQ{cO5Ns`uDc zNe6g+QQiybU5Cs*FGl85Y&=zD3gc_!j;An-0EP^aY!$ z!)qBfaWUEUE$2oK?Ra`;|KtYP=zr`$KEX^!>)E+#MvLn0`fg$?CIBtSE zI_CX0{gAdFxNA>d{i<^H!tZ1lD+7Ie+}?S}H=YX?J^eJc-tpMQlRx$FhmGmdB$y8m z)Tid!;Za9e;+j#xpr>=q`s170U+gSqRdcLcY>5g*uD5GOYg<=ugAW0-K9iFJ3sMP>zM zM`$OaVsafhygQKX%wZ8zlbZ4C^}iNp#3rQf$cgZZF=timfn6YRw=Sk{Z}}gfhKzE* zebP>E#q>)_#Ya71H&c{hPxs`0YRvoo^?Q;nt4faq1rI#JjK23)cr+N*>y1>Pt-z6h zUyn-Hi@3*nXhl_vi|h@4-0`x~x9Y)*`q#Tl!dq61w6xgYYWMtmhyF>zCN%y=@+FL! z;Pi(;cG0QUZd9@n98d9&V?7)y&2}9AG6pR^rELLfX7d6J=n5kswD}l}=gPs3?qYskk1Xxs`yL4=t zUu4nPt+<#M>VJ;9>2Ermz@tr`4ePL~!ghQZ6&orU>C)2=Xfj6g3{~I^6L94uBM;o9 zxN>^7hrt=crk9Cv##&!FC3VxXdZX`3+0WA{RUmxdh#!6i8p?-Xs?tMFfsQgj{&rDY zme(uu5yKm}`pcuAVJENUJJ^W?`G)Ro4N2V$QJ;_u2+oJ3EhM=Z9*aU(2jPfs#|PB| zOl`*xAQWa^xox<=^-+cur{}{H9K*T6(&21=PzdTew9g;MA1zH5y@ISR4ONVoWP`_e zn-U^ksd?N!nfGO&m|hnpi^*dgM;~t{+100>6iCKbc=*~Rh1_}x9x&L$5_XA_(Rz}w z0k`5AsTJjmjCgyu^E;2oz!|?gwaJ70+MeGhx%Oj$yw=ol{ZZQ0QK^Qs2U0!P8v~8z8&(k%iAqOZcn7h!S71>av)iT~cQ9nmnSzI9LGcuO=}FAKQBG zJW!|d&T~fnr7_|2j-jRuSsmbKlU&I#<1CNuXi{ zVbG%)zd`mZInL;LQ{!*ntsjVM9|ctuu%Qs8 z30c3(!$PZCLVR-HvweT-9}q;hq|}<2fP{RUNqnjoiDB$b5*q7=zhBy!@71$e-C@1> zC!0pR+xcymWvJ^z+UT{5Qr!xDuu9n^4H&Fh5G?hlymCgs%b{9mQbhoui#Wp<-ajIF;3$F#{=H;{FhkrC{U zR{9m8#4}4c+C>nDl^If@e&Gahdf7*1Z|I2G$T`($rHYqdMGu7%os{FOs%)Q*;*u87 z3btH)qwLSp2L#?{#hN3x`&`Tc7Y_p$mtPLA1gZY#VO4*@*%t#o^@e_TNR&AvFW)Nv z_;-h2YQs6wKBx@!F7T-u5Xq=$mS-ig>5B3-m4=)*m0n z_#~U4dO%IDqK{gCEL;cEihRw^9IpvF{jJtCsCp8mUmx7t!FKA4Ygr@hw$-tDPG$D< zItAM+psuV-ESWn3RdC(c%O!k=f?H-|1MNH z%@k%@ijS=iJ>RHyYqA`BpxhNF1seDy*!fS?9a?Qx7+f^?N41zjl~&HsIDZ9B4vnD) zbIr+BBj)7X7cbE6RC~I;VMbMK1N9j`cN+Mb*d2r|#f zKAcb$cwDV|&+Tf%Gr$1f`qnKlsM=dKShsU9s{8ppGP&tgYPW}YLtIyBYV8$%=_SVc zd&xs4@$_lrNxB%~1ajTXDsiQY%l}yxGhlbm54^#Q=BIb|l)A#u>6khn{aTd%IY$uF z)>U3%h=!U?12_kWA>)5?*_aR3-D*txp0PmK&uh#CFV*AI_*s1VFs8(heweFs^740x zUFz3$*B{g#a6cJ^g-;ikj8?C6SpVTv(Cw4FC5p~hmoUi9Bm=L=hxyHZAcr`@!>ilUm6i;pjYxNA1gV3sqS*JeQtM7)^f83+ZuVXN zrS#yzUEgumMNsfPbGGFq=J>?A;5RL%J!5vUx1)bnu>=hh>~Knt6mW6ZeoRW=J*qHb z*GPG`WYzzK0<(+&Rsgy51r5~AqN2gp^M1pOir5Axs#W}+$R{HK0|8{u{vwc{|7-LP zn%rwYN(yT2=8{x_6BzuJ6FAH5eQI*Mo7lMVgS~Ke z{_sv`=+jHbet(D%K-OMcx@X&=?@gbD3O1EmV@?;+d+DpmWiKA8uQ3aDI~5*;>{pZ1 zvNn=DW7g;G(WU6e#n5Zs1d&U8bNN1#x+{0kp)NJ(8#8x^UbEBC z+ZR2!`CK)uKcblK_#|4n;t`M_q10uJsX`Y+l>;>qK5{#~cwngw%;?-hjRR+u>{X1Zc9f*JJPQN9q_Q=rB2n3wAq0!1JVYhRHXXqDYi;aaG zdd-toN9yff!00pI^xv;X$`5#f~)Ze&i zxLe2yYwB^UQv>05Uv804YOMDqnBwj?O8~BUQD+Pdz4OSKoBKTU35dSnbap&lFEW?D zYw#4gaO?;xV=X*=#`hWQ>eDU6O!VLfn)x8{VIJ{ zu5!YTSeJ>L+LK?CLaJcadPX&1FvS;|w*wlBNdt|1Bbic_8+Z}-r7$TMQB@II@W zY5x(Oh%(k{s5a#FKTi`+JdR5{eib(Ui2pH5`|_3BpxK!0_P7WA_+&c0o3(62BLbv6 zZ)piLScShObxXFpRk`K?i1dDtHY=@6&#zw@!EetID-O}r<}YEi{IKU}!R+9iHT)1= zN5XJFxvqCx zIYq3qRA~C-?`I(0P{rV6$m^Xg;h*}rJNU^XOtDADiV^2rq!nb~QwaZkCmO`Tr}0vC zWc27%3V$+Q^CCPAEnQL}ujYIzA6EZ|k>mmAsyZpAK9}DlB%zu+z%fIy0(2wtawz?VC8+`CA z)eLvHyo;R{_9uU0*s9a_ne&ss8(uXHtgC$86TTE$0m=;iM$c7~BJe%>qJDC`>(KI> z#tN0uSJkV4|KUiX6;4o>oNU}C?Rr~p7IoHvh0G<8JNv#jN1sHc=o^frD6=aFD)4A= zSVf7to3}Hpyc1n_Hl0u8Pk&SaEhn}Q@jrO#dC#mQzh&FQrNKPE9SrzeWA7046@jl* zg_Wi5qL}Qf>JZqYaKFdjg614~l~q{V@;El*jC4#%)o#2**>6p-<9Mt0zIYc>M{M1g zt^Uk(H2u*D%-ab46D~+zdxx+RH03@CEq#_z29-i|#wyNKrt3`Y)Q7)^j;3wkIN*P^ zDCQM7cH;R`;vvyLVtrn~gL_WCN?pd24=6TJgdEx?3MzyP#pG-AqgyOjtq3%|eb9_2 z2ps{124~k*)6FKR?hMzAiqcIW(Rrcr+&aS-Y}|*P%hKtTCFM3j$PxXb(ogQKuG zo86c6_X`-y{CbW`qa=*HF!U=Uqj>2$U$Sdmj}_*0Es&lltfn13(L0$OTwRK$`@!J) zz3hkdvs4vy`=q_k)k0L4QMJ)2>9}+i#b}?e3c#~FQUEE+gTY6RHvY6;Ttt(lpSqeC zXu>MY0AY=rul~6RO^3BWIH%*t{R3Gf9}5qPg0&Mv26W=94z|4x9M#r_dXsy>{CeiZ zLpYMW9l)Uj&6fuoJoMel+_&_re_Mq9{0>2qko#=~J4-Ojzuw~`Lo+y$#2=f;9}TD0 zpMtBqN$-fAM4W#ji{>k%dTNcOoAFCpUT2@qlh+;F%lnY1iSC1gVAadx4!DLFd5o>e zCOc=Kqw$1 zcMrMWhJVL}Sqs^2nM<*Z#~k?K*-FtOmwlh6m*y6^q_jm6SLkQ8Hatn+gdAn8|1k5u zPJ7gpiaQR~38|-dbC-?S7`hs*xt48VnJ$064+iV`}i+Jr)O>?C$0KYBWO>5C#8PA zLBOfgz6?|B8p#aKJummmk+`09!7r!8d@!j;!RTdiRf(UQyEBExP^#@j(0syQ$nf}2 zk0?D$QU-B}0pN-HxLCJsLXmC|paxzA={%6BN7w^LQ zpI?yL%}^KaE&jVpAIENk6cxjO(@HIoG79GTEoCIdElX(wOIGBeYz6Z1w(Z{GFGkR; zcVH->B?FfYMjqce@mNniM$1!lC&srz?;zS!_MJzqfuvZAd?BrQ@wmP{=vZm&YRL9` z-@U?4`Kv8uhI;kKgnpZid`q#t5gDR=cW&cB{!4SsSg{niJBZq5q)=<0FmR z6YyLg&C01lcl?3e(hM%6S_D@S?j$F`(Ctk-65>p`4~eOr8vE15AbSi%D>TZ$3XQ}1 z%P*K8@mv}xIKA@14qM=0TPiI8WPZJaW?o2#hQ9wBS9AwZRY*dpii=XHAT<`3`Yx3X zrD9KEVC<|QdB-h^QW``IC{zC)c7+}>xSj0v9E0w73TBz!1$73;SAz+i$|iJb<#U0~ z+a=udiPgn@mhl{~CF|uym#O&tGC?;XhdziD*Kc1dF3WN8^-}LyXFlF0Q=op4j}Gh- zdIOr&0f!&aucoMJXQc3K^h+Ic>9`8OVhx(RMD6+3j3FY>RD|56`qHK^$|zMy^Lnbd-L@nUT&r>U;YgnN9JiKNWrsP-dNxy^%sU zu{!KwP;rL0*v-gZ^xdi8_tV-w(Xs))5q*4&whxeNvJuJ9-POyZnSQ_ga*5ONYQX~IbG&5j?Mnf>LA3?5n}-Qa>) zcVSQ`2JMcwADw(+Q6i<7oE9o-8QfO&f-XJiR+)Kl`V}IgFO{9}lW6Y@azNTVETO-= z#1}zA=)YYz;_%`Ja&f^V#%#h(6_O)b48~fJs1MI0fkgcziaEY_H`6$q_R;q$ijNdC zIHw=2-{qhr%Ar#Xsq#EREu*KJ5Jo}QeALvZJ;#xUHhDY)GyrDuwDe*1N0+?>$H_O5 z4TxRi?z}SI^x#i^dSjV=q+@08Vi;YW36!cxJoJ=&5%n4TLBNrTKBbQFA0Y7}rBiPy z@`!dqPVTLhoFkl-$TRqcaQ4767>%3Cnx+;&*U5hcxU|O9`ZuU#( zVk3E@A@pR|%!=KYz(~g(^1f3a>fX-sjjyv8hkTe-jGy1JqYSbqNdz;auVEJdUf1if zd;$h&xWJRZUh#iu78(KKv2_{C#kUFvZ%U1Bq2he$;YPkx3D>RFS0<>?8~lNXp}~h+ zE~9zxlSlC+EF3B$e84|D8peCwrQLuU3}`}CXZB8E;ema!!Oz|!9Z0l$0jbZT%o(j?6%T^%Dz3@|>b>L#*ss>#1=vcm_aEIIzDUa`32U)JgA%pW*C={wD&!9nNew zLbq58yCQ{R>`V_F1Iuycjp_Q4rPLzY;Z#jBZ6FBUp*&Jt!jo~5MFjEAgg@Z1OuYM$ z!hK|mKAhAPjOxO^Qc`C%MoK63Bw3M5eR=&uV-%`SpDVABl%0{`{R8=Y{n4vo`jJP; zXk9WZ=n@Q7PUoXg4yy$il>i)eSAJ$Y6ff-QMqC&abR+wYzu8XqKeUvK47sygr?S1H z$Vb|P`UKTgs*7=WU}O7kYtzSpx-*)*=4Yf) zu}z(1PEmgqgA{RwQiN#5+OuLKkwh}P{v?_0}TZ=Or=iXn99;Bcny}+Ws zhie=dUSl#pm#h?_OB`}bQZ#WAwAc zRF}Z}jcF`T?^$FEmwklrMk> Q1uRv_?`>q(=3PjUF*1Th_6!2-jr@rx9nKV%YV+ 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 + +## Install ClusterLink CLI + +{{% readfile file="/static/files/tutorials/cli-installation.md" %}} + +## Initialize clusters + +In this tutorial we set up a local environment using [kind][]. + +To setup three kind clusters: + +1. Install kind using the [kind installation guide][]. +2. Create a directory for all the tutorial files: + + ```sh + mkdir bookinfo-tutorial && cd bookinfo-tutorial + ``` + +3. Create three kind clusters: + + ```sh + kind create cluster --name=client + kind create cluster --name=server1 + kind create cluster --name=server2 + ``` + + {{< notice note >}} + kind uses the prefix `kind`, so the name of created clusters will be **kind-client**, **kind-server1**, and **kind-server2**. + {{< /notice >}} + +## Deploy BookInfo application + +Install the BookInfo application on the clusters: + +```sh +export BOOKINFO_FILES=https://raw.githubusercontent.com/clusterlink-net/clusterlink/main/demos/bookinfo/manifests +kubectl config use-context kind-client +kubectl apply -f $BOOKINFO_FILES/product/product.yaml +kubectl apply -f $BOOKINFO_FILES/product/product2.yaml +kubectl apply -f $BOOKINFO_FILES/product/details.yaml + +kubectl config use-context kind-server1 +kubectl apply -f $BOOKINFO_FILES/review/review-v2.yaml +kubectl apply -f $BOOKINFO_FILES/review/rating.yaml + +kubectl config use-context kind-server2 +kubectl apply -f $BOOKINFO_FILES/review/review-v3.yaml +kubectl apply -f $BOOKINFO_FILES/review/rating.yaml +``` + +## Deploy ClusterLink + +1. Create the fabric and peer certificates and deploy ClusterLink to the clusters: + + *Client cluster*: + + ```sh + clusterlink create fabric + + kubectl config use-context kind-client + clusterlink create peer-cert --name client + clusterlink deploy peer --name client --ingress=NodePort --ingress-port=30443 + + kubectl config use-context kind-server1 + clusterlink create peer-cert --name server1 + clusterlink deploy peer --name server1 --ingress=NodePort --ingress-port=30443 + + kubectl config use-context kind-server2 + clusterlink create peer-cert --name server2 + clusterlink deploy peer --name server2 --ingress=NodePort --ingress-port=30443 + ``` + + {{< notice note >}} + This tutorial uses NodePort to create an external access point for the kind clusters. + By default `deploy peer` creates an ingress of type LoadBalancer, + which is more suitable for Kubernetes clusters running in the cloud. + {{< /notice >}} + +2. Verify that the ClusterLink control and data plane components are running. + + It may take a few seconds for the deployments to be successfully created. + + ```sh + kubectl rollout status deployment cl-controlplane -n clusterlink-system + kubectl rollout status deployment cl-dataplane -n clusterlink-system + ``` + + {{% expand summary="Sample output" %}} + + ```sh + deployment "cl-controlplane" successfully rolled out + deployment "cl-dataplane" successfully rolled out + ``` + + {{% /expand %}} + +## Enable cross-cluster access + +In this step, we enable connectivity access for the BookInfo application + by connecting the productpage service (client) to the reviews-v2 service (server1) + and reviews-v3 (server2). We establish connections between the peers, export the reviews service on the server side, + import the reviews service on the client side, and create a policy to allow the connection. + +{{% readfile file="/static/files/tutorials/envsubst.md" %}} + + ```sh + kubectl config use-context kind-client + export SERVER1_IP=`docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' server1-control-plane` + curl -s $BOOKINFO_FILES/clusterlink/peer-server1.yaml | envsubst | kubectl apply -f - + export SERVER2_IP=`docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' server2-control-plane` + curl -s $BOOKINFO_FILES/clusterlink/peer-server2.yaml | envsubst | kubectl apply -f - + kubectl apply -f $BOOKINFO_FILES/clusterlink/import-reviews.yaml + kubectl apply -f $BOOKINFO_FILES/clusterlink/allow-policy.yaml + + kubectl config use-context kind-server1 + export CLIENT_IP=`docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' client-control-plane` + curl -s $BOOKINFO_FILES/clusterlink/peer-client.yaml | envsubst | kubectl apply -f - + kubectl apply -f $BOOKINFO_FILES/clusterlink/export-reviews.yaml + kubectl apply -f $BOOKINFO_FILES/clusterlink/allow-policy.yaml + + kubectl config use-context kind-server2 + export CLIENT_IP=`docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' client-control-plane` + curl -s $BOOKINFO_FILES/clusterlink/peer-client.yaml | envsubst | kubectl apply -f - + kubectl apply -f $BOOKINFO_FILES/clusterlink/export-reviews.yaml + kubectl apply -f $BOOKINFO_FILES/clusterlink/allow-policy.yaml + ``` + +## BookInfo test + +To run the BookInfo application use a Firefox web browser to connect the productpage microservice: + + ```sh + kubectl config use-context kind-client + firefox http://$CLIENT_IP:30001/productpage + firefox http://$CLIENT_IP:30002/productpage + ``` + +{{< notice note >}} +By default, a round robin policy is set. +{{< /notice >}} + +## Apply privileged access policy + +In the previous steps, an unprivileged access policy was set to allow connectivity. +To enforce high-priority policy use the `PrivilegedAccessPolicy` CR. +In this example, we enforce that the productpage service can access only reviews-v3 from server2, +and deny all services from server1: + +{{< tabpane text=true >}} +{{% tab header="File" %}} + +```sh +kubectl config use-context kind-client +kubectl apply -f $BOOKINFO_FILES/clusterlink/deny-server1-policy.yaml +``` + +{{% /tab %}} +{{% tab header="Full CR" %}} + +```sh +echo " +apiVersion: clusterlink.net/v1alpha1 +kind: PrivilegedAccessPolicy +metadata: + name: deny-from-server1 +spec: + action: deny + from: + - workloadSelector: {} + to: + - workloadSelector: { + matchLabels: { + peer.clusterlink.net/name: server1 + } + } +" | kubectl apply -f - +``` + +{{% /tab %}} +{{< /tabpane >}} + +To remove the privileged access policy use the following command: + +{{< tabpane text=true >}} +{{% tab header="File" %}} + +```sh +kubectl delete -f $BOOKINFO_FILES/clusterlink/deny-server1-policy.yaml +``` + +{{% /tab %}} +{{% tab header="Full CR" %}} + +```sh +echo " +apiVersion: clusterlink.net/v1alpha1 +kind: PrivilegedAccessPolicy +metadata: + name: deny-from-server1 +spec: + action: deny + from: + - workloadSelector: {} + to: + - workloadSelector: { + matchLabels: { + peer.clusterlink.net/name: server1 + } + } +" | kubectl delete -f - +``` + +{{% /tab %}} +{{< /tabpane >}} + +For more details regarding policy configuration, see [policies documentation][]. + +## Apply random load-balancing policy + +To apply a random load-balancing policy on connection to reviews import: + +{{< tabpane text=true >}} +{{% tab header="File" %}} + +```sh +kubectl config use-context kind-client +kubectl apply -f $BOOKINFO_FILES/clusterlink/import-reviews-lb-random.yaml +``` + +{{% /tab %}} +{{% tab header="Full CR" %}} + +```sh +echo " +apiVersion: clusterlink.net/v1alpha1 +kind: Import +metadata: + name: reviews + namespace: default +spec: + port: 9080 + sources: + - exportName: reviews + exportNamespace: default + peer: server1 + - exportName: reviews + exportNamespace: default + peer: server2 + lbScheme: random + +" | kubectl apply -f - +``` + +{{% /tab %}} +{{< /tabpane >}} + +## Apply static load balancing policy + +To apply a static policy that selects the first peer in the sources array and uses the other peer for failover cases, + use the following: + +{{< tabpane text=true >}} +{{% tab header="File" %}} + +```sh +kubectl config use-context kind-client +kubectl apply -f $BOOKINFO_FILES/clusterlink/import-reviews-lb-static.yaml +``` + +{{% /tab %}} +{{% tab header="Full CR" %}} + +```sh +echo " +apiVersion: clusterlink.net/v1alpha1 +kind: Import +metadata: + name: reviews + namespace: default +spec: + port: 9080 + sources: + - exportName: reviews + exportNamespace: default + peer: server1 + - exportName: reviews + exportNamespace: default + peer: server2 + lbScheme: static + +" | kubectl apply -f - + +{{% /tab %}} +{{< /tabpane >}} + +## Apply round robin load-balancing policy + +To apply a round robin load-balancing policy (which is used by default) to the connection to reviews import: + +{{< tabpane text=true >}} +{{% tab header="File" %}} + +```sh +kubectl config use-context kind-client +kubectl apply -f $BOOKINFO_FILES/clusterlink/import-reviews.yaml +``` + +{{% /tab %}} +{{% tab header="Full CR" %}} + +```sh +echo " +apiVersion: clusterlink.net/v1alpha1 +kind: Import +metadata: + name: reviews + namespace: default +spec: + port: 9080 + sources: + - exportName: reviews + exportNamespace: default + peer: server1 + - exportName: reviews + exportNamespace: default + peer: server2 + lbScheme: round-robin + +" | kubectl apply -f - +``` + +{{% /tab %}} +{{< /tabpane >}} + +## Cleanup + +1. Delete the `kind` clusters: + + ```sh + kind delete cluster --name=client + kind delete cluster --name=server1 + kind delete cluster --name=server2 + ``` + +2. Remove the tutorial directory: + + ```sh + cd .. && rm -rf bookinfo-tutorial + ``` + +3. Unset the environment variables: + + ```sh + unset BOOKINFO_FILES CLIENT_IP SERVER1_IP SERVER2_IP + ``` + + +[Istio BookInfo application]: https://istio.io/latest/docs/examples/bookinfo/ +[policies documentation]: {{< relref "../../concepts/policies/_index.md" >}} +[kind installation guide]: https://kind.sigs.k8s.io/docs/user/quick-start +[kind]: https://kind.sigs.k8s.io/ diff --git a/website/content/en/docs/v0.4/tutorials/iperf/index.md b/website/content/en/docs/v0.4/tutorials/iperf/index.md new file mode 100644 index 00000000..af835993 --- /dev/null +++ b/website/content/en/docs/v0.4/tutorials/iperf/index.md @@ -0,0 +1,288 @@ +--- +title: iPerf3 +description: Running basic connectivity between iPerf3 applications across two sites using ClusterLink +--- + +In this tutorial we'll establish iPerf3 connectivity between two kind clusters using ClusterLink. +The tutorial uses two kind clusters: + +1) Client cluster - runs ClusterLink along with an iPerf3 client. +2) Server cluster - runs ClusterLink along with an iPerf3 server. + +## Install ClusterLink CLI + +{{% readfile file="/static/files/tutorials/cli-installation.md" %}} + +## Initialize clusters + +In this tutorial we set up a local environment using [kind][]. + You can skip this step if you already have access to existing clusters, just be sure to + set KUBECONFIG accordingly. + +To setup two kind clusters: + +1. Install kind using [kind installation guide][]. +1. Create a directory for all the tutorial files: + + ```sh + mkdir iperf3-tutorial + ``` + +1. Open two terminals in the tutorial directory and create a kind cluster in each terminal: + + *Client cluster*: + + ```sh + cd iperf3-tutorial + kind create cluster --name=client + ``` + + *Server cluster*: + + ```sh + cd iperf3-tutorial + kind create cluster --name=server + ``` + + {{< notice note >}} + kind uses the prefix `kind`, so the name of created clusters will be **kind-client** and **kind-server**. + {{< /notice >}} + +1. Setup `KUBECONFIG` on each terminal to access the cluster: + + *Client cluster*: + + ```sh + kubectl config use-context kind-client + cp ~/.kube/config $PWD/config-client + export KUBECONFIG=$PWD/config-client + ``` + + *Server cluster*: + + ```sh + kubectl config use-context kind-server + cp ~/.kube/config $PWD/config-server + export KUBECONFIG=$PWD/config-server + ``` + +{{< notice tip >}} +You can run the tutorial in a single terminal and switch access between the clusters +using `kubectl config use-context kind-client` and `kubectl config use-context kind-server`. +{{< /notice >}} + +## Deploy iPerf3 client and server + +Install iPerf3 (client and server) on the clusters: + +*Client cluster*: + +```sh +export TEST_FILES=https://raw.githubusercontent.com/clusterlink-net/clusterlink/main/demos/iperf3/testdata/manifests +kubectl apply -f $TEST_FILES/iperf3-client/iperf3-client.yaml +``` + +*Server cluster*: + +```sh +export TEST_FILES=https://raw.githubusercontent.com/clusterlink-net/clusterlink/main/demos/iperf3/testdata/manifests +kubectl apply -f $TEST_FILES/iperf3-server/iperf3.yaml +``` + +## Deploy ClusterLink + +{{% readfile file="/static/files/tutorials/deploy-clusterlink.md" %}} + +## Enable cross-cluster access + +In this step, we enable connectivity access between the iPerf3 client and server. + For each step, you have an example demonstrating how to apply the command from a + file or providing the complete custom resource (CR) associated with the command. + +{{% readfile file="/static/files/tutorials/envsubst.md" %}} + +### Set-up peers + +{{% readfile file="/static/files/tutorials/peer.md" %}} + +### Export the iPerf server endpoint + +In the server cluster, export the iperf3-server service: + +*Server cluster*: + +{{< tabpane text=true >}} +{{% tab header="File" %}} + +```sh +kubectl apply -f $TEST_FILES/clusterlink/export-iperf3.yaml +``` + +{{% /tab %}} +{{% tab header="Full CR" %}} + +```sh +echo " +apiVersion: clusterlink.net/v1alpha1 +kind: Export +metadata: + name: iperf3-server + namespace: default +spec: + port: 5000 +" | kubectl apply -f - +``` + +{{% /tab %}} +{{< /tabpane >}} + +### Set-up import + +In the client cluster, import the iperf3-server service from the server cluster: + +*Client cluster*: + +{{< tabpane text=true >}} +{{% tab header="File" %}} + +```sh +kubectl apply -f $TEST_FILES/clusterlink/import-iperf3.yaml +``` + +{{% /tab %}} +{{% tab header="Full CR" %}} + +```sh +echo " +apiVersion: clusterlink.net/v1alpha1 +kind: Import +metadata: + name: iperf3-server + namespace: default +spec: + port: 5000 + sources: + - exportName: iperf3-server + exportNamespace: default + peer: server +" | kubectl apply -f - +``` + +{{% /tab %}} +{{< /tabpane >}} + +### Set-up access policies + +Create access policies on both clusters to allow connectivity: + +*Client cluster*: + +{{< tabpane text=true >}} +{{% tab header="File" %}} + +```sh +kubectl apply -f $TEST_FILES/clusterlink/allow-policy.yaml +``` + +{{% /tab %}} +{{% tab header="Full CR" %}} + +{{% readfile file="/static/files/tutorials/allow-all-policy.md" %}} + +{{% /tab %}} +{{< /tabpane >}} + +*Server cluster*: + +{{< tabpane text=true >}} +{{% tab header="File" %}} + +```sh +kubectl apply -f $TEST_FILES/clusterlink/allow-policy.yaml +``` + +{{% /tab %}} +{{% tab header="Full CR" %}} + +{{% readfile file="/static/files/tutorials/allow-all-policy.md" %}} + +{{% /tab %}} +{{< /tabpane >}} + +For more details regarding policy configuration, see [policies][] documentation. + +## Test service connectivity + +Test the iperf3 connectivity between the clusters: + +*Client cluster*: + +```sh +export IPERF3CLIENT=`kubectl get pods -l app=iperf3-client -o custom-columns=:metadata.name --no-headers` +kubectl exec -i $IPERF3CLIENT -- iperf3 -c iperf3-server --port 5000 +``` + +{{% expand summary="Sample output" %}} + +```sh +Connecting to host iperf3-server, port 5000 +[ 5] local 10.244.0.5 port 51666 connected to 10.96.46.198 port 5000 +[ ID] Interval Transfer Bitrate Retr Cwnd +[ 5] 0.00-1.00 sec 639 MBytes 5.36 Gbits/sec 0 938 KBytes +[ 5] 1.00-2.00 sec 627 MBytes 5.26 Gbits/sec 0 938 KBytes +[ 5] 2.00-3.00 sec 628 MBytes 5.26 Gbits/sec 0 938 KBytes +[ 5] 3.00-4.00 sec 635 MBytes 5.33 Gbits/sec 0 938 KBytes +[ 5] 4.00-5.00 sec 630 MBytes 5.29 Gbits/sec 0 938 KBytes +[ 5] 5.00-6.00 sec 636 MBytes 5.33 Gbits/sec 0 938 KBytes +[ 5] 6.00-7.00 sec 639 MBytes 5.36 Gbits/sec 0 938 KBytes +[ 5] 7.00-8.00 sec 634 MBytes 5.32 Gbits/sec 0 938 KBytes +[ 5] 8.00-9.00 sec 641 MBytes 5.39 Gbits/sec 0 938 KBytes +[ 5] 9.00-10.00 sec 633 MBytes 5.30 Gbits/sec 0 938 KBytes +- - - - - - - - - - - - - - - - - - - - - - - - - +[ ID] Interval Transfer Bitrate Retr +[ 5] 0.00-10.00 sec 6.19 GBytes 5.32 Gbits/sec 0 sender +[ 5] 0.00-10.00 sec 6.18 GBytes 5.31 Gbits/sec receiver + +iperf Done. +``` + +{{% /expand %}} + +## Cleanup + +1. Delete the kind clusters: + *Client cluster*: + + ```sh + kind delete cluster --name=client + ``` + + *Server cluster*: + + ```sh + kind delete cluster --name=server + ``` + +1. Remove the tutorial directory: + + ```sh + cd .. && rm -rf iperf3-tutorial + ``` + +1. Unset the environment variables: + + *Client cluster*: + + ```sh + unset KUBECONFIG TEST_FILES IPERF3CLIENT + ``` + + *Server cluster*: + + ```sh + unset KUBECONFIG TEST_FILES + ``` + +[kind]: https://kind.sigs.k8s.io/ +[kind installation guide]: https://kind.sigs.k8s.io/docs/user/quick-start +[policies]: {{< relref "../../concepts/policies/_index.md" >}} diff --git a/website/content/en/docs/v0.4/tutorials/nginx/index.md b/website/content/en/docs/v0.4/tutorials/nginx/index.md new file mode 100644 index 00000000..06da5840 --- /dev/null +++ b/website/content/en/docs/v0.4/tutorials/nginx/index.md @@ -0,0 +1,268 @@ +--- +title: nginx +description: Running basic connectivity between nginx server and client across two clusters using ClusterLink. +--- + +In this tutorial, we'll establish connectivity across clusters using ClusterLink to access a remote nginx server. +The tutorial uses two kind clusters: + +1) Client cluster - runs ClusterLink along with a client. +2) Server cluster - runs ClusterLink along with a nginx server. + +## Install ClusterLink CLI + +{{% readfile file="/static/files/tutorials/cli-installation.md" %}} + +## Initialize clusters + +This tutorial uses [kind][] as a local Kubernetes environment. + You can skip this step if you already have access to existing clusters, just be sure to + set KUBECONFIG accordingly. + +To setup two kind clusters: + +1. Install kind using [kind installation guide][]. +1. Create a directory for all the tutorial files: + + ```sh + mkdir nginx-tutorial + ``` + +1. Open two terminals in the tutorial directory and create a kind cluster in each terminal: + + *Client cluster*: + + ```sh + cd nginx-tutorial + kind create cluster --name=client + ``` + + *Server cluster*: + + ```sh + cd nginx-tutorial + kind create cluster --name=server + ``` + + {{< notice note >}} + kind uses the prefix `kind`, so the name of created clusters will be **kind-client** and **kind-server**. + {{< /notice >}} + +1. Setup `KUBECONFIG` on each terminal to access the cluster: + + *Client cluster*: + + ```sh + kubectl config use-context kind-client + cp ~/.kube/config $PWD/config-client + export KUBECONFIG=$PWD/config-client + ``` + + *Server cluster*: + + ```sh + kubectl config use-context kind-server + cp ~/.kube/config $PWD/config-server + export KUBECONFIG=$PWD/config-server + ``` + +{{< notice tip >}} +You can run the tutorial in a single terminal and switch access between the clusters +using `kubectl config use-context kind-client` and `kubectl config use-context kind-server`. +{{< /notice >}} + +## Deploy nginx client and server + +Setup the ```TEST_FILES``` variable, and install nginx on the server cluster. + +*Client cluster*: + +```sh +export TEST_FILES=https://raw.githubusercontent.com/clusterlink-net/clusterlink/main/demos/nginx/testdata +``` + +*Server cluster*: + +```sh +export TEST_FILES=https://raw.githubusercontent.com/clusterlink-net/clusterlink/main/demos/nginx/testdata +kubectl apply -f $TEST_FILES/nginx-server.yaml +``` + +## Deploy ClusterLink + +{{% readfile file="/static/files/tutorials/deploy-clusterlink.md" %}} + +## Enable cross-cluster access + +In this step, we enable access between the client and server. + For each step, you have an example demonstrating how to apply the command from a + file or providing the complete custom resource (CR) associated with the command. + +{{% readfile file="/static/files/tutorials/envsubst.md" %}} + +### Set-up peers + +{{% readfile file="/static/files/tutorials/peer.md" %}} + + +### Export the nginx server endpoint + +In the server cluster, export the nginx server service: + +*Server cluster*: + +{{< tabpane text=true >}} +{{% tab header="File" %}} + +```sh +kubectl apply -f $TEST_FILES/clusterlink/export-nginx.yaml +``` + +{{% /tab %}} +{{% tab header="Full CR" %}} + +```sh +echo " +apiVersion: clusterlink.net/v1alpha1 +kind: Export +metadata: + name: nginx + namespace: default +spec: + port: 80 +" | kubectl apply -f - +``` + +{{% /tab %}} +{{< /tabpane >}} + +### Set-up import + +In the client cluster, import the nginx service from the server cluster: + +*Client cluster*: + +{{< tabpane text=true >}} +{{% tab header="File" %}} + +```sh +kubectl apply -f $TEST_FILES/clusterlink/import-nginx.yaml +``` + +{{% /tab %}} +{{% tab header="Full CR" %}} + +```sh +echo " +apiVersion: clusterlink.net/v1alpha1 +kind: Import +metadata: + name: nginx + namespace: default +spec: + port: 80 + sources: + - exportName: nginx + exportNamespace: default + peer: server +" | kubectl apply -f - +``` + +{{% /tab %}} +{{< /tabpane >}} + +### Set-up access policies + +Create access policies on both clusters to allow connectivity: + +*Client cluster*: + +{{< tabpane text=true >}} +{{% tab header="File" %}} + +```sh +kubectl apply -f $TEST_FILES/clusterlink/allow-policy.yaml +``` + +{{% /tab %}} +{{% tab header="Full CR" %}} + +{{% readfile file="/static/files/tutorials/allow-all-policy.md" %}} + +{{% /tab %}} +{{< /tabpane >}} + +*Server cluster*: + +{{< tabpane text=true >}} +{{% tab header="File" %}} + +```sh +kubectl apply -f $TEST_FILES/clusterlink/allow-policy.yaml +``` + +{{% /tab %}} +{{% tab header="Full CR" %}} + +{{% readfile file="/static/files/tutorials/allow-all-policy.md" %}} + +{{% /tab %}} +{{< /tabpane >}} + +For more details regarding policy configuration, see [policies][] documentation. + +## Test service connectivity + +Test the connectivity between the clusters with a batch job of the ```curl``` command: + +*Client cluster*: + +```sh +kubectl apply -f $TEST_FILES/nginx-job.yaml +``` + +Verify the job succeeded: + +```sh +kubectl logs jobs/curl-nginx-homepage +``` + +{{% readfile file="/static/files/tutorials/nginx/nginx-output.md" %}} + +## Cleanup + +1. Delete the kind clusters: + *Client cluster*: + + ```sh + kind delete cluster --name=client + ``` + + *Server cluster*: + + ```sh + kind delete cluster --name=server + ``` + +1. Remove the tutorial directory: + + ```sh + cd .. && rm -rf nginx-tutorial + ``` + +1. Unset the environment variables: + *Client cluster*: + + ```sh + unset KUBECONFIG TEST_FILES + ``` + + *Server cluster*: + + ```sh + unset KUBECONFIG TEST_FILES + ``` + +[kind]: https://kind.sigs.k8s.io/ +[kind installation guide]: https://kind.sigs.k8s.io/docs/user/quick-start +[policies]: {{< relref "../../concepts/policies/_index.md" >}} From 07dbbf1740f973eecd424b0e7bbe72c10e1f01fb Mon Sep 17 00:00:00 2001 From: MICHAL MALKA Date: Wed, 24 Jul 2024 15:47:30 +0300 Subject: [PATCH 3/4] fix notice note in document to looks as all notes (with blue background) Signed-off-by: MICHAL MALKA --- website/content/en/docs/main/tasks/relay/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/content/en/docs/main/tasks/relay/index.md b/website/content/en/docs/main/tasks/relay/index.md index e7905bab..51242e61 100644 --- a/website/content/en/docs/main/tasks/relay/index.md +++ b/website/content/en/docs/main/tasks/relay/index.md @@ -56,8 +56,8 @@ This is an extension of the basic [nginx toturial][]. Please run it first and se ``` {{< notice note >}} - The relay cluster certificates should use the same Fabric CA files as the server and the client. - {{< /notice >}} + The relay cluster certificates should use the same Fabric CA files as the server and the client. + {{< /notice >}} 1. Deploy ClusterLink on the relay cluster: From dd5fb37d3b79c2055b870abac6d7a8f3be3efd66 Mon Sep 17 00:00:00 2001 From: MICHAL MALKA Date: Wed, 24 Jul 2024 17:13:33 +0300 Subject: [PATCH 4/4] fix on v0.4 too Signed-off-by: MICHAL MALKA --- website/content/en/docs/v0.4/tasks/relay/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/content/en/docs/v0.4/tasks/relay/index.md b/website/content/en/docs/v0.4/tasks/relay/index.md index e7905bab..51242e61 100644 --- a/website/content/en/docs/v0.4/tasks/relay/index.md +++ b/website/content/en/docs/v0.4/tasks/relay/index.md @@ -56,8 +56,8 @@ This is an extension of the basic [nginx toturial][]. Please run it first and se ``` {{< notice note >}} - The relay cluster certificates should use the same Fabric CA files as the server and the client. - {{< /notice >}} + The relay cluster certificates should use the same Fabric CA files as the server and the client. + {{< /notice >}} 1. Deploy ClusterLink on the relay cluster: