From cbaf9dd14157aae527f6a0e8988b9b6f5cb7b2c8 Mon Sep 17 00:00:00 2001 From: Lenny Chen Date: Fri, 17 Nov 2023 09:34:46 -0800 Subject: [PATCH 01/27] docs: kubevip starting paragraph --- .../clusters/edge/site-deployment/kubevip.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 docs/docs-content/clusters/edge/site-deployment/kubevip.md diff --git a/docs/docs-content/clusters/edge/site-deployment/kubevip.md b/docs/docs-content/clusters/edge/site-deployment/kubevip.md new file mode 100644 index 0000000000..505a5c099e --- /dev/null +++ b/docs/docs-content/clusters/edge/site-deployment/kubevip.md @@ -0,0 +1,13 @@ +--- +sidebar_label: "Set Up Kube-vip" +title: "Set Up Kube-vip" +description: "" +hide_table_of_contents: false +sidebar_position: 30 +tags: ["edge"] +--- + +You can use kube-vip to provide a virtual IP address for your cluster. + +Using kube-vip, you can expose services inside your cluster externally with a virtual IP address even if you do not have control over your host's network. kube-vip can also act as a load balancer for both your control plane and Kubernetes services of type `LoadBalancer`. + From 113ce5538dddf403efa9874275a077eaad01e325 Mon Sep 17 00:00:00 2001 From: Lenny Chen Date: Mon, 20 Nov 2023 13:54:39 -0800 Subject: [PATCH 02/27] add more details about kubevip config --- .../clusters/edge/site-deployment/kubevip.md | 47 +++++++++++++++++-- 1 file changed, 42 insertions(+), 5 deletions(-) diff --git a/docs/docs-content/clusters/edge/site-deployment/kubevip.md b/docs/docs-content/clusters/edge/site-deployment/kubevip.md index 505a5c099e..57a8756d36 100644 --- a/docs/docs-content/clusters/edge/site-deployment/kubevip.md +++ b/docs/docs-content/clusters/edge/site-deployment/kubevip.md @@ -1,13 +1,50 @@ --- -sidebar_label: "Set Up Kube-vip" -title: "Set Up Kube-vip" -description: "" +sidebar_label: "Publish Cluster Services with Kube-vip" +title: "Publish Cluster Services with Kube-vip" +description: "Guide to publishing cluster services with kube-vip." hide_table_of_contents: false sidebar_position: 30 tags: ["edge"] --- -You can use kube-vip to provide a virtual IP address for your cluster. +You can use kube-vip to provide a virtual IP address for your cluster and use it to expose a Service of type `LoadBalancer` on the external network. -Using kube-vip, you can expose services inside your cluster externally with a virtual IP address even if you do not have control over your host's network. kube-vip can also act as a load balancer for both your control plane and Kubernetes services of type `LoadBalancer`. +kube-vip supports DHCP environments and can request additional IP address from the DHCP server automatically. Using kube-vip, you can expose services inside your cluster externally with a virtual IP address even if you do not have control over your host's network. kube-vip can also act as a load balancer for both your control plane and Kubernetes services of type `LoadBalancer`. +## Enablement + +To leverage KubeVIP to expose a Service of type `LoadBalancer` on the external network, follow these steps: + +1. In the YAML file for the Kubernetes layer of your cluster profile, add the following parameters: + ``` + cluster: + kubevipArgs: + vip_interface: "ens32" + svc_enable: true + vip_servicesinterface: "eno1" + ``` +2. In the manifest for your load balancer service, add two parameters `loadBalancerIP: 0.0.0.0` and `loadBalancerClass: kube-vip.io/kube-vip-class` to the service spec: + ``` + apiVersion: v1 + kind: Service + metadata: + name: http-app-svc + namespace: myapp + spec: + loadBalancerIP: 0.0.0.0 + loadBalancerClass: kube-vip.io/kube-vip-class + ports: + - port: 80 + protocol: TCP + targetPort: http + selector: + app.kubernetes.io/name: http-app + type: LoadBalancer + ``` +This causes KubeVIP to create a `macvlan` interface on top of the interface defined by `vip_servicesinterface` and request a DHCP address for that new interface. It can then listen for traffic on that IP and forward it to the pod defined by the Service. + +KubeVIP adds an annotation named `kube-vip.io/requestedIP` to the Service resource to document which IP address it has received from the DHCP server. Whenever KubeVIP restarts, it will attempt to re-request the same IP address for that Service from the DHCP server. You can remove the annotation to make KubeVIP request a fresh address. + +## Validation + +To validate that your \ No newline at end of file From f19962f32170117b7c96549ed9d0f89d36f23ea7 Mon Sep 17 00:00:00 2001 From: Lenny Chen Date: Tue, 28 Nov 2023 16:21:43 -0800 Subject: [PATCH 03/27] docs: kubevip draft --- .../clusters/edge/site-deployment/kubevip.md | 50 ++++++++++++++++--- 1 file changed, 44 insertions(+), 6 deletions(-) diff --git a/docs/docs-content/clusters/edge/site-deployment/kubevip.md b/docs/docs-content/clusters/edge/site-deployment/kubevip.md index 57a8756d36..c9dadb78d8 100644 --- a/docs/docs-content/clusters/edge/site-deployment/kubevip.md +++ b/docs/docs-content/clusters/edge/site-deployment/kubevip.md @@ -9,13 +9,23 @@ tags: ["edge"] You can use kube-vip to provide a virtual IP address for your cluster and use it to expose a Service of type `LoadBalancer` on the external network. -kube-vip supports DHCP environments and can request additional IP address from the DHCP server automatically. Using kube-vip, you can expose services inside your cluster externally with a virtual IP address even if you do not have control over your host's network. kube-vip can also act as a load balancer for both your control plane and Kubernetes services of type `LoadBalancer`. +Kube-vip supports DHCP environments and can request additional IP address from the DHCP server automatically. Using kube-vip, you can expose services inside your cluster externally with a virtual IP address even if you do not have control over your host's network. Kube-vip can also act as a load balancer for both your control plane and Kubernetes services of type `LoadBalancer`. ## Enablement To leverage KubeVIP to expose a Service of type `LoadBalancer` on the external network, follow these steps: -1. In the YAML file for the Kubernetes layer of your cluster profile, add the following parameters: +1. Log in to [Palette](https://console.spectrocloud.com/). + +2. From the left **Main Menu** click **Clusters > Add a New Cluster**. + +4. Choose **Edge Native** for the cluster type and click **Start Edge Native Configuration**. + +5. Give the cluster a name, description, and tags. Click on **Next**. + +6. Select the cluster profile that you plan to use to deploy your cluster and publish services with and click **Next**. + +7. In the **Parameters** step, click on the Kubernetes layer of your profile. In the YAML file for the Kubernetes layer of your cluster profile, add the following parameters: ``` cluster: kubevipArgs: @@ -23,7 +33,9 @@ To leverage KubeVIP to expose a Service of type `LoadBalancer` on the external n svc_enable: true vip_servicesinterface: "eno1" ``` -2. In the manifest for your load balancer service, add two parameters `loadBalancerIP: 0.0.0.0` and `loadBalancerClass: kube-vip.io/kube-vip-class` to the service spec: + These are kube-vip environment variables that enable kube-vip to provide load balancing services for Kubernetes services and specify which network interface will be used by kube-vip for handling traffic to the Kubernetes API server and Kubernetes services. + +8. Next, in the manifest for your load balancer service, add two parameters `loadBalancerIP: 0.0.0.0` and `loadBalancerClass: kube-vip.io/kube-vip-class` to the service spec: ``` apiVersion: v1 kind: Service @@ -41,10 +53,36 @@ To leverage KubeVIP to expose a Service of type `LoadBalancer` on the external n app.kubernetes.io/name: http-app type: LoadBalancer ``` -This causes KubeVIP to create a `macvlan` interface on top of the interface defined by `vip_servicesinterface` and request a DHCP address for that new interface. It can then listen for traffic on that IP and forward it to the pod defined by the Service. -KubeVIP adds an annotation named `kube-vip.io/requestedIP` to the Service resource to document which IP address it has received from the DHCP server. Whenever KubeVIP restarts, it will attempt to re-request the same IP address for that Service from the DHCP server. You can remove the annotation to make KubeVIP request a fresh address. +9. Click **Next** and finish the rest of the configurations. For more information, refer to [Create Cluster Definition](./site-installation/cluster-deployment.md). + + +When the cluster finished deploying, KubeVIP adds an annotation named `kube-vip.io/requestedIP` to the Service resource to document which IP address it has received from the external network. Whenever kube-vip restarts, it will attempt to re-request the same IP address for that service. You can remove the annotation to make kube-vip request a fresh address. ## Validation -To validate that your \ No newline at end of file +To validate that kube-vip has been set up correctly and is performing load balancing services for your cluster: + +1. Access the cluster via kubectl CLI. For more information, refer to [Access Cluster with CLI](../../cluster-management/palette-webctl.md). +2. Issue the command `kubectl get service SERVICE_NAME` and replace `SERVICE_NAME` with the name of the service you configure with kube-vip. The output of the command displays the external IP address that kube-vip has received from the external network. + +## Limitations + +Kube-vip has many environment variables you can use to customize its behavior. You can specify values for the environment variables with the `cluster.kubeArgs` parameter. For a complete list of environment variables in kube-vip, refer to [kube-vip documentation](https://kube-vip.io/docs/installation/flags/?query=vip_interface#environment-variables). +However, Palette has configured values for the following parameters and they cannot be changed: + +| Environment Variable | Description | Example Value | +|----------------------|-------------|---------------| +| `vip_arp` | Enables ARP broadcasts from leader. | `"true"` | +| `port` | Specifies the port number that `kube-vip` will use.| `"6443"` | +| `vip_cidr` | Sets the CIDR notation for the Virtual IP. A value of `32` denotes a single IP address in IPv4. | `"32"` | +| `cp_enable` | Enables kube-vip control plane functionality. | `"true"` | +| `cp_namespace` | The namespace where the lease will reside. | `"kube-system"` | +| `vip_ddns` | Enables Dynamic DNS support. | `"{{ .DDNS}}"` | +| `vip_leaderelection` | Enables Kubernetes LeaderElection. | `"true"` | +| `vip_leaseduration` | Sets the lease duration in seconds. | `"30"` | +| `vip_renewdeadline` | Specifies the deadline in seconds for renewing the lease. | `"20"` | +| `vip_retryperiod` | Number of times the leader will hold the lease for. | `"4"` | +| `address` | Template placeholder for the virtual IP address. | `"{{ .VIP}}"` | + + From e924bdbc23b5a24da9540d3a79a7c09e4ed2de7f Mon Sep 17 00:00:00 2001 From: Lenny Chen Date: Tue, 28 Nov 2023 16:40:11 -0800 Subject: [PATCH 04/27] docs: added prerequisites --- .../clusters/edge/site-deployment/kubevip.md | 45 +++++++++++-------- 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/docs/docs-content/clusters/edge/site-deployment/kubevip.md b/docs/docs-content/clusters/edge/site-deployment/kubevip.md index c9dadb78d8..ee60e6e7f0 100644 --- a/docs/docs-content/clusters/edge/site-deployment/kubevip.md +++ b/docs/docs-content/clusters/edge/site-deployment/kubevip.md @@ -11,9 +11,11 @@ You can use kube-vip to provide a virtual IP address for your cluster and use it Kube-vip supports DHCP environments and can request additional IP address from the DHCP server automatically. Using kube-vip, you can expose services inside your cluster externally with a virtual IP address even if you do not have control over your host's network. Kube-vip can also act as a load balancer for both your control plane and Kubernetes services of type `LoadBalancer`. -## Enablement +## Prerequisites + +- At least one Edge device with x86_64/AMD64 processor architecture registered in your Palette account -To leverage KubeVIP to expose a Service of type `LoadBalancer` on the external network, follow these steps: +## Enablement 1. Log in to [Palette](https://console.spectrocloud.com/). @@ -35,23 +37,30 @@ To leverage KubeVIP to expose a Service of type `LoadBalancer` on the external n ``` These are kube-vip environment variables that enable kube-vip to provide load balancing services for Kubernetes services and specify which network interface will be used by kube-vip for handling traffic to the Kubernetes API server and Kubernetes services. -8. Next, in the manifest for your load balancer service, add two parameters `loadBalancerIP: 0.0.0.0` and `loadBalancerClass: kube-vip.io/kube-vip-class` to the service spec: +8. Next, in layer of your cluster profile that has the service you want to expose, add two parameters `loadBalancerIP: 0.0.0.0` and `loadBalancerClass: kube-vip.io/kube-vip-class` to the service spec: ``` - apiVersion: v1 - kind: Service - metadata: - name: http-app-svc - namespace: myapp - spec: - loadBalancerIP: 0.0.0.0 - loadBalancerClass: kube-vip.io/kube-vip-class - ports: - - port: 80 - protocol: TCP - targetPort: http - selector: - app.kubernetes.io/name: http-app - type: LoadBalancer + apiVersion: apps/v1 + kind: Deployment + metadata: + name: hello-universe-deployment + spec: + replicas: 2 + selector: + matchLabels: + app: hello-universe + template: + metadata: + labels: + app: hello-universe + spec: + loadBalancerIP: 0.0.0.0 + loadBalancerClass: kube-vip.io/kube-vip-class + containers: + - name: hello-universe + image: ghcr.io/spectrocloud/hello-universe:1.0.12 + imagePullPolicy: IfNotPresent + ports: + - containerPort: 8080 ``` 9. Click **Next** and finish the rest of the configurations. For more information, refer to [Create Cluster Definition](./site-installation/cluster-deployment.md). From 8dcc733eab963cee1e75914e623f23bca0509e80 Mon Sep 17 00:00:00 2001 From: Lenny Chen Date: Wed, 29 Nov 2023 13:24:26 -0800 Subject: [PATCH 05/27] docs: address review comments --- .../clusters/edge/site-deployment/kubevip.md | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/docs/docs-content/clusters/edge/site-deployment/kubevip.md b/docs/docs-content/clusters/edge/site-deployment/kubevip.md index ee60e6e7f0..4c5bb3430d 100644 --- a/docs/docs-content/clusters/edge/site-deployment/kubevip.md +++ b/docs/docs-content/clusters/edge/site-deployment/kubevip.md @@ -7,7 +7,7 @@ sidebar_position: 30 tags: ["edge"] --- -You can use kube-vip to provide a virtual IP address for your cluster and use it to expose a Service of type `LoadBalancer` on the external network. +You can use kube-vip to provide a virtual IP address for your cluster and use it to expose a service of type `LoadBalancer` on the external network. Kube-vip supports DHCP environments and can request additional IP address from the DHCP server automatically. Using kube-vip, you can expose services inside your cluster externally with a virtual IP address even if you do not have control over your host's network. Kube-vip can also act as a load balancer for both your control plane and Kubernetes services of type `LoadBalancer`. @@ -28,14 +28,21 @@ Kube-vip supports DHCP environments and can request additional IP address from t 6. Select the cluster profile that you plan to use to deploy your cluster and publish services with and click **Next**. 7. In the **Parameters** step, click on the Kubernetes layer of your profile. In the YAML file for the Kubernetes layer of your cluster profile, add the following parameters: - ``` + ```yaml cluster: kubevipArgs: vip_interface: "ens32" svc_enable: true vip_servicesinterface: "eno1" ``` - These are kube-vip environment variables that enable kube-vip to provide load balancing services for Kubernetes services and specify which network interface will be used by kube-vip for handling traffic to the Kubernetes API server and Kubernetes services. + + These are kube-vip environment variables that enable kube-vip to provide load balancing services for Kubernetes services and specify which network interface will be used by kube-vip for handling traffic to the Kubernetes API server and Kubernetes services. The following table provides you guide on how to choose the values for each parameter: + + | Parameter | Description | + |-----------|-------------| + | `vip_interface` | Specifies the Network Interface Controller (NIC) that kube-vip will use for handling traffic to the Kubernetes API. If you do not specify `vip_serviceinterface`, kube-vip will also use this interface for handling traffic to LoadBalancer-type services. | + | `svc_enable` | Enables kube-vip to handle traffic for services of type LoadBalancer. | + | `vip_serviceinterface` | Specifies the NIC that kube-vip will use for handling traffic to LoadBalancer-type services. If your cluster has network overlay enabled, or if your host has multiple NICs and you want to publish services on a different NIC than the one used by Kubernetes, you should specify the name of the NIC as the value of this parameter. If this parameter is not specified and you have set `svc_enable` to `true`, kube-vip will use the NIC you specified in `vip_interface` to handle traffic to LoadBalancer-type services. | 8. Next, in layer of your cluster profile that has the service you want to expose, add two parameters `loadBalancerIP: 0.0.0.0` and `loadBalancerClass: kube-vip.io/kube-vip-class` to the service spec: ``` @@ -66,18 +73,18 @@ Kube-vip supports DHCP environments and can request additional IP address from t 9. Click **Next** and finish the rest of the configurations. For more information, refer to [Create Cluster Definition](./site-installation/cluster-deployment.md). -When the cluster finished deploying, KubeVIP adds an annotation named `kube-vip.io/requestedIP` to the Service resource to document which IP address it has received from the external network. Whenever kube-vip restarts, it will attempt to re-request the same IP address for that service. You can remove the annotation to make kube-vip request a fresh address. +When the cluster finished deploying, kube-vip adds an annotation named `kube-vip.io/requestedIP` to the Service resource to document which IP address it has received from the external network. Whenever kube-vip restarts, it will attempt to re-request the same IP address for that service. You can remove the annotation to make kube-vip request a fresh address. ## Validation To validate that kube-vip has been set up correctly and is performing load balancing services for your cluster: 1. Access the cluster via kubectl CLI. For more information, refer to [Access Cluster with CLI](../../cluster-management/palette-webctl.md). -2. Issue the command `kubectl get service SERVICE_NAME` and replace `SERVICE_NAME` with the name of the service you configure with kube-vip. The output of the command displays the external IP address that kube-vip has received from the external network. +2. Issue the command `kubectl get service SERVICE_NAME` and replace `SERVICE_NAME` with the name of the service you configure with kube-vip. The output of the command displays the external IP address that kube-vip has received from the external network or the IP address you specified in the `loadBalancerIP` parameter. ## Limitations -Kube-vip has many environment variables you can use to customize its behavior. You can specify values for the environment variables with the `cluster.kubeArgs` parameter. For a complete list of environment variables in kube-vip, refer to [kube-vip documentation](https://kube-vip.io/docs/installation/flags/?query=vip_interface#environment-variables). +Kube-vip has many environment variables you can use to customize its behavior. You can specify values for the environment variables with the `cluster.kubevipArgs` parameter. For a complete list of environment variables in kube-vip, refer to [kube-vip documentation](https://kube-vip.io/docs/installation/flags/?query=vip_interface#environment-variables). However, Palette has configured values for the following parameters and they cannot be changed: | Environment Variable | Description | Example Value | From 85e3cb37fb44db148931f25dc7690cde3d288236 Mon Sep 17 00:00:00 2001 From: Lenny Chen <55669665+lennessyy@users.noreply.github.com> Date: Thu, 30 Nov 2023 11:09:06 -0800 Subject: [PATCH 06/27] Apply suggestions from code review Co-authored-by: Karl Cardenas --- .../clusters/edge/site-deployment/kubevip.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/docs-content/clusters/edge/site-deployment/kubevip.md b/docs/docs-content/clusters/edge/site-deployment/kubevip.md index 4c5bb3430d..f31f5bc34a 100644 --- a/docs/docs-content/clusters/edge/site-deployment/kubevip.md +++ b/docs/docs-content/clusters/edge/site-deployment/kubevip.md @@ -13,21 +13,21 @@ Kube-vip supports DHCP environments and can request additional IP address from t ## Prerequisites -- At least one Edge device with x86_64/AMD64 processor architecture registered in your Palette account +- At least one Edge device with x86_64 or AMD64 processor architecture registered in your Palette account ## Enablement 1. Log in to [Palette](https://console.spectrocloud.com/). -2. From the left **Main Menu** click **Clusters > Add a New Cluster**. +2. From the left **Main Menu** click **Clusters ** and select **Add a New Cluster**. 4. Choose **Edge Native** for the cluster type and click **Start Edge Native Configuration**. 5. Give the cluster a name, description, and tags. Click on **Next**. -6. Select the cluster profile that you plan to use to deploy your cluster and publish services with and click **Next**. +6. Select the cluster profile that you plan to use to deploy your cluster with. Click **Next**. -7. In the **Parameters** step, click on the Kubernetes layer of your profile. In the YAML file for the Kubernetes layer of your cluster profile, add the following parameters: +7. In the **Parameters** step, click on the Kubernetes layer of your profile. In the YAML file for the Kubernetes layer of your cluster profile, add the following parameters. ```yaml cluster: kubevipArgs: @@ -38,13 +38,13 @@ Kube-vip supports DHCP environments and can request additional IP address from t These are kube-vip environment variables that enable kube-vip to provide load balancing services for Kubernetes services and specify which network interface will be used by kube-vip for handling traffic to the Kubernetes API server and Kubernetes services. The following table provides you guide on how to choose the values for each parameter: - | Parameter | Description | + | **Parameter** | **Description** | |-----------|-------------| | `vip_interface` | Specifies the Network Interface Controller (NIC) that kube-vip will use for handling traffic to the Kubernetes API. If you do not specify `vip_serviceinterface`, kube-vip will also use this interface for handling traffic to LoadBalancer-type services. | | `svc_enable` | Enables kube-vip to handle traffic for services of type LoadBalancer. | | `vip_serviceinterface` | Specifies the NIC that kube-vip will use for handling traffic to LoadBalancer-type services. If your cluster has network overlay enabled, or if your host has multiple NICs and you want to publish services on a different NIC than the one used by Kubernetes, you should specify the name of the NIC as the value of this parameter. If this parameter is not specified and you have set `svc_enable` to `true`, kube-vip will use the NIC you specified in `vip_interface` to handle traffic to LoadBalancer-type services. | -8. Next, in layer of your cluster profile that has the service you want to expose, add two parameters `loadBalancerIP: 0.0.0.0` and `loadBalancerClass: kube-vip.io/kube-vip-class` to the service spec: +8. Next, in layer of your cluster profile that has the service you want to expose, add two parameters `loadBalancerIP: 0.0.0.0` and `loadBalancerClass: kube-vip.io/kube-vip-class` to the service spec. The following example manifest displays the usage of these two parameters. ``` apiVersion: apps/v1 kind: Deployment @@ -77,7 +77,7 @@ When the cluster finished deploying, kube-vip adds an annotation named `kube-vip ## Validation -To validate that kube-vip has been set up correctly and is performing load balancing services for your cluster: +Use the following steps to validate that kube-vip has been set up correctly and is performing load balancing services for your cluster. 1. Access the cluster via kubectl CLI. For more information, refer to [Access Cluster with CLI](../../cluster-management/palette-webctl.md). 2. Issue the command `kubectl get service SERVICE_NAME` and replace `SERVICE_NAME` with the name of the service you configure with kube-vip. The output of the command displays the external IP address that kube-vip has received from the external network or the IP address you specified in the `loadBalancerIP` parameter. From 6c63bd5254584afcc00c1d4bdea31a9d74ba53c7 Mon Sep 17 00:00:00 2001 From: Lenny Chen Date: Thu, 30 Nov 2023 12:15:28 -0800 Subject: [PATCH 07/27] docs: address review comments --- .../clusters/edge/site-deployment/kubevip.md | 83 ++++++++++--------- 1 file changed, 45 insertions(+), 38 deletions(-) diff --git a/docs/docs-content/clusters/edge/site-deployment/kubevip.md b/docs/docs-content/clusters/edge/site-deployment/kubevip.md index f31f5bc34a..f265eba199 100644 --- a/docs/docs-content/clusters/edge/site-deployment/kubevip.md +++ b/docs/docs-content/clusters/edge/site-deployment/kubevip.md @@ -15,6 +15,25 @@ Kube-vip supports DHCP environments and can request additional IP address from t - At least one Edge device with x86_64 or AMD64 processor architecture registered in your Palette account +## Limitations + +Kube-vip has many environment variables you can use to customize its behavior. You can specify values for the environment variables with the `cluster.kubevipArgs` parameter. For a complete list of environment variables in kube-vip, refer to [kube-vip documentation](https://kube-vip.io/docs/installation/flags/?query=vip_interface#environment-variables). +However, Palette has configured values for the following parameters and they cannot be changed: + +| Environment Variable | Description | Example Value | +|----------------------|-------------|---------------| +| `vip_arp` | Enables ARP broadcasts from leader. | `"true"` | +| `port` | Specifies the port number that `kube-vip` will use.| `"6443"` | +| `vip_cidr` | Sets the CIDR notation for the Virtual IP. A value of `32` denotes a single IP address in IPv4. | `"32"` | +| `cp_enable` | Enables kube-vip control plane functionality. | `"true"` | +| `cp_namespace` | The namespace where the lease will reside. | `"kube-system"` | +| `vip_ddns` | Enables Dynamic DNS support. | `"{{ .DDNS}}"` | +| `vip_leaderelection` | Enables Kubernetes LeaderElection. | `"true"` | +| `vip_leaseduration` | Sets the lease duration in seconds. | `"30"` | +| `vip_renewdeadline` | Specifies the deadline in seconds for renewing the lease. | `"20"` | +| `vip_retryperiod` | Number of times the leader will hold the lease for. | `"4"` | +| `address` | Template placeholder for the virtual IP address. | `"{{ .VIP}}"` | + ## Enablement 1. Log in to [Palette](https://console.spectrocloud.com/). @@ -31,9 +50,9 @@ Kube-vip supports DHCP environments and can request additional IP address from t ```yaml cluster: kubevipArgs: - vip_interface: "ens32" + vip_interface: "INTERFACE_NAME" svc_enable: true - vip_servicesinterface: "eno1" + vip_servicesinterface: "INTERFACE_NAME" ``` These are kube-vip environment variables that enable kube-vip to provide load balancing services for Kubernetes services and specify which network interface will be used by kube-vip for handling traffic to the Kubernetes API server and Kubernetes services. The following table provides you guide on how to choose the values for each parameter: @@ -46,34 +65,30 @@ Kube-vip supports DHCP environments and can request additional IP address from t 8. Next, in layer of your cluster profile that has the service you want to expose, add two parameters `loadBalancerIP: 0.0.0.0` and `loadBalancerClass: kube-vip.io/kube-vip-class` to the service spec. The following example manifest displays the usage of these two parameters. ``` - apiVersion: apps/v1 - kind: Deployment + apiVersion: v1 + kind: Service metadata: - name: hello-universe-deployment + name: http-app-svc + namespace: myapp spec: - replicas: 2 + loadBalancerIP: 0.0.0.0 + loadBalancerClass: kube-vip.io/kube-vip-class + ports: + - port: 80 + protocol: TCP + targetPort: http selector: - matchLabels: - app: hello-universe - template: - metadata: - labels: - app: hello-universe - spec: - loadBalancerIP: 0.0.0.0 - loadBalancerClass: kube-vip.io/kube-vip-class - containers: - - name: hello-universe - image: ghcr.io/spectrocloud/hello-universe:1.0.12 - imagePullPolicy: IfNotPresent - ports: - - containerPort: 8080 + app.kubernetes.io/name: http-app + type: LoadBalancer ``` 9. Click **Next** and finish the rest of the configurations. For more information, refer to [Create Cluster Definition](./site-installation/cluster-deployment.md). +When the cluster finished deploying, kube-vip adds an annotation named `kube-vip.io/requestedIP` to the Service resource to document which IP address it has received from the external network. Whenever kube-vip restarts, it will attempt to re-request the same IP address for that service. You can remove the annotation to make kube-vip request a fresh address with the following command. Replace `SERVICE_NAME` with the name of your service, and make sure to include the minus symbol`-` symbol at the end of the annotation. -When the cluster finished deploying, kube-vip adds an annotation named `kube-vip.io/requestedIP` to the Service resource to document which IP address it has received from the external network. Whenever kube-vip restarts, it will attempt to re-request the same IP address for that service. You can remove the annotation to make kube-vip request a fresh address. +```shell +kubectl annotate service SERVICE_NAME kube-vip.io/requestedIP- +``` ## Validation @@ -82,23 +97,15 @@ Use the following steps to validate that kube-vip has been set up correctly and 1. Access the cluster via kubectl CLI. For more information, refer to [Access Cluster with CLI](../../cluster-management/palette-webctl.md). 2. Issue the command `kubectl get service SERVICE_NAME` and replace `SERVICE_NAME` with the name of the service you configure with kube-vip. The output of the command displays the external IP address that kube-vip has received from the external network or the IP address you specified in the `loadBalancerIP` parameter. -## Limitations + ```shell + kubectl get service http-app-svc + ``` -Kube-vip has many environment variables you can use to customize its behavior. You can specify values for the environment variables with the `cluster.kubevipArgs` parameter. For a complete list of environment variables in kube-vip, refer to [kube-vip documentation](https://kube-vip.io/docs/installation/flags/?query=vip_interface#environment-variables). -However, Palette has configured values for the following parameters and they cannot be changed: + ``` + NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE + http-app-svc LoadBalancer 10.100.200.10 10.10.1.100 80:30720/TCP 5m + ``` -| Environment Variable | Description | Example Value | -|----------------------|-------------|---------------| -| `vip_arp` | Enables ARP broadcasts from leader. | `"true"` | -| `port` | Specifies the port number that `kube-vip` will use.| `"6443"` | -| `vip_cidr` | Sets the CIDR notation for the Virtual IP. A value of `32` denotes a single IP address in IPv4. | `"32"` | -| `cp_enable` | Enables kube-vip control plane functionality. | `"true"` | -| `cp_namespace` | The namespace where the lease will reside. | `"kube-system"` | -| `vip_ddns` | Enables Dynamic DNS support. | `"{{ .DDNS}}"` | -| `vip_leaderelection` | Enables Kubernetes LeaderElection. | `"true"` | -| `vip_leaseduration` | Sets the lease duration in seconds. | `"30"` | -| `vip_renewdeadline` | Specifies the deadline in seconds for renewing the lease. | `"20"` | -| `vip_retryperiod` | Number of times the leader will hold the lease for. | `"4"` | -| `address` | Template placeholder for the virtual IP address. | `"{{ .VIP}}"` | + In this example, the external IP `10.10.1.100` is the IP address that kube-vip received from the DHCP server or the IP address you specified in the `loadBalancerIP` parameter. From c2eed6c15b7a6debe873c2e34d3a35408e84da8f Mon Sep 17 00:00:00 2001 From: Lenny Chen Date: Thu, 30 Nov 2023 12:17:14 -0800 Subject: [PATCH 08/27] docs: clarify wording --- docs/docs-content/clusters/edge/site-deployment/kubevip.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs-content/clusters/edge/site-deployment/kubevip.md b/docs/docs-content/clusters/edge/site-deployment/kubevip.md index f265eba199..aa7db410cf 100644 --- a/docs/docs-content/clusters/edge/site-deployment/kubevip.md +++ b/docs/docs-content/clusters/edge/site-deployment/kubevip.md @@ -106,6 +106,6 @@ Use the following steps to validate that kube-vip has been set up correctly and http-app-svc LoadBalancer 10.100.200.10 10.10.1.100 80:30720/TCP 5m ``` - In this example, the external IP `10.10.1.100` is the IP address that kube-vip received from the DHCP server or the IP address you specified in the `loadBalancerIP` parameter. + In the above example, the external IP `10.10.1.100` is the IP address that kube-vip received from the DHCP server or the IP address you specified in the `loadBalancerIP` parameter. From 086f37d16d2bf7deeafe974309432331d1c2c5fb Mon Sep 17 00:00:00 2001 From: Lenny Chen Date: Thu, 30 Nov 2023 12:25:09 -0800 Subject: [PATCH 09/27] docs: grammar fix --- docs/docs-content/clusters/edge/site-deployment/kubevip.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs-content/clusters/edge/site-deployment/kubevip.md b/docs/docs-content/clusters/edge/site-deployment/kubevip.md index aa7db410cf..ee11a7aa3f 100644 --- a/docs/docs-content/clusters/edge/site-deployment/kubevip.md +++ b/docs/docs-content/clusters/edge/site-deployment/kubevip.md @@ -84,7 +84,7 @@ However, Palette has configured values for the following parameters and they can 9. Click **Next** and finish the rest of the configurations. For more information, refer to [Create Cluster Definition](./site-installation/cluster-deployment.md). -When the cluster finished deploying, kube-vip adds an annotation named `kube-vip.io/requestedIP` to the Service resource to document which IP address it has received from the external network. Whenever kube-vip restarts, it will attempt to re-request the same IP address for that service. You can remove the annotation to make kube-vip request a fresh address with the following command. Replace `SERVICE_NAME` with the name of your service, and make sure to include the minus symbol`-` symbol at the end of the annotation. +When the cluster finishes deploying, kube-vip adds an annotation named `kube-vip.io/requestedIP` to the Service resource to document which IP address it has received from the external network. Whenever kube-vip restarts, it will attempt to re-request the same IP address for that service. You can remove the annotation to make kube-vip request a fresh address with the following command. Replace `SERVICE_NAME` with the name of your service, and make sure to include the minus symbol`-` symbol at the end of the annotation. ```shell kubectl annotate service SERVICE_NAME kube-vip.io/requestedIP- From 38842f15590a73493b8bbf3fa4f7fd061bf736a1 Mon Sep 17 00:00:00 2001 From: Lenny Chen Date: Thu, 30 Nov 2023 12:27:14 -0800 Subject: [PATCH 10/27] docs: fix typo --- docs/docs-content/clusters/edge/site-deployment/kubevip.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs-content/clusters/edge/site-deployment/kubevip.md b/docs/docs-content/clusters/edge/site-deployment/kubevip.md index ee11a7aa3f..9009d077de 100644 --- a/docs/docs-content/clusters/edge/site-deployment/kubevip.md +++ b/docs/docs-content/clusters/edge/site-deployment/kubevip.md @@ -55,7 +55,7 @@ However, Palette has configured values for the following parameters and they can vip_servicesinterface: "INTERFACE_NAME" ``` - These are kube-vip environment variables that enable kube-vip to provide load balancing services for Kubernetes services and specify which network interface will be used by kube-vip for handling traffic to the Kubernetes API server and Kubernetes services. The following table provides you guide on how to choose the values for each parameter: + These are kube-vip environment variables that enable kube-vip to provide load balancing services for Kubernetes services and specify which network interface will be used by kube-vip for handling traffic to the Kubernetes API server and Kubernetes services. The following table provides you guidance on how to choose the values for each parameter: | **Parameter** | **Description** | |-----------|-------------| From feb84f30dc8bdd1580fbe8d7b4081a4033707d45 Mon Sep 17 00:00:00 2001 From: Lenny Chen Date: Thu, 30 Nov 2023 12:30:48 -0800 Subject: [PATCH 11/27] docs: align table --- docs/docs-content/clusters/edge/site-deployment/kubevip.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs-content/clusters/edge/site-deployment/kubevip.md b/docs/docs-content/clusters/edge/site-deployment/kubevip.md index 9009d077de..19d1eaa046 100644 --- a/docs/docs-content/clusters/edge/site-deployment/kubevip.md +++ b/docs/docs-content/clusters/edge/site-deployment/kubevip.md @@ -84,7 +84,7 @@ However, Palette has configured values for the following parameters and they can 9. Click **Next** and finish the rest of the configurations. For more information, refer to [Create Cluster Definition](./site-installation/cluster-deployment.md). -When the cluster finishes deploying, kube-vip adds an annotation named `kube-vip.io/requestedIP` to the Service resource to document which IP address it has received from the external network. Whenever kube-vip restarts, it will attempt to re-request the same IP address for that service. You can remove the annotation to make kube-vip request a fresh address with the following command. Replace `SERVICE_NAME` with the name of your service, and make sure to include the minus symbol`-` symbol at the end of the annotation. +When the cluster finishes deploying, kube-vip adds an annotation named `kube-vip.io/requestedIP` to the Service resource to document which IP address it has received from the external network. Whenever kube-vip restarts, it will attempt to re-request the same IP address for that service. You can remove the annotation to make kube-vip request a fresh address with the following command. Replace `SERVICE_NAME` with the name of your service, and make sure to include the minus symbol`-` at the end of the annotation. ```shell kubectl annotate service SERVICE_NAME kube-vip.io/requestedIP- @@ -102,7 +102,7 @@ Use the following steps to validate that kube-vip has been set up correctly and ``` ``` - NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE + NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE http-app-svc LoadBalancer 10.100.200.10 10.10.1.100 80:30720/TCP 5m ``` From cf50b2bbd80aa5b08ceca1ec4518551cc8e8551f Mon Sep 17 00:00:00 2001 From: Lenny Chen Date: Thu, 30 Nov 2023 13:42:09 -0800 Subject: [PATCH 12/27] docs: move kubevip to new networking section --- .../{site-deployment => networking}/kubevip.md | 2 +- .../clusters/edge/networking/networking.md | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) rename docs/docs-content/clusters/edge/{site-deployment => networking}/kubevip.md (98%) create mode 100644 docs/docs-content/clusters/edge/networking/networking.md diff --git a/docs/docs-content/clusters/edge/site-deployment/kubevip.md b/docs/docs-content/clusters/edge/networking/kubevip.md similarity index 98% rename from docs/docs-content/clusters/edge/site-deployment/kubevip.md rename to docs/docs-content/clusters/edge/networking/kubevip.md index 19d1eaa046..046f924933 100644 --- a/docs/docs-content/clusters/edge/site-deployment/kubevip.md +++ b/docs/docs-content/clusters/edge/networking/kubevip.md @@ -82,7 +82,7 @@ However, Palette has configured values for the following parameters and they can type: LoadBalancer ``` -9. Click **Next** and finish the rest of the configurations. For more information, refer to [Create Cluster Definition](./site-installation/cluster-deployment.md). +9. Click **Next** and finish the rest of the configurations. For more information, refer to [Create Cluster Definition](../site-deployment/site-installation/cluster-deployment.md). When the cluster finishes deploying, kube-vip adds an annotation named `kube-vip.io/requestedIP` to the Service resource to document which IP address it has received from the external network. Whenever kube-vip restarts, it will attempt to re-request the same IP address for that service. You can remove the annotation to make kube-vip request a fresh address with the following command. Replace `SERVICE_NAME` with the name of your service, and make sure to include the minus symbol`-` at the end of the annotation. diff --git a/docs/docs-content/clusters/edge/networking/networking.md b/docs/docs-content/clusters/edge/networking/networking.md new file mode 100644 index 0000000000..993798add6 --- /dev/null +++ b/docs/docs-content/clusters/edge/networking/networking.md @@ -0,0 +1,17 @@ +--- +sidebar_label: "Networking" +title: "Networking" +description: "Learn about solutions Palette offers for various network environments during Edge deployment." +hide_table_of_contents: false +sidebar_position: 50 +tags: ["edge"] +--- + +Edge environments are inherently diverse, especially when it comes to networking conditions. Often, the network your Edge devices are deployed in are outside of your control, and you do not have on-site technical staff to troubleshoot when things go wrong. Therefore, it's important to ensure that your Edge deployments can accommodate various networking conditions and are resilient to accidents and outages. + +This section describes solutions offered by Palette Edge to navigate different network environments at the edge to ensure that you can keep your Edge clusters and their services operational and available. + +## Resources + +- [Publish Cluster Services with Kube-vip](kubevip.md) +- Enable Overlay Network \ No newline at end of file From 095046c3f354149e1ee18c2650d1097dfddc32db Mon Sep 17 00:00:00 2001 From: Lenny Chen Date: Thu, 30 Nov 2023 13:50:45 -0800 Subject: [PATCH 13/27] docs: move limitations section and highlight code --- .../docs-content/clusters/edge/networking/kubevip.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/docs-content/clusters/edge/networking/kubevip.md b/docs/docs-content/clusters/edge/networking/kubevip.md index 046f924933..ac44bbab13 100644 --- a/docs/docs-content/clusters/edge/networking/kubevip.md +++ b/docs/docs-content/clusters/edge/networking/kubevip.md @@ -11,10 +11,6 @@ You can use kube-vip to provide a virtual IP address for your cluster and use it Kube-vip supports DHCP environments and can request additional IP address from the DHCP server automatically. Using kube-vip, you can expose services inside your cluster externally with a virtual IP address even if you do not have control over your host's network. Kube-vip can also act as a load balancer for both your control plane and Kubernetes services of type `LoadBalancer`. -## Prerequisites - -- At least one Edge device with x86_64 or AMD64 processor architecture registered in your Palette account - ## Limitations Kube-vip has many environment variables you can use to customize its behavior. You can specify values for the environment variables with the `cluster.kubevipArgs` parameter. For a complete list of environment variables in kube-vip, refer to [kube-vip documentation](https://kube-vip.io/docs/installation/flags/?query=vip_interface#environment-variables). @@ -34,6 +30,10 @@ However, Palette has configured values for the following parameters and they can | `vip_retryperiod` | Number of times the leader will hold the lease for. | `"4"` | | `address` | Template placeholder for the virtual IP address. | `"{{ .VIP}}"` | +## Prerequisites + +- At least one Edge device with x86_64 or AMD64 processor architecture registered in your Palette account + ## Enablement 1. Log in to [Palette](https://console.spectrocloud.com/). @@ -64,7 +64,7 @@ However, Palette has configured values for the following parameters and they can | `vip_serviceinterface` | Specifies the NIC that kube-vip will use for handling traffic to LoadBalancer-type services. If your cluster has network overlay enabled, or if your host has multiple NICs and you want to publish services on a different NIC than the one used by Kubernetes, you should specify the name of the NIC as the value of this parameter. If this parameter is not specified and you have set `svc_enable` to `true`, kube-vip will use the NIC you specified in `vip_interface` to handle traffic to LoadBalancer-type services. | 8. Next, in layer of your cluster profile that has the service you want to expose, add two parameters `loadBalancerIP: 0.0.0.0` and `loadBalancerClass: kube-vip.io/kube-vip-class` to the service spec. The following example manifest displays the usage of these two parameters. - ``` + ```yaml {7-8} apiVersion: v1 kind: Service metadata: @@ -101,7 +101,7 @@ Use the following steps to validate that kube-vip has been set up correctly and kubectl get service http-app-svc ``` - ``` + ```hideClipboard NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE http-app-svc LoadBalancer 10.100.200.10 10.10.1.100 80:30720/TCP 5m ``` From 803b8a7f50a002fb051e9074fdb5a7f062db199f Mon Sep 17 00:00:00 2001 From: Lenny Chen Date: Thu, 30 Nov 2023 13:56:10 -0800 Subject: [PATCH 14/27] docs: add category order --- docs/docs-content/clusters/edge/networking/_category_.json | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 docs/docs-content/clusters/edge/networking/_category_.json diff --git a/docs/docs-content/clusters/edge/networking/_category_.json b/docs/docs-content/clusters/edge/networking/_category_.json new file mode 100644 index 0000000000..90b85e2d02 --- /dev/null +++ b/docs/docs-content/clusters/edge/networking/_category_.json @@ -0,0 +1,4 @@ +{ + "position": 60 +} + \ No newline at end of file From 4614c996b61f72a0fe3686ff4b704f8c55d54b74 Mon Sep 17 00:00:00 2001 From: Lenny Chen <55669665+lennessyy@users.noreply.github.com> Date: Mon, 4 Dec 2023 10:16:15 -0800 Subject: [PATCH 15/27] docs: overlay support for dhcp networks (#1818) * docs: overlay support for dhcp network outline * add scenario * add existing known steps * docs: intro dix * docs: add validation and access intro * docs: address vale comments * docs: fix path issue * docs: add simple diagram * Optimised images with calibre/image-actions * docs: update diagram * Optimised images with calibre/image-actions --------- Co-authored-by: Lenny Chen Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .../edge/site-deployment/vxlan-overlay.md | 91 ++++++++++++++++++ ...nstallation_vxlan-overlay_architecture.png | Bin 0 -> 42043 bytes 2 files changed, 91 insertions(+) create mode 100644 docs/docs-content/clusters/edge/site-deployment/vxlan-overlay.md create mode 100644 static/assets/docs/images/clusters_edge_site-installation_vxlan-overlay_architecture.png diff --git a/docs/docs-content/clusters/edge/site-deployment/vxlan-overlay.md b/docs/docs-content/clusters/edge/site-deployment/vxlan-overlay.md new file mode 100644 index 0000000000..14d70badd6 --- /dev/null +++ b/docs/docs-content/clusters/edge/site-deployment/vxlan-overlay.md @@ -0,0 +1,91 @@ +--- +sidebar_label: "Enable Overlay Network" +title: "Enable Overlay Network" +description: "Learn how to enable a virtual overlay network you can control on top of an often unpredictable physical network." +hide_table_of_contents: false +sidebar_position: 30 +tags: ["edge"] +--- + +Edge clusters are often deployed in locations where network environments are not managed by teams that maintain the edge deployments. However, a Kubernetes cluster, specifically several control plane components, require stable IP addresses. In the case of an extended network outage, it's possible that your cluster components would lose their original IP addresses when the cluster expects them to remain stable, causing the cluster to experience degraded performance or become non-operational. + +Palette allows you to create a virtual overlay network on top of the physical network, and the virtual IP addresses of all cluster components are managed by Palette. Inside the cluster, the different components use the virtual IP addresses to communicate with each other instead of the underlying IP addresses that could change due to external factors. If the cluster experiences an outage with the overlay network enabled, components inside the cluster retain their virtual IP addresses in the overlay network, even if their IP addresses in the underlying physical network has changed, protecting the cluster from an outage. + +
+ +![VxLAN Overlay Architecture](/clusters_edge_site-installation_vxlan-overlay_architecture.png) + +
+ +## When Should You Consider Enabling Overlay Network? +If your Edge clusters are deployed in network environments that fit the following descriptions, you should consider enabling an overlay network for your cluster: + +- Network environments with dynamic IP address management, such as a DHCP network. +- Instable network environments or environments that are out of your control. For example, you are deploying an Edge host in a restaurant located in a commercial building, and the network +- Environments where you expect your edge hosts to move from one physical location to another. + +### Example Scenario + +The Analytics team of a manufacturing company is deploying an Edge host to their assembly line to collect metrics from the manufacturing process. The building in which the Edge host is deployed has a network that is managed by a DHCP server. The region experiences a bad weather event that causes a sustained outage. + +|Without Overlay Network |With Overlay Network| +|---------------------|-----------------------| +| Upon recovery, each Kubernetes component inside in the Edge host requests an IP address from the DHCP server, and receives a different IP address than their original IP address before the outage happened. Since Kubernetes expects several components in the control plane to have stable IP addresses, the cluster becomes non-operational and assembly line is unable to resume operations | Each Kubernetes component inside in the Edge host has a virtual IP address in the overlay network. Upon recovery, their IP addresses in the overlay network remain the same despite their IP addresses changing in the underlying DHCP network. The Edge host is able to assume its workload and the assembly line resumes operations | + +## Prerequisites + +* At least one Edge host with AMD64/X86_64 processor architecture registered with your Palette account. +* All Edge hosts must be on the same network. You may provision your own virtual network to connect Edge hosts that are on different physical networks, but all Edge hosts to be included in the cluster must be on the same network before cluster creation. + +## Enable Overlay Network + +You can enable an overlay network for your cluster during cluster creation. You will not be able to change the network overlay configurations after the cluster has already been created. + +1. Log in to [Palette](https://console.spectrocloud.com). + +2. Navigate to the left **Main Menu** and select **Clusters**. + +3. Click on **Add New Cluster**. + +4. Choose **Edge Native** for the cluster type and click **Start Edge Native Configuration**. + +5. Give the cluster a name, description, and tags. Click on **Next**. + +6. Select a cluster profile. If you don't have a cluster profile for Edge Native, refer to the [Create Edge Native Cluster Profile](./model-profile.md) guide. Click on **Next** after you have selected a cluster profile. + +7. Review your cluster profile values and make changes as needed. Click on **Next**. + +8. In the **Cluster Config** stage, toggle on **Enable Overlay Network**. This will prompt you to provide additional configuration for your virtual overlay network. + +9. In the **Internal CIDR Range** field, provide a private IP range for your cluster to use. Ensure that this range is not used by others in the same network environment. When you toggle on **Enable Overlay Network**, Palette provides with a default commonly unused range. We suggest you keep the default range unless you have a specific IP range you want to use. + +10. In **VIP** field near the top of the page, provide a virtual IP (VIP) address. This address must be within the same internal CIDR range that you provide for the cluster. + + :::caution + Neither the internal CIDR range nor the VIP address can be changed after the cluster creation. + ::: + +11. Finish the rest of the cluster configurations and click **Finish Configuration** to deploy the cluster. For more information, refer to [Create Cluster Definition](./site-installation/cluster-deployment.md). + +## Validate + +1. Log in to [Palette](https://console.spectrocloud.com). + +2. Navigate to the left **Main Menu** and select **Clusters**. + +3. Select the host cluster you created to view its details page. + +4. Select the **Nodes** tab, in the **Overlay IP Address** column, each host has an overlay IP address within the CIDR range you provided during cluster configuration. + +:::tip +To view the external IP addresses of the edge hosts, from the **Main Menu**, go to **Clusters**, and click the **Edge Hosts** tab. The IP address displayed in the table is the external IP address. +::: + +## Access Cluster with Overlay Network Enabled + +You can access a cluster with overlay network enabled in the following ways: + +- Access the cluster with kubectl CLI. For more information, refer to [Access Cluster with CLI](../../cluster-management/palette-webctl.md). +- Access LoadBalancer services. You can provision LoadBalancer services in your Kubernetes cluster and expose them to external traffic. +- Access a node by IP address. You can use the node's external IP address to access the node directly. The overlay IP addresses are internal to the cluster itself and cannot be accessed from outside the cluster. + diff --git a/static/assets/docs/images/clusters_edge_site-installation_vxlan-overlay_architecture.png b/static/assets/docs/images/clusters_edge_site-installation_vxlan-overlay_architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..d3e7d9de431fb87e9b5d9ec3baec29977134c031 GIT binary patch literal 42043 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 literal 0 HcmV?d00001 From cf194641c48fe75db1c412bad9fddfed32fcd5aa Mon Sep 17 00:00:00 2001 From: Lenny Chen Date: Mon, 4 Dec 2023 10:18:07 -0800 Subject: [PATCH 16/27] docs: move overlay doc to networking section --- docs/docs-content/clusters/edge/networking/networking.md | 2 +- .../edge/{site-deployment => networking}/vxlan-overlay.md | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename docs/docs-content/clusters/edge/{site-deployment => networking}/vxlan-overlay.md (100%) diff --git a/docs/docs-content/clusters/edge/networking/networking.md b/docs/docs-content/clusters/edge/networking/networking.md index 993798add6..3892f0b95f 100644 --- a/docs/docs-content/clusters/edge/networking/networking.md +++ b/docs/docs-content/clusters/edge/networking/networking.md @@ -14,4 +14,4 @@ This section describes solutions offered by Palette Edge to navigate different n ## Resources - [Publish Cluster Services with Kube-vip](kubevip.md) -- Enable Overlay Network \ No newline at end of file +- [Enable Overlay Network](vxlan-overlay.md) \ No newline at end of file diff --git a/docs/docs-content/clusters/edge/site-deployment/vxlan-overlay.md b/docs/docs-content/clusters/edge/networking/vxlan-overlay.md similarity index 100% rename from docs/docs-content/clusters/edge/site-deployment/vxlan-overlay.md rename to docs/docs-content/clusters/edge/networking/vxlan-overlay.md From f5897e94ccaad7d6c7059aad1d84467eabd3cc8a Mon Sep 17 00:00:00 2001 From: Lenny Chen Date: Mon, 4 Dec 2023 10:22:03 -0800 Subject: [PATCH 17/27] docs: fix broken links --- docs/docs-content/clusters/edge/networking/vxlan-overlay.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs-content/clusters/edge/networking/vxlan-overlay.md b/docs/docs-content/clusters/edge/networking/vxlan-overlay.md index 14d70badd6..b966d17e92 100644 --- a/docs/docs-content/clusters/edge/networking/vxlan-overlay.md +++ b/docs/docs-content/clusters/edge/networking/vxlan-overlay.md @@ -51,7 +51,7 @@ You can enable an overlay network for your cluster during cluster creation. You 5. Give the cluster a name, description, and tags. Click on **Next**. -6. Select a cluster profile. If you don't have a cluster profile for Edge Native, refer to the [Create Edge Native Cluster Profile](./model-profile.md) guide. Click on **Next** after you have selected a cluster profile. +6. Select a cluster profile. If you don't have a cluster profile for Edge Native, refer to the [Create Edge Native Cluster Profile](../site-deployment/model-profile.md) guide. Click on **Next** after you have selected a cluster profile. 7. Review your cluster profile values and make changes as needed. Click on **Next**. @@ -65,7 +65,7 @@ You can enable an overlay network for your cluster during cluster creation. You Neither the internal CIDR range nor the VIP address can be changed after the cluster creation. ::: -11. Finish the rest of the cluster configurations and click **Finish Configuration** to deploy the cluster. For more information, refer to [Create Cluster Definition](./site-installation/cluster-deployment.md). +11. Finish the rest of the cluster configurations and click **Finish Configuration** to deploy the cluster. For more information, refer to [Create Cluster Definition](../site-deployment/site-installation/cluster-deployment.md). ## Validate From f20744c2858f287f6b1867637dc9e3ebbd5bc4b7 Mon Sep 17 00:00:00 2001 From: Lenny Chen Date: Mon, 4 Dec 2023 12:54:10 -0800 Subject: [PATCH 18/27] docs: address review feedback --- docs/docs-content/clusters/edge/edge.md | 3 +++ .../clusters/edge/networking/vxlan-overlay.md | 10 +++++++--- ...nstallation_vxlan-overlay_architecture.png | Bin 42043 -> 48982 bytes 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/docs/docs-content/clusters/edge/edge.md b/docs/docs-content/clusters/edge/edge.md index 8e09c89a44..f1d400a2d6 100644 --- a/docs/docs-content/clusters/edge/edge.md +++ b/docs/docs-content/clusters/edge/edge.md @@ -87,3 +87,6 @@ To start with Edge, review the [architecture](architecture.md) and the [lifecycl - [Site Deployment](site-deployment/site-deployment.md) + +- [Networking](networking/networking.md) + diff --git a/docs/docs-content/clusters/edge/networking/vxlan-overlay.md b/docs/docs-content/clusters/edge/networking/vxlan-overlay.md index b966d17e92..f0a0ae294f 100644 --- a/docs/docs-content/clusters/edge/networking/vxlan-overlay.md +++ b/docs/docs-content/clusters/edge/networking/vxlan-overlay.md @@ -21,7 +21,7 @@ Palette allows you to create a virtual overlay network on top of the physical ne If your Edge clusters are deployed in network environments that fit the following descriptions, you should consider enabling an overlay network for your cluster: - Network environments with dynamic IP address management, such as a DHCP network. -- Instable network environments or environments that are out of your control. For example, you are deploying an Edge host in a restaurant located in a commercial building, and the network +- Instable network environments or environments that are out of your control. For example, you are deploying an Edge host in a restaurant located in a commercial building, where the network is managed by the building and cannot be easily altered by your staff. - Environments where you expect your edge hosts to move from one physical location to another. ### Example Scenario @@ -34,12 +34,16 @@ The Analytics team of a manufacturing company is deploying an Edge host to their ## Prerequisites -* At least one Edge host with AMD64/X86_64 processor architecture registered with your Palette account. +* At least one Edge host with an AMD64 or X86_64 processor architecture registered with your Palette account. * All Edge hosts must be on the same network. You may provision your own virtual network to connect Edge hosts that are on different physical networks, but all Edge hosts to be included in the cluster must be on the same network before cluster creation. ## Enable Overlay Network -You can enable an overlay network for your cluster during cluster creation. You will not be able to change the network overlay configurations after the cluster has already been created. +You can enable an overlay network for your cluster during cluster creation. + +:::caution +You will not be able to change the network overlay configurations after the cluster has already been created. +::: 1. Log in to [Palette](https://console.spectrocloud.com). diff --git a/static/assets/docs/images/clusters_edge_site-installation_vxlan-overlay_architecture.png b/static/assets/docs/images/clusters_edge_site-installation_vxlan-overlay_architecture.png index d3e7d9de431fb87e9b5d9ec3baec29977134c031..e19ab4ed4977f1fc58c1875d688a9f4881b37364 100644 GIT binary patch literal 48982 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 From 2114d9ba2ea5256f5fac0d9e44bdc3ea50b465d5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 4 Dec 2023 20:57:49 +0000 Subject: [PATCH 19/27] Optimised images with calibre/image-actions --- ...nstallation_vxlan-overlay_architecture.png | Bin 48982 -> 27921 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/static/assets/docs/images/clusters_edge_site-installation_vxlan-overlay_architecture.png b/static/assets/docs/images/clusters_edge_site-installation_vxlan-overlay_architecture.png index e19ab4ed4977f1fc58c1875d688a9f4881b37364..9ecdb3d560d5a3b773f6ecf73d46b49807cfd1bc 100644 GIT binary patch literal 27921 zcmZ6y1zgkL_dh-hq(t8e2)qH4l9H5G5tJA;5NVJcDKU^3s0b)2Au$}y#z>_ZB`pnO zFzHfalt_#k{9i-gpYQMS-{Zjp*z3OTJ@?#mPdv{#@3l1_Gtjcpfro7}k|i&A=C@nx(+_EuR7>TX#@h2%r^@RwN+oG)EG z#Z<<$-f#A+SEA(_OXIs&I(oI!Oibt2S@1GP;Q>Ts{-mL!exbhO&?<@D>VnyDUgcAA z{(PSI(X!9H*yFPRZNNv{P~`=Me&8bl&`$Zh!kqc@hX%)=->3_Je*gamyrNCPGW2oU zkL6XRX&zW8ZjUpPtCJT(52zNBms@@271{#6Ye|seU=5LCFt0cDVu5}lj;*OJt4Hf; zM}B$3OQncfE~M3t(y^uD$PQ%afN`qW0lDB6c-;B2j*48jn617b9K9*GNd85BuDF6` zJAjfnDu$QpwPhg-h={LyW;Ez+9? zb2%qv7Hk;)Bcb`TQ4-cmMX0NT$GtZAC922B>Y;KMUm9uFy)r)^yL=JWD(EX9=jMGttEE zea4>^az9|2`~N)A`;NaG{pUE+Gf`2ze@^H=_`jpl>&7R4u>#BdS;#-8uaj7*@?!MQ zLY=P#+0lV_{~j}w1k4asV@dq;OzjO$s0W_|ZfwC*R=QtkSm|Oa;xXTCG1C<6T5(=k{#?5&jc-H=CCk$1+LSEFRtsus&x%wAsKCwn9CEQ3o|MD$0rT6HGk7vy!4OM(0Nziy0L57qcvW|LAD+SwJQd z#mdadYva`(cWj7H3yqixOlu^a@(qeFl&8IDq8T_4&DZWGU00`_ejW zvW`bc>aXR6+KAXf{er;N1+(_heYmWP)Iymn&b|o6;usoZ2##!<$H{0sBh{gl$>TkakW#rx!nB9#h$+`q+N< zT*6sQ)x*z-!5(4~ea+{4cYifA2Kj8xpL@&&_q;l!hahIF#yu?jplCQhlp_k8DEO#- zYeFMrh{a&WmV7vD?D|o2Fj8vrD(Bc_o!`>T1p`x<{!6o1mnTr2fV$LizH`@mJ^JKX z1k7sh)oyUQwOq1H5wU#u65@Bb(N3pGEnL6*{N)AD!8I0yLAs)l_Y_$FEs3meB zCeeja=#X%xv8U$Ebeikvnhs$tujs&my&rI~v}b$9Fg_ zNl3}-*s7`sDR4OxicA~fqzRTIIk(vs%l6DKkL2py0I?caA4_UJD(>5z4q~LTB?{I4 zYWhVM>%DjLuz|e}GFV;afeMu1eC>aiF=1X-TOC5^v3{0;zOZw9>u*vd(){^6XhU}1k>#Px3-`0bmA6R!L6tjrJt zMhKccSJ{5ze0=Ktkw~!Atd=4fe^66u*B7;~qeHOOMrkfaM=IP&J!S-ff?6e1M4gZt zNXHMjN6X{97P@EqoeedRvX6@g>jgVscGn)3vw zZop>4h3n6AWfL|e9Y>xCz_>MC8y5AHXmsibP+C+_aWp;=IeYO=TG6n=m zWH;n#4(k$bsJ*RA>K5yJyP4}!vs&?M!J}82XJrwwlJ}toeyJ>yyQ}m3q8)s1b`f6Z zeM}}*))raStYMemT-K7iJ6=gOug36lXT+{X6vkri@3t$gcC&V$nBP2Z2j39CYX0SU zFv;6<@E&<52$TIiAf!H+mCqu!djHHB6kPxazzo7dY{)THiD z+$%E&Qz>lYA)!z$MEoafVm7=po^NJ-(f0cV^`UZqH>J(H;9?h|>LTN7j%Fwt$y~cL z>KJq6J?UfjeW!BVU41uoBEHpcy^h7icPVGa=d(w;9`yv?bnEfMhWyZr2$4d^97kYY z+?L?PV!4(x%i}aFBL(1o{F3-6BP1hA0|FJIgd&&1(3Yr)Ks2wZRLFpasgW4Mn|9vR zdtykG+{U@J?3%-V-O-L%)Nr()3P#!-R-rT%$7&VLmqRgKx``G)J3s13ej3XzPPs;7 zLDY@05iNMvhbe6=sXyz|{?YQCw=FAI@`D<_mY7Qsfdl#eBy6X0q|I1Hh@E=z^-5voBwN%M&wrnm zW!ppS=Ir$s@kxCgH+gK@AE;^|{RVRpm@ZM)3M8iVR87SDNysQtnB#6fMocN=Vm&-# zE4ZSu=676;1k3^Pga77rt7}2i2!4Y!mum?w>COw?$(QR~uEWyI)Tv+OM_^UJAvfy_ zU0fbYDUr=X+PJSS|I2ISkX9FXe3ZbR>#AGgNc0>O6U(1_w}3qmIfFW%9zLPB`f@CT zy@(^trNryVQ)$O}L4hWIqb#M4Ra-fDwQ9Uce3%-4WdqMJG*4;;n~v81RG5B;4*dRw zPuF>|YW1qu+IR=Y6;S$Fl#p|_P}j>MV+esSbGXNC!I}8BM`!SA^U($3y6Yrrt&y6G z-n^9lrqW#g?(C%R*Ojqh4s#|baqBBN>`u{nGeA;X+&&1a)2P`K^D00-2_2sSeL&SO zJ@r$I~2?&H|CLYKvHuh~#s2TC`;}T%{)9J49Lu!QotvF{rgz zbs?I{hLw^oBQtN(kfVhAlcQ9U6R~8aAR-${Kh}%qLtGIyObf+$1ZtVvCtp?8UfK1% z3v;`i=P5^O%RZk9KgGm=V`z3xSa80?k!IFo>fw6c_Fo&`Zl{iG$xB~S-bZNF+>o#p z?RKh2iFZnyLy4ezmWD+cT;BG4VD_5;3xc1IRX8`hL?oQft0li|5X-WOu};q3-K*sB zD~c&susCqCBbICl$_7ZCgLoXr?qI5ee6^q~K=ko%(T0QF2dtsjweY=8?6G*4h-aKA z;#{RJ7UAml3%IyQTsr;j$j9Ri$NPT8cQyTuqLXEeMZeDPJMMqrx5SP)nB?CzyM)rT z(mvn-_rx^fpM6EiELoGKDNi0JzS9Ie z^izM&Cz+nj&B#0A^VhaZexQmvmlAi*sf)2zOrd(~tBNqCyqWaqysMq`e7@PQJ&RF7 zsa`BnFg1(^%SSzZCG%2`7;EB{pQYO%aP$rJyeMlO*<>-&ysa%i=6i_g&51G`Lgr^% zjr7C@Zvo@aUY?15&z?b{%NA`<_3to{4*4^oi1AszL9|x%JPkK8P(rps041b8<$nBx zPZ=Lc#0DG9+QuuZoC0;)trX;COZYkCKds#`E&Ae-uiyEjmBEyG?kAh9?9(xHL~6~B z>7))eAnWd{wzn<`iK5x!lBIjUR{Pf-ijH?y$Bf%}!g`?sIc~}^xek>jVR}y51FDtJ zWh{vMYKV@{z%6H|&u{G-Fdm>0gSkY({Erg#KdhiJmsi7H=c=LHYgRX7HISWiHB78I zgAx*IO7SWZHPwbPO0k@Db7P+h#ZkTPRe}$5zd_JGFf4{!(9e?ZiUTh7tuhCE%+QTZ z@VU#vXpe+JEB@u%zJ3Pdg((BxoH$I^Xyw}+%SG=3q7AO(9CPd7#u?Ck>3715s}*M8 z7{{-%Mp9NSUhO7BH{hTotU|1rzg9Zkf(jJIFDs8%$UC;FbUZb>H@Ny+a ztn?0iZSYoMxvfm9FA?*oE+pqnOP17H39Va@g-36^?g#7G71gKA5VRgmSB!y?GS7-h zd%ih#!DQhfK_sdu1Ic5~6?50?U;^;sjV8V6@>+`XbKX|%EkVJi!}UxJ+{5u>>&?Bz z>z{zY@5`C5RXUwrS8lV4u-2Qkh1OdQE8O(}NVUvPrcW8d8>W``kbQyJp^4zk8KnX zM(d-f>A0S%@u87Qo5EOOL3}Ho#`rR~OA-7Te@3y^;=fqBSH#lz=X~Tf69rQ%bN;uo z(xb@Yc`?^f%>{L~!Y7f48ts=xki>FV)~9OHn0p_ze?-$7fIvOUw(5mkRu5N8^Q^!i zjfq!_;;h3Gj}j1=2USOkmQ82ZcOV}N4)oRlRO70g3*~bXPJ`}yNFN_=O4ERnWM2KY(7}s$ zvEW(n_!PhvVu=|3au?k9F?lKpi*@%`Sc8cWY*l zdP`Sl952MzYA|#UPB#XKed&h`$fmw4)vGu4i9RxqUgc%J;TILyn7t1EI{X7N*fgu4 zrwl;}Lz4lVBUb?c8oSVCb{Mo z1Wmw?=L94fQ2)WWUY$bR6LXgYhDb}O*ND%}bBG6Q%O+$>`|YgQoBsvEUMa9ihqoCH zI*Ptvb{mw*m5dhR%fWSX0*DWUnsRDzNjFh*7xCU3o+{)0t&u5x{mCPPJ1%#b5+p%i z|DY+++(N0kBQ8ZL%A*3K!=k(^7jrJ})KF~_|AKD)!7(0mpRy&MuF{*<@FH`bVK3G1 zegWMN-0eMF-4jqaL41CSxU2GgM1C$)P0OI8eoLbxQ~3`{Hthn0x<61-&hMI$u!$mI z_kUcpEBxM^d=8+D_ggqoxwb;n z_+AOejT?MPGN3<568*RS+cA=AJhPii^tvLa{vdxJZm!a1wnQ4&@S4V|ZY5*0$so`l z+-u)r@olCfG|N+Ub7>qN^M>X>{<31T%er2?SbUEKfTlmQ^gou-ui9d*EYp$kK2|-j zHRAxGiq?6WosAF=z+K|~_Tp@jDp~r~9Dzs9F*Eyt$M$-^j{T2`Q4O1fDaD(+ipPi4 zlLVU`{|2j&FB1WA0f{Q?o~0Z05(GLuhD}QjEC?*y^$O4p7$wK57=MDZZ)J_$r)U( zL&zvES+7*7lwp%P_G-5ZlfFl2!Ao&W5s1;4A z(M`d64M^W`2gdfFRkDjIDQoMLon97IBR~f>?iCnN!|uM+7xT&yhpplS0TVzO)~#)G zS6=}eiGx`YaaWaJ#ZF}@WnB>BjW9#$z+Zfo@})54%ZCkTARk3xkCrHtsK#TOY)t=U-;01t3E=Im&vz-j!D}2n4$G2*oK6#j%pK-@3xa$^g?CB3tF9+f? z`FGJq{h;+dYnyV~C4dmj49St>DCUae`E>ZIB}N;uOS_mX&f83*99_mK>y`ns%q zz{`;VXp4CV;%{yj;*&ZGm``u&6P2>(37Sa8-gu)QoQ!=S@SVaV?X&v16mq_WigxF- z>rl;fqk%(sB{TiBs=y)RQdl;~8ol^R|2irPuMP~)&C19(dJyjgTx=XsMF0-G;XUcQT$rmh-vgjQtUC+Q zibwYdPwg&qu_iIS6EtD0*f zD;%tp!fUuGsBE$NWC#$fvM3pB``80~y4@~gI|_9MgVBq#1Uf9Ru(O%F+qtD;N3_7Jz#(kXj*vv+;ai!4sx^UoLm&MlNz>LoaosHx)f_b2P)#2~1Ah)@;U}qrzFe4#S z;X1{cla#k)*JCp%jqjsC#$~J2T>cm9QMNjI8PcvSrk*+?lrY)oe2?XzgzS8h)k6;n z7!m(M!T9jdKJd=dg7YNIW|m`$HBsE$X}G{}W?c?|f1Udh!KnuOIqH=tmmY+~%mVQc zIz>r5M8kkI!OTYcKz0A2H1dpTmU1}rIpMl3-AoJ+?HW^ZBcB!X6enKJMK)LH1mf>5 z`h5mu!h!;=`Dls4h{pRIrd)N3P+a!s=o*6llfPMuJ)>zerbE8cd^-QaC+qDMmtwD)lyo( zKJ?zS0x>r$b9Ea_E;v;_lLC1E8s2`Dg68$LHXl;OU9~;poIZRS#*g^)Pmh!KC_ulX z;^^n=8~1GJgXv8U39YtM2aL~B2_P!i5*^QRV#!*9d zL~DMV%q_&x(DB&y!9r)7=f6c@!z`YwGE2H#r5=ltt9_o>5O6TW{{S!jVM8Jwkww@B zHC4nIl9FZQKV4M}@SlZ!J{8mb)z}0T4@`h>(s~qv;cw`nGILhB!%4p1d_^d%-tjDU>F7fHRqI zsUFB9g(9h$&fVP<2|PON2h|;{)d)|zPh~N|FijNZmwf|QAYv>ZQ@WUjV;u6vqr08h zQA1%zi--9R*%5K8&HKm$Lu?x^|NO`jI*qel!2!>^F7e@g{d)aDQ^2$sEH4CeoXU#NE@$yZ`7x}FcW$+PAz6FQp)}{)>^iLEn0TpL(DAxi; z*3)5+L<5AFA9&r&SDW+9ntK=`c=Y*NfU`*{HK<=p$-rPxDdq}D!_N9!bg>@2r@7Hs+jF41bv@N=UL`U<6Xo-8P43I?{YecZzbEln zGP*-K$W!^*tjC!3hYFVowhJW__F9!F&35*7UGj=t(tz$2RSeo?uvV}RJ*6rNdwA(a z9m?lLScD-lqx(ZLwJA^dljJ?Itko1duR*X>`6Cdpp<6AGdRo4-N3kVr?XLkrc)9SDzLhNcgPG(}ugkto)lC%K5kzb2Z4^L*Dn%3pBE=s<{ z%%FRT$r2OeVoA-gB@86DEK#~tO&qy^P0I0h08P>;9|*vE2v`YN{iX$CRj%b`T0JV) zphl73_L|8MHzPXnG8$@{`u%}Q_JNwWAlw{=G*F4#B8t*_gHb>C$FZk%H93s z9tp=vlQ*2_TLujZg%`)mf#QY9alAf@nBnL!cp_d$9s3j|9ge915;IwI+KSqF+4L#6 zpgB}8d^e*{yE9Lj9lr3S)iX9T0R)=RU7$@=0K7eI1<1l$>16=&Ns(cA*rPoHQs9)( zVM9=5ucaF|EIhrpl`M16kb<>e^tQfc!z<9Ey_Df5KrT!}X)ZMo4G`+C9G(1@q#@?|H@bVP)w zE?3!&n{G~%8SG48N8&htfvC2Suc89FcR!Db%H6Qe7xuEy$;`qCve4Te?kFDguN2Jo zEo@RySzn!X_j8|ne%)!%mct^^~|MJI*Ec^y$Uc zcaLLdQN5k}j@OEK!z~9M)D@j7$Km`pr^eqw6v0R;vgCcj5kt<8MssYKd0!LQBkji`%-||L*`>x95 z{-OijH=9R6b?$_#4a?u4=?8Ksw)7AJkS>8O74Y@oTEp(!zwjN>HwZohOTNTjVAOhl zN(Khp0+dpalefHR%E1o>H@v@?;J)*Kn4_o$n>eW%-*J8fWJ>kaV`67Vw#k19%ECbPXQtl4SzN=^pDvf(tJBr{#ALy^)*(CSD^p0~^)t zF}KM$Dmv_ZUPxYUp{$n9LFH+IkV18Wi)MO4;%8@pFj~-u&&}lJxnR5a{_k)>)2o?9a0A!d&ourjG~e zj=aF*&NgfCbKtG?#vxY^b~vh6*RluChhv#SM<6CEkJ#5e@+KX|9QH17J!LI3-PWe4 zLBH|P1^}?h|Ab+`CHc)caX9@!!3_(xT-V83pJ$JXIoRU6(xLZ@$|Sk+Tyn+LS#Nm1 z5VEol4<)g)iX_W(gu0GUDRrIW-DlEjTw!JvQEu59kiqN)+qYca z&XKi4&mh`)US*w29h&>F2+?K)b)JG_Os!de?By_{<&@*YI9?g3iQsQNJ)*9@@nZ~S5vh>)G zrOgF_JViZS9>jCAoX>bdd-5*TombDhXgvAhjN9$=ul5q?UnxbfO9_4X6`6t8NLG*+ zKLz@x2DxLx-RMsNe^5mXh|p~5M~FK>M0}NBB}+PB`mqNMrM%~bP$IHQj0b6i=7d1K(SDtol7mf^ zORTTlQ?O;9ckcl!;hXv&_yR_>|2`y<2LQl8pl@CA78<~^Niu);#YPQ;|01xHhrIX* zi$&iczybUF_=>~gI}sS;|1+ZHt@ey4*NI*Jvt7%O3;#ErUbnx+{oldB1VeXWztu{g zt~8#2gdrC~D3Ps%268!N%cBpa*%sc~4lv8&qV`Nlp!ThE=@}@YuHF-Nd`Qf=DK8TE z|14pi-gNtq-J}Hfh^sP-T#p_AxZR%(G0|pTu>ufLz^qaL7<$uIV5$FDUHu@qYgR*i zf&K5}SL5^?9yJt#vAqW?XMtHkAga?$LgD9bGHA;~q<|7WJx(V8m*_ro!k>@}VPY_l zHU}gz;SyA;`=;8-BKDkD9`QwE+O*GzkK=!yLkTscl#Xpt4bfpIx+5j>9>@1I;r1D89YL2c3+sI zX9ck&?eK;*$H7Dw+JxfOTI3Ged2j_Xh8nRO?t6S0(f^iP{G&nK0V!-*uajo@XKL#4FsHaRcw`kdp(8ugscqcF9hxav&|w-uj+>k!_zpXyf2PTBn;aW zy2KuL51;9?Mq>8}1th(^dd4g7!qbl_sEIP-Rw(FX@&5R=^=D|>L=$wQgF6ey!ogdV znK*{=QaO78a3OI@Qh0Buug+GQ?7a~`%dFH+4T!n2JVnV z8@nXz8oeo6@eTPrVT`3#lkYr*H~nu>09^~;J&mRS)_>xzQSnbhprIE-aFL@Da5p~< zju4?r^quT$e;3#<>=0ZT;v0OstXF_~8FQuRGGafY1F4C(wgOnt&$Q!tyN{h7%5*Zf zULe?z+SLU8Tp}_>h6ncaB7p{6XYanw00y_V;3eJ(ghX9AE1p3)B}lTk4P2xH#%~r^ z$ohTF*A3YppNQIhNTM9Lpqo1F0@>!)e+oY`V5>F*KNM^dGv;LUArM{Ke*umJ z_2XMI`N$$LC~J&Yvs|VpSR4jz>a(FCkmlZBLiFSHz}Z{rm^{Sz%0EnU)0{dJ^$YBQ zzu*rCuSrxd8$KthJtzLogrbDN@lh}2|8ATfF?&v@N^@xFhhJ_t?BQU#grQ;!puqW~ zw9HkT2d=^ceHFg(j9 zXriM#m;)eM*#TEOj_S^D#t&Vo$=H9`Ygiv)SU;^#L&*Ab>B0yt)-Y!?9{2tSxr zXJqu1Af|(2l`Yyn562Um?ttsP-sw`rHc3i{`GW0JzCih*8}HuBJq* zLEA?j6+l8H#E0(Ygf743zNruxwX7!$F0x#Z$-vMfViO2o@h}xLRmUMqqM8MCrU?}fhKml~7U;!-`=No(?A@=-_ z;)7TFDVLXkA!=Fx z(Y^F{ybL$r-_xKfTgK-;{f@b<#sj_?4K=?Qyo}cXyPT-R z&fJr6wf{FxZPad*cOuhIDo51Q1a0f!eh2N2?AKEPQ}kO77L>wd15UPXg+Yf5SX%UxJ1V;n)R%A*feG8 zGHwl1?{9aYg}?%hC`~Pc&3)1Hx)&*yHUq9z4HISSuK5hj-tP+G9Tf^|#|Ysw2isaFDIHU4pqMl?8P_Mc1G zR6_x6{}wfG@7|N*Sie8AWylP3I}X8b%v^)J=BC-)eL)O&;D7s%>#)`;d`uF23_GBR z0U7^j|2C>9;eRslQ7O)G7Du1^@gEjfnUHMeDaml174guhdIJvdU}CwH+i?3VxpUH$ z&@S-NfLv;-h(FjdRE29E=!!@Cokjc}K9QDQe9YgA*y>QitBRW*m2h398k{K0Xxv;$ zIOSdQx4GK-vq}>4HQ=Yx&rDR8MN+t0bZOG{B;gqI2Mr5iqBc{ zTdi2euUD;SU|3GXq!8ej?}@o&E8xzlYo*3Ovu*{w!&L{ZW^Yw{4P2>gJ)Z9;QK9+x z_zBBrf;2H7pI#R`O1}o4T0R^pRqcBOarsZqxwkSYdV0`8eB1FA@^QRSenvRedRHt& zd@$P%N7~N<=14S9T(%y?b)(fU=PX;V%~A>TNt8|z-s`my9hv}J;$TVK-}bz{n)pRc zD;W2Z43T^n_-4*FEhk zu$sClFE;W0DkRZ44fz$%@D;Cb;~ZNcbyZvfa(PMEoNU84>#fXMm(T+20#MAT1-$NA%CpLN za>0HRu4o0`Nl6Z8#Kzr_UB%tmjLPgMVF$CR%anJ@vuTr5hx86&ypqfNKKdZd)_%6y zQ+UJgOw@D10*X3Yl)~t|EN-dix=+PeqT{R1tjJ}$8&Z!JeaTwSAzWz)QQj)oMD^N@ z%COc4lsFNK-# z2=h5So??$Gaq7eqV)-q&dlHuo+~Oa|X-wA}Ol@i4gzv)2#bGvvDYyFAH8>=g$f2*6 zAMMk@U8^$gh(3>f9AES#=wfvGFF2bfE5xr9s7}A~c!|(_cJ1f(pWB4{Pxqoc5qa@0 ztXyvsVZCW7Pp=-!4*jTKV8fPdmsjbiBg72a=CmAFs@5gu%%Ug;rtN>%a7ny6q-bR+ zLBYyk-fD-TEM=V3>9pwIs_V~}VDqGAMN+LBUVH=y_Qdt#_^#PGz-I%S#zB6RIA9MH z8P68i?>l_22U1iOh>C`7o3g^udia6w@YZyo9G4tWXx#`T;Hou&tME#q`kYRu$wUdU zhr`|uxv7V)Hwd)Q4IE z3dti}j*4r4tIbx3dIDJ~$K=YAmm9OG5*$Dm#Z0~Dzkm+UfWAO@P8EzER%5T$h(=Fhr$PRlQcvduwPb=m0E`MFTPTOey=&Fm-RgZIWgR;ejMtFBaA9jG9m!Suj>p zOJUDi1n3?4TxeR80EqcEIL>h~Pc*PdwXMhn-UqH0@DsmhCeSJY(|?D%%_>Xos;gx^ zx%-_dfQ_4gI@l2(g8f3+u_-QCJ}L03hUs9@Ado|4M$RoKPAc!yA@)%;N(N?D29@;& zx0L`~4hWm{$&*Q691Y%o^z(s>TT+Bm5@xg<@&fLS0Lt?!s+TY`Awd4urrJRbpt4r8 z2$K@fW18KNjuA$TOM502%to3b(TsXM{kM~4Op8TX9(O!niM`P>-n9(u88ED6m_cw7 zWjcS9rjhj`H@SAGe*#EOPxejiv@JBE(*oEkZe8G%yDBiU2mS24-k3m`L#{2fD(aTxU3TiOqN|lT63#Aux&3(6-vj*&{`P@na%bmV2wD&Ev zt!h!TOjcaq?PHmGGNk3X=Dj}2Q2=B|pM80*oIB#(^CS>c%njuDBTXmv%|`M~P=>=_ z!KMX9qc%0Od~R0lb+u+EX92XTDHCxDrq@lTCh^G`vNrDd8GZoN`j3R*v(MK?HL2R# zb6uk^OmRs#=w)K!F#B~=ica4jHrXLzPk#Z4bZ)kf)gB8}p&Y~ee*4Ej#o!yDAIJMU z40lx4qw|=92~l;|s*Rp0u-ZyLx8tZ7zCK!hM{aG`4ZeK9bI#a&@7{nXOh!nlecJfG z;c8~Mki$rE#7_)5RmQ32X0)7Wl9a2NeHeTJx>Ew1F_E9L1Dc#?5fA!yxZi-!W44{X>=TqR#b%cA*rw0MZYSN zY~DWRatx$xIhf&N4T=+Pbz8WM@Za+(uG}tCKsMRFK}&AqQTrwg=zn{x^GH^UWxS+* zZtvp-rk3mEoK!?!5)~mn!K)tfao=nR{Gks&bQ`;>@Wg_sCNE)l+)6QMP~v$4Ps2Jw zCONGtW3wkC+!44Z8gZuiny9sQMOi70G`(An z8>>{g;&IzIpfI-HZlIKJ!R+cMuO)`Yor&TKdbI+iCr;I}Wo?^a&RA5nx0XNx3g|~N zJLHS9>Ls|VmMxFnI=(Me;h(zr-A&ra&mfxtiMU2O;o6HT^8&vYR7L}SZ_;IvhK{4< zcfK#yVIb%V6SU$n*JG7+zHQz1%y+4}cOL_7M|IvkNJpws5^)#KpT*5@`ZSQTV*R`Qaqcj`n>=u8uV6 zC#ciPvID=m<}tTPok{R#Qi0X2kbwrp?0>ZGbRAN*bFgN)m>0vmaNzg!W4%G*6?2j= ze!C`a{=u6u(v!Y|D8Rc6Wc?FE5GE4uuD^gM2*1>s@g-Q?Dt9cZMip|WVZt4O4y~hU zMn*=3qwk7}J%wL=I^@Tcz?4#Gv$&YwNVM{uO64(oE(Hks&Gq^e6nkr_r;5QKQ2UYP z%q(Pbm7MBl;_d2>%eNb=$e7c;%T}Ygs)6iTIyeqE{@n6LJe*lDEWkY2*0a{NZu{vL zqIVlmQTJBlOn1Jlz>0Bh|trx<@ zMZivIfb8{M4O0cc!-Zp=C+riFujbHTV|c|hRe?*@i{|UV!&kK~Bx5(`+IcwV^7QjV zaR0d0DEfmvzK$zCF|KfWKU$byd6sT{?4PH3WzOTTV;zZWKELIQxus|qYcz}Nc8t{T zGG$G;8G1x_fdhe@Y2K@)-i^&w2zY*sr6-)lXW;H6(5cqg*6tmw>;~vHH23_#&`n=m zfcc?i>gMOVWgb_>oe*3B5Ui?UY9>AbSniJjX;Ykv*2D{nhrgx)jS?2o0+d5ci3&R} zcX9cU<`CHS)XBM_A7Zf4dB)?#511OD6eTu#^G+PAKH8+V>UL9NMYX<^DJ0P|b%i{r zDcj?R+*zAgmVnvn4pubm=4Z?SCMMsz_7gO1cyQdkc=6WwBe` zzRF<4rw~Jc()P~0&|y@{#P_{V<6ZgrC#EJ6ldoGtqCJ*?x8BZE!Q1W=26vCBQOkN@|N|34mTSib_irM%{7rV3fIM8d+PEc$H&{1h; zDNS3?e%i)Rvt2ySws>VcKJL#pOmdxADJV#P~M^({t&$2(e6p-gL7!vdp4dmrnoI&-#P4@ExD=27pXO zIpgVF}dZcB>}8m6_aYQfOf-W4!N+Q zIv2(i0?Ay(m5+X3;lN>`qI_!)$1Ss=)(5Ta`sbDD+@^lDG+OkuwKsi>uS1jBM7h?m zP6#Di^&5-kQogx;+K)QLVF)0}d`Z=c7@*+c(msa+dRLF!M3%#5+HLFyVBS6VS;dSs zXL1tF9HiSFhYM&F)e%SJWOyT`Y^Dw<;eTtNW|Tf|c3j$UkKg3}M1MUKUxdNFfO}zD zUSL|-@T2%5)&XqEmOSS*amV*T{1aU%pHkmrmM{3^hz9^(wjHF>e-$;}Fb!7a*-XaX z0t2|PW!UsSGKRZ`S+ytcVTG}Ot*PvCL1_p_AFe$5!dP#mVzRmcL>6L4;0woi+>Cg5 z?(uBlf;J29YDiXaA$IF z7i&CAsF!+2ecr(3JG*}%uKTm#kQa_taocXw?{w%Fk_tdIiz% z2aSmXetAExO3{uUg&Yv5(Hg0ePS8`9G51(+DwmHFV_eGasKzl5D(rl>s#DP>D^cAk zf&yi0W{?Flp8TREvAEd`Q&*J(z*n36Od9+*QEL#ID5NS5dromvFrQrprTu}{)leul z;NWrNo|rILyjyg1|H4N>iK?(E^bH9nj+~SlU+-T*#R><-4SvsmO&v}D`t=|rAXS8% zC!%H=`e6NBWdS4gme~4tqbFrW8t}fOqn*+QQ_^ne0G#+~`6+{6U{kPx%KEYOaAfmj zTA2ke*}tP#%R>w?Iz?#k(J0JbgB0_#vfgX-E)C?J&x>J9YxZc>&7FAL-LGdD-wqV`tyS}=i3$9cS*miG+(PeJ)_}$desR&NR74kayrNeG2r_c{p`GS0mI-;wi z4k##pNAWEk0pF5>#^%*^9g~aiGMC>8h!-s^Ye`AncmFOKmNb%n@FO`K zC__cHFb$EYSefbP_Fr{9-pHO#nPO!>It;f-$s|co_XW5nT)sUV z6dWis*EHRC^n3C1Ix!>YD6l7s+DL)45YBb}h(v=vE4J=0e(!ibv?(Ablvx$!(%WhG z#;Prq?Wi|mj0<`Pi+=L~1=UgMo1@1Nn8aPE?-PX?NXJ=A1}x84 z#*fk&1f<<@9pxYNy=GDzDP_$xyxQ)LcG5*tp|#meil=my(*qteyZwVzwEYS zb7RT;GzR*jh%oLf{()fOz0xOiftq-{HMlhM%0MT{mHgs){BZSROl9+Gw{^grYcyTG z{86|4*FsW&3<+ojUnlQ=`n8#`vU_Xre#3c4qSxKufI@!oIN0^&Y-xscTczuJGcIzR zM>F9H-_b^EXxI}>+Q`AeWR(yx#WsDOyc{m5oG%cIMjfR$-Pv#?8?+-YI%g>W`SwKl z-FVVW+qlI4SJs&aLbd<@zk9psw#e<4z0y@FWFOQBEmW4_YG^{XtYboA5@WbgDx?Kr z7|Jpl%P3n6#ziRmGK^h|bucQ%*oNQx%&5=j`}xgZ9A}*Eea`#+e!iZM=V`rnz9ndw zs76_vXi?{;T#(Y8o(uZBZS{)gXq@>9lQ)TSciw0k?x9w^T1{94!7NU+YA7>y85fM{zw5$OmOgLbUP;Cl|8yzgpE`;YA)Ro zaUPE`c6vW;mCenol-e)y!Av(I5w30idTp`QmD_=dn*Uk_Wm|;oFH010Cz*K6o3`vY z6ccfv7ZtwOm^IqPSK;e6lpy+Hg#P7<)h}NAtfI{(oh*Z9J64h(2)vd!KBX>5QlNf5 z@7zSUtP+km?|#EWX0}P*(BWCdx0vOxCXWg455JhC zHC^#Wx9o7Z=R1T=VDf;$xYCKey;?r!-I1BUKd2a*IUU?aqS$O7d$D4>+sr|~=J@x3 zFVQLY8$~D94Qq=$Xt;*nPnc-YAz@NiT^=#A9P?ZBfxqA1C}k{b>B1YWkJUaBTUj74 zrHN?MLwCF-;+sQjcBTQtWw2$o{mqR|2CDaap59QuNhGw~%_?sri^$ecz|Kgx)ek2w zXA3J#dQiv_qH(XQ-XvaQ0K7PVT*PPc)(blkq~-+8b#Bu4cqpAR7mKZ)z$3uEx_`jDu%n+H31#8*Ny|)$`{QeIM&;QNrto@2SdgwV2E*}DF{hkcJ-os4)5dJ7q{*_^}MUi<|LvcTsBs`|~MbF!V zr3y|59@7&(G=m}Cu9eG|-@DY{$t(dn)eqU(jk)~I z*?2R*HXGhyK5|e?2Q~AoOp4=~wmtgtyR%PKDo7cdpEb4XCVQW0+*F!EQp~%v_F`OF zq>B@71^?1^^Eai!bcJP+y;8xf^5-4{{?Ecwd#AqnIz&vDHttOaSpuR;!Pmh+*>xJo zu38S?^=l5u#5B{F!ZW~}6O3Iz(V_!Xk|EhKg#>A0kbJsW|EO>~s2ZI>=%o-efgT*ilPhf#`$pCl5T+;Kr zLGz2l@;BE=Ws!H9b0dJvBL6l&y(qZU-eH~=o-+ZrTF1)2aZ$(KA8RA-VI%cFU!5b( zhAo#bICGI6Em^Kc9?SvgGG?dABAx;{nncNmX2vvvjA?QbbwCAj9U#|X!rJdOI!7rg znN@|U*ICjH-Ze)HTxD+>CUh=4hUZ`TML0oQ-tAcz9sTsC5w7zEl}K&`Eshj^m&?Sd zKGSa*Hb)*YoZ8`8C5Z_yJ|FRqmay4ih`jD{t@La_7z=xO<&#%x5TRzAMme%4XSl9% z>q0NV)U|%D=E{5uY{O?-Iey% zIcHTj*3vs_Yr7wjZg-8Zc5yBst&j{a#L=W1$NszlT>qd(M+etAHqMLTR0nhGvR{hh zu-sH!X(YpVRX>U8mJ;sM*C7tJ^{KGZ<13Q$rz@pMloWj4gkg5!O&z_DwzfLF=_*i^ zbyFyN_fwRtkc9chGj3qM4g_%ZGe~j7{@ju?w<=c-a34Xvy99W2{I_&pdA6VLBq$^3 z0O-RW8Xjt0BL6Sz!S|& z5;_H9O+KmAs^fts@JT1;7Mf(T&KN&xlL-O2J^9W?C9R=bg^DXoSSs6v!%F>YNgunr ztPQ=1%pMLi75yai4}soh%uM&LDZgQPYKL6zRc`L}v50wNAanfB5dS1pI_`zx7eC#v z0zz#0oCA~qbZWIHS^8hqn4<5@2Yum$*SscZa&33X@;!9tUU3oy58cU#PEg|rO^brdwI8;;6A~O8FtG`! z676a@gg|>ePu2?ZpKG`n9rfvT%`OaXr>YC!fLuzrrQ^woC4+V2LV9LZx5i9oI6&XB zhb9*FiycNv`m-tEAQbxjRI&5gPG`LwiMdxNqOF8@|1`Dv=m zc1SdG?ZcBhi7Jlg7nj$#E1^)L*at5U#+C^I!Drt|`2K$9y>KeKS~zuO?>uz)V2`V5fCRTUxR z%q`$5tDk*FtT|lt(8EMH+Dy3YILUPtp-miy104NWJ7`~{pM1Y2BQ0lCaM19(_+ zPvUHL7nR6}=MuI21i&p(2s%SfUeV>st3~b>g_U6Xb2~3O^=a`VoncpI)biLX<=n!F zDf4r~E8#7b zCPZ8yI#K^GufbDJObVcuE?v!pFKENq6!P>_s@G%Pf-fA_<4SLHWiV`(kkCt3(+uR& zjVSf+*d=1VLwF&u=|f#K3Bvq-sFomyVS@5U$A{IFJbzz}+2awU<6TNN2tZ4*3GkQx z7|j8YthYvXy?4(vaPz;l5u$J1mKWSA$yy+FD{XiwRQJ@W#hOD=JBx}j1XHo(&KV*w z9YwmyMSw!G?PVl~b2M4R*g9XsUAOF}|5q>&S6$4j^mC)J)=w?pHnwRYQS9(}O;y;+K}B09 z9rgr*o9gYXOa5OTX@SmC8Wy~X%|s04@zBG{^TB&IVTofSfs z3}&60U8%gHvA4AHW{s_}jR~)Fh~#=e6ENPyurgqp`|(0&-ma+S?)V$YY%p<_GUj%L zJM?G2V#uoHZQDuUsjP<^C!7p4si-wHlnsJyZ_a(SqPH{G;{rWY&yF1;+6mE8{=|@h2Dz$7y`u%DlO&7 z_}%eQ!$LgcjfN3)m2Q%TLeJNd^%nJ@)y0=p?;2j}DjJYX^zE*%$a`K*eiaOG$f`ng zX9!ueHG%?)xEK1Q2o32Uh^VXT$nncfMJIhhg~8vi^Lfs;wQrF-s?U5)iP|T;+9@t7 z0L^tyOcc++4t9UE4PC9Z9@@4xnb{ed7d#jL)sM!md06Evbn4`^7=`H6Z z9yfHohw?v?GHJ&$$OUst8b z|Kwn2tW4MxD$jQRU}3$<36GwYEDiLm^)?SYO^JJHAAY{w3_f05vDF#|s#T5(!6QxJ zA-^#C^3GsW!qAs;i0iwgjMC9L-XW%mWqD7RAj_6_w>SePZ|PD&~^qvu0zxbKz=O_e`6Bb8hdkGrods!m@*T(f91242JI@V255- z31!+GVBe{==G@PdXS#O9vfJjsx!gG(OdV@CCLWN!vTo*VEUu=`n6L>LZn@E)VoQTD z9aV34`*~EVc?PGOH@Z&T*$R3-Fm;dpmp;0U6t%Y$Mu-_(j0^U=+W2{BWnpH=Fa%zg zC|)f*w#a^~2kPd7bTTrHQBMqT`TD(4X)BJy5)}RQaci_1GE+Ck%C)8GMcKa`C?eCN zzgXXAoepKSO>jF+b+rR*1iGSZ`b?8yg)d6SdU~y}ed7dmOm%BMXPw)A6i$G5*Mi}e zdTi-!{byvP-b}T%R8;Cg37EBTQwbSqMZ!zD=Jg2ENVqU*zjlsq|5gQ3%L2On@Jvlp ze*$Vi=Q{04>g{5o49t{Y&94Yi8|wzT(eT-}P$tfK+RKGW_Zwiu%AnhorZip3gJ_F) z99C4285eVx(>$`nb6B_L*4XzPNG;2`3!jXHx^Ur&Wy2AbD{CKWqB!qTTIC*rsJNK> zIR8>!uLlG!{jjNstBL872tVyry@;xBMSFsjbpn^sDJf1&jq5#aw{%$nzN%P~fo@s< z9+6{eDS|2h9LDFY#h*RY=iwZrGa#N=y0Pu_~@u(Y=2uzR37o$9I9?dDja9JR5_*Kf4QM zEuwhT;x~jd!@T>NEO>As&@qO(Wh2QmxphZg{vAGc7X2~%q^ZPj{RiP6=(XeTAQ{5! zhzWNcXohLWOalM#?9YlN-_Y+kh-<@py+7e47fbHkyorNNz%t@L%v*v~rI63hJ22$? z26eXjSFR$*N#A7D+5Qn?R@BV?`6p-Rw7y_8pR0Gp;r#v8AwNlxGWPBit}}gaEqjWw zl`|Y13}M=@l?^osu=|KERTKz*wUsoAm`*o{)c}h3zLuAXy1_wLzUrCMH7mY)_P1Vs z6I-UKBR)Wz5u9By{KW<&N}Nj_Y6FJuwQPfG4x>Z`9{@N!+{o)s(Y_}pY)0-QBE+6B!7 zEr#e%O~N1#=0k$HXL+P-JYX7{?-W#J2n-@c21R$ZSp0s@Y;Ot~`7SM*EUD%lu(%HD ziD`SbesaJ3KJ_>`j>Xd-ierWgNiB~?vV>|mj@-#iAFmyhp>nTRs`G>WVa?l$?(cMA znyXu^ql7_|R2TJK^+)N&stX^{nOt3}Y5IJ3N8a^>%~!w?@?{bJu<1n@&p=L+ahLmY zDzn^}m|?lL_<72zQ^havnHU-1mnJEAA0xx0{=%UIfltnIF@H)qi4JlaVnPzS>16aS z>l1Hpb~HWr7<`|!lW2WHAJe(i6o+A&U#(pp$_qmJ)^~&z2@oyDd^wUz|Ei+b_J5k{ zqcs`1-cVAi1U(G!t7d#N;&GQ;hrf6pTQZr@5Fe6opNu?=SVuY447S*ey^us^E};y} z5`p$Ul528>L~l%8Np7CaCXfrln(Eg z37)@*_&H3fDmecgMnjQehV_tdv6X&Nqf45)BgC|&G`r&xm+xFMa((yKBGx$9Lqe$~ zwY8w=+W;8gMhcGU&fhE~b|}tpz93>XBWxFGHq0Z?1S|i(B4n`UdD8QBA06bMFczWV zd5HgjK{PN1%uz0KwM6b9VKp6$wFN0tiOYfWtN10rLF2um^>D%3F{ebm5%2Qo+kvDcE3lg1XwkjD%kvO*0X1BRvzyQ?!ZON268zvmF- zDs86g6;f#A8_v@>y(y+>#+M&;dJk|tlpKNU#DcFa5^^7wV%g$Ond-j!3)%{@;A^%* ze_V9VfeaH~|3}1?fe8*uI`0xIyzKYHCYE-gkfI~3R2s*~{8N=g(T#k6^B?~-Rw zy_?unYdV#cOUH0He;J)STlW6==TlJsr$VN1MP^kn4;Nl z2VWAl5ySm3>u&wLmtiyDJ;{=TH6j-l7cefo(KW>GQF~i;lE9ZD5)&jwt4QMTvVH}nT zb}B#u>NWVh1(>`YD)g}X3ctq(i9WDW#LB8JOuz+8fCMzKbsP9i5`IZMagM{gIR8Np zdSPa#oNrht7Kl-)3)-63E_{or5~Jo|+QF!v#uI$MZ=58dC6jBPZ)eZwav@-a6b?cY3eefOT&Cz-R(jFE+tMAPM~rpWB4aDMup4)8K=iB-oxjjfvE`GZ~#iB zGPP}F;aBZ0Ah5>S5L)s(BK(v}o2Tx-#aPA!Zpp2B;0UMaw!0EX8&(P&>p&^^kaW_g zd{6rZI)z*#h`FtF4pU{NOoxp!$sh2P=mg+zmr3DWERCNRiwzp<);gd??bBOZeBMl2X_NZ;qdDxsa`oIAG&zi8mSUK2j!DT+eE`Gk|p z2MGLvSHqvP<(9OaKM*ctf;yUJGbqr9-r6%?@flV+)o;Om8IqThVY4gL{5&i}Toi(b zfIt1m#k+z~^pK4IcfIgS@9K{%pg(&na4(u(yag))bd^) zFh5(7DB$`Pe8xk(R0tP?&qU7-O-s7P$r7%GPI*cnnXkC%{$1Pr0jKN?;S}TD5q5#9 zaNo;W3#e-H1L9K5J@<}Y^em&nG`7QT`P;kSc{i;|?C%`9C`d60a0!%+GQqc6Jr5c!zQvXI{0zi+=EhSH0==vz3pe?9|HL0bap6ct zxI@()2q_vpv=yXeUIwM-bBJvi2>H9v$_P#=Vx`tfY3ckCU0vLw`aOvXHJv# z$_!p^z;wuy>IzgpWWAg1fz6niVa<{;csnO&*0Ql9Z-7M0aLXI312hcG4Z*}Ajy($@ zXTKp&nNMa;z%t~tRrtVWzMJZ1m)#;6o#fKpqAR@wZj?Zm#77|9-zD92m+sODMigJc z4A3mn_2w=lkRmDt_?+2S??yL+!@3?k78C5wy`MW|z|QQHdQlpG~~ zf}T8{5pa|0Du8^(JRxJ=ik;keo^2etg$)v!<{M8HNPs)E!x=qKL;m^i{m8<&U-RB; zY;z7l#7xt_{lp#lhs-1Zrs~}>&>h_&wb+z-4$x1Q22~mSz)XK^-C;r*`v`{hc4Sbb zT{KNm|GRrIhlynjb0oH75jbY5uE>!x9Cv+hj2GCTw;*r_^cQ;>>6`9pMR`zPg4A^% zJTh~16vU2+D~U+WN)?CM3=I6wuB)Q0e7&+0I$I4Iv4E3wf|B__hS{>}yJnldrCSy| z7-?h)&@;;rZ1CIWfH4?Z;?yPFot zhy?FfrFloxGXhDym;2rNVJpTfOWdBLKiVC1$YF%KhlXjsNZI~J3Yksu2m)l|i__HL zw1{rc+@R3gsc6p|oAy9Fw(#}E982HFP}Cy?s27YyiT(maT8OIOv}qz53LAKMCy^So z4T@j{X?oG*=yk&{RZvul>W-hwj2a)1Hr99_othahe2sayLzsxNI?DUj4>BKm7Y{$| zVAJV6@kQ56BP!e1f4sjXp8B0YP1Wab*`68j&lZp}0X{Dj->L1MQ^odq5%96q^fx)Y zrJKxSgA`6B-=bQ{AzfPvQmPYBP|U)nO%{ie13;ARH44Pf<+tVi0p%cqhz2u~qLLkQ z8?wHf|1z0ZaPIcY79DhzJYE>-rmXXorw~VsiLG6#KbD-W9P0$bG7$gC`xh2}9mr@b zFuCY#OjOzu?Z$sqO$_mNjN+R$WMh%}qoDJXpHtc&RwD*qnEcM){DFBb!?-eX z0g)&z=Q2IL~A;Vh~LoD%{M4fIB48*2_#AX!i9?Y2chhsZv zJ8OdcpBoaWhZzxXc&F(f8F8rY5Xs*a^QyFY9Q6tSC6xp_O(e$n$0aa{2n_T5MYlT023kJNWowM&Jph(jkUpp&fy&2Zd)l6$4Q*fUp>J_|9A51+ns}--OeMK!Rt2 zZxZ@dBw5WdZtPvXQi!@*V0TmOMuus-Tj4THa<}+$=%~ z1!2>BNx2}t{kEsar6>hnm?^YQc92olOEZ)znB$P_`IiBfU`%RBwZYyhqhC&SS#E4maL&xV;z>5SriZ^$I>#)$jZIiOA>F#UdSltn=T~=R zym!9F;%{5doq1QQSLyL8$cKSGVlTj%9X~(wfWP`_WZOJ!>93+Qw_nnLj{b}Laew}L zSPgH=Q=bA6oMqOFy(GnmrGh>7p4}c4*}^@~>G{dG`LB!mKkts3bkX(REb8TNUYrw2 z#`sB7(ZmVg@44)N-JJ)7r~+y7d0)^}O8K&BCUr}Fr8#mSMF8IoOb;vp)Nob5jD-xj=AYm|&?Kb&sR zY5%nWpMzfcFo&yRf5uhSh%Wosa-`-|EYm^(V23`NdKcd-v_ftT>R@HNuY3yduHe1& zYCxz|O2bcA|I)UND+7{D_=nDm^8i2c!;`@e8!P;OZv@*(SeKe!i7_(0-7*Dz)j;1w Kk8;*N(#&@G?{3@Fk9N=t_bLn|#x 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 Date: Mon, 4 Dec 2023 12:58:34 -0800 Subject: [PATCH 20/27] docs: refer to kubevip --- docs/docs-content/clusters/edge/networking/vxlan-overlay.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs-content/clusters/edge/networking/vxlan-overlay.md b/docs/docs-content/clusters/edge/networking/vxlan-overlay.md index f0a0ae294f..6b0c6bd173 100644 --- a/docs/docs-content/clusters/edge/networking/vxlan-overlay.md +++ b/docs/docs-content/clusters/edge/networking/vxlan-overlay.md @@ -90,6 +90,6 @@ To view the external IP addresses of the edge hosts, from the **Main Menu**, go You can access a cluster with overlay network enabled in the following ways: - Access the cluster with kubectl CLI. For more information, refer to [Access Cluster with CLI](../../cluster-management/palette-webctl.md). -- Access LoadBalancer services. You can provision LoadBalancer services in your Kubernetes cluster and expose them to external traffic. +- Access LoadBalancer services. You can provision LoadBalancer services in your Kubernetes cluster and expose them to external traffic. For example, refer to [Publish Cluster Services with Kube-vip](kubevip.md). - Access a node by IP address. You can use the node's external IP address to access the node directly. The overlay IP addresses are internal to the cluster itself and cannot be accessed from outside the cluster. From fe13bbaf1a4fcc9b35c1c16e42f4d979bc9f7ef6 Mon Sep 17 00:00:00 2001 From: Lenny Chen Date: Thu, 7 Dec 2023 11:51:59 -0800 Subject: [PATCH 21/27] docs: update based on feature update --- .../clusters/edge/networking/kubevip.md | 4 +- .../clusters/edge/networking/vxlan-overlay.md | 60 +++++++++++++++++-- 2 files changed, 57 insertions(+), 7 deletions(-) diff --git a/docs/docs-content/clusters/edge/networking/kubevip.md b/docs/docs-content/clusters/edge/networking/kubevip.md index ac44bbab13..957988ca4b 100644 --- a/docs/docs-content/clusters/edge/networking/kubevip.md +++ b/docs/docs-content/clusters/edge/networking/kubevip.md @@ -63,7 +63,9 @@ However, Palette has configured values for the following parameters and they can | `svc_enable` | Enables kube-vip to handle traffic for services of type LoadBalancer. | | `vip_serviceinterface` | Specifies the NIC that kube-vip will use for handling traffic to LoadBalancer-type services. If your cluster has network overlay enabled, or if your host has multiple NICs and you want to publish services on a different NIC than the one used by Kubernetes, you should specify the name of the NIC as the value of this parameter. If this parameter is not specified and you have set `svc_enable` to `true`, kube-vip will use the NIC you specified in `vip_interface` to handle traffic to LoadBalancer-type services. | -8. Next, in layer of your cluster profile that has the service you want to expose, add two parameters `loadBalancerIP: 0.0.0.0` and `loadBalancerClass: kube-vip.io/kube-vip-class` to the service spec. The following example manifest displays the usage of these two parameters. +8. Next, in layer of your cluster profile that has the service you want to expose, add two parameters `loadBalancerIP: IP_ADDRESS` and `loadBalancerClass: kube-vip.io/kube-vip-class` to the service spec. + + If you are deploying in a DHCP environment, use `0.0.0.0` as the value for the `loadBalancerIP` parameter. If you want kube-vip to use a static IP, specify the IP address and make sure it's unused by other hosts in the network. The following example manifest displays the usage of these two parameters. ```yaml {7-8} apiVersion: v1 kind: Service diff --git a/docs/docs-content/clusters/edge/networking/vxlan-overlay.md b/docs/docs-content/clusters/edge/networking/vxlan-overlay.md index 6b0c6bd173..6221b2d886 100644 --- a/docs/docs-content/clusters/edge/networking/vxlan-overlay.md +++ b/docs/docs-content/clusters/edge/networking/vxlan-overlay.md @@ -57,17 +57,65 @@ You will not be able to change the network overlay configurations after the clus 6. Select a cluster profile. If you don't have a cluster profile for Edge Native, refer to the [Create Edge Native Cluster Profile](../site-deployment/model-profile.md) guide. Click on **Next** after you have selected a cluster profile. -7. Review your cluster profile values and make changes as needed. Click on **Next**. +7. In the network layer of your cluster profile, specify the names of the Network Interface Controllers (NIC) on your hosts used to communicate with the cluster. Later in the cluster definition when you add Edge hosts to the node pools, you can select which NIC each host uses to communicate with the cluster. Make sure those NIC names match your configuration in the network layer. + + The following are the sections of the packs you need to change depending on which CNI pack you are using: + + + + + In the Calico pack YAML file default template, uncomment `manifests.calico.env.calicoNode.IP_AUTODETECTION_METHOD` and set its value to `interface=INTERFACE_NAME`. Replace `INTERFACE_NAME` with the name of the interface or a regular expression (regex) that matches the name of the interface. For example, the following code snippet works for any NIC name that starts with `eno`. + ```yaml {11} + manifests: + calico: + ... + env: + # Additional env variables for calico-node + calicoNode: + #IPV6: "autodetect" + #FELIX_IPV6SUPPORT: "true" + #CALICO_IPV6POOL_NAT_OUTGOING: "true" + #CALICO_IPV4POOL_CIDR: "192.168.0.0/16" + IP_AUTODETECTION_METHOD: "interface=eno*" + ``` + + + + In the Flannel pack YAML file, add a line `- "--iface=INTERFACE_NAME"` in the default template under `charts.flannel.args`. Replace `INTERFACE_NAME` with the name of the interface or a regular expression (regex) that matches the name of the interface. For example, the following code snippet works for any NIC name that starts with `eno`. + + ```yaml + charts: + flannel: + ... + # flannel command arguments + args: + - "--ip-masq" + - "--kube-subnet-mgr" + - "--iface=eno*" + # Backend for kube-flannel. Backend should not be changed + ``` + + + You do not need to make any adjustments to the Cilium pack. + + + If you are using other CNIs, refer to the documentation of your selected CNI and configure it to make sure that it picks the right NIC on your Edge hosts. + + + +8. Review the rest of your cluster profile values and make changes as needed. Click on **Next**. 8. In the **Cluster Config** stage, toggle on **Enable Overlay Network**. This will prompt you to provide additional configuration for your virtual overlay network. -9. In the **Internal CIDR Range** field, provide a private IP range for your cluster to use. Ensure that this range is not used by others in the same network environment. When you toggle on **Enable Overlay Network**, Palette provides with a default commonly unused range. We suggest you keep the default range unless you have a specific IP range you want to use. +9. In the **Overlay CIDR Range** field, provide a private IP range for your cluster to use. Ensure that this range is not used by others in the same network environment. When you toggle on **Enable Overlay Network**, Palette provides with a default commonly unused range. We suggest you keep the default range unless you have a specific IP range you want to use. -10. In **VIP** field near the top of the page, provide a virtual IP (VIP) address. This address must be within the same internal CIDR range that you provide for the cluster. + :::caution + The overlay CIDR range cannot be changed after the cluster creation. + ::: - :::caution - Neither the internal CIDR range nor the VIP address can be changed after the cluster creation. - ::: + After you have provided the overlay CIDR, the **VIP** field at the top of the page will be grayed out, and the first IP address in the overlay CIDR range will be used as the Overlay VIP. This VIP is the internal overlay VIP used by the cluster. + +10. In the **Nodes Config** stage, when you assign each Edge device to a node pool, you can select which network interface is used by the Edge host to communicate with the cluster. Make sure you selection corresponds with your configurations in the network layer. For example, if you use Calico and you specified `IP_AUTODETECTION_METHOD: "interface=eno*"`, you need to make sure you network interface name matches the regex `eno*`. 11. Finish the rest of the cluster configurations and click **Finish Configuration** to deploy the cluster. For more information, refer to [Create Cluster Definition](../site-deployment/site-installation/cluster-deployment.md). From 0db129fe322a183f362a09d5787d4941bfdc7b24 Mon Sep 17 00:00:00 2001 From: Lenny Chen Date: Thu, 7 Dec 2023 12:45:55 -0800 Subject: [PATCH 22/27] docs: highlight code snipped --- docs/docs-content/clusters/edge/networking/vxlan-overlay.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/docs-content/clusters/edge/networking/vxlan-overlay.md b/docs/docs-content/clusters/edge/networking/vxlan-overlay.md index 6221b2d886..89c689a214 100644 --- a/docs/docs-content/clusters/edge/networking/vxlan-overlay.md +++ b/docs/docs-content/clusters/edge/networking/vxlan-overlay.md @@ -83,7 +83,7 @@ You will not be able to change the network overlay configurations after the clus In the Flannel pack YAML file, add a line `- "--iface=INTERFACE_NAME"` in the default template under `charts.flannel.args`. Replace `INTERFACE_NAME` with the name of the interface or a regular expression (regex) that matches the name of the interface. For example, the following code snippet works for any NIC name that starts with `eno`. - ```yaml + ```yaml {8} charts: flannel: ... @@ -92,7 +92,6 @@ You will not be able to change the network overlay configurations after the clus - "--ip-masq" - "--kube-subnet-mgr" - "--iface=eno*" - # Backend for kube-flannel. Backend should not be changed ``` From 911a4214d8e0e928db9d96c4816ff68c4a699d88 Mon Sep 17 00:00:00 2001 From: Lenny Chen Date: Thu, 7 Dec 2023 15:14:51 -0800 Subject: [PATCH 23/27] docs: specify nic name --- .../clusters/edge/networking/vxlan-overlay.md | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/docs/docs-content/clusters/edge/networking/vxlan-overlay.md b/docs/docs-content/clusters/edge/networking/vxlan-overlay.md index 89c689a214..43e46644fd 100644 --- a/docs/docs-content/clusters/edge/networking/vxlan-overlay.md +++ b/docs/docs-content/clusters/edge/networking/vxlan-overlay.md @@ -57,14 +57,14 @@ You will not be able to change the network overlay configurations after the clus 6. Select a cluster profile. If you don't have a cluster profile for Edge Native, refer to the [Create Edge Native Cluster Profile](../site-deployment/model-profile.md) guide. Click on **Next** after you have selected a cluster profile. -7. In the network layer of your cluster profile, specify the names of the Network Interface Controllers (NIC) on your hosts used to communicate with the cluster. Later in the cluster definition when you add Edge hosts to the node pools, you can select which NIC each host uses to communicate with the cluster. Make sure those NIC names match your configuration in the network layer. +7. In the network layer of your cluster profile, specify the names of the Network Interface Controllers (NIC) on your hosts used to communicate with the cluster to be `scbr-100`. This is the name of the interface Palette creates on your Edge devices to establish the ovelay network. The following are the sections of the packs you need to change depending on which CNI pack you are using: - In the Calico pack YAML file default template, uncomment `manifests.calico.env.calicoNode.IP_AUTODETECTION_METHOD` and set its value to `interface=INTERFACE_NAME`. Replace `INTERFACE_NAME` with the name of the interface or a regular expression (regex) that matches the name of the interface. For example, the following code snippet works for any NIC name that starts with `eno`. + In the Calico pack YAML file default template, uncomment `manifests.calico.env.calicoNode.IP_AUTODETECTION_METHOD` and set its value to `interface=scbr-100`. ```yaml {11} manifests: calico: @@ -76,12 +76,12 @@ You will not be able to change the network overlay configurations after the clus #FELIX_IPV6SUPPORT: "true" #CALICO_IPV6POOL_NAT_OUTGOING: "true" #CALICO_IPV4POOL_CIDR: "192.168.0.0/16" - IP_AUTODETECTION_METHOD: "interface=eno*" + IP_AUTODETECTION_METHOD: "interface=scbr-100" ``` - In the Flannel pack YAML file, add a line `- "--iface=INTERFACE_NAME"` in the default template under `charts.flannel.args`. Replace `INTERFACE_NAME` with the name of the interface or a regular expression (regex) that matches the name of the interface. For example, the following code snippet works for any NIC name that starts with `eno`. + In the Flannel pack YAML file, add a line `- "--iface=scbr-100"` in the default template under `charts.flannel.args`. ```yaml {8} charts: @@ -91,14 +91,14 @@ You will not be able to change the network overlay configurations after the clus args: - "--ip-masq" - "--kube-subnet-mgr" - - "--iface=eno*" + - "--iface=scbr-100" ``` You do not need to make any adjustments to the Cilium pack. - If you are using other CNIs, refer to the documentation of your selected CNI and configure it to make sure that it picks the right NIC on your Edge hosts. + If you are using other CNIs, refer to the documentation of your selected CNI and configure it to make sure that it picks the NIC named `scbr-100` on your Edge host. @@ -114,9 +114,7 @@ You will not be able to change the network overlay configurations after the clus After you have provided the overlay CIDR, the **VIP** field at the top of the page will be grayed out, and the first IP address in the overlay CIDR range will be used as the Overlay VIP. This VIP is the internal overlay VIP used by the cluster. -10. In the **Nodes Config** stage, when you assign each Edge device to a node pool, you can select which network interface is used by the Edge host to communicate with the cluster. Make sure you selection corresponds with your configurations in the network layer. For example, if you use Calico and you specified `IP_AUTODETECTION_METHOD: "interface=eno*"`, you need to make sure you network interface name matches the regex `eno*`. - -11. Finish the rest of the cluster configurations and click **Finish Configuration** to deploy the cluster. For more information, refer to [Create Cluster Definition](../site-deployment/site-installation/cluster-deployment.md). +10. Finish the rest of the cluster configurations and click **Finish Configuration** to deploy the cluster. For more information, refer to [Create Cluster Definition](../site-deployment/site-installation/cluster-deployment.md). ## Validate From 24a76d4dc34a5a16e8c77d5b02f19e60c92a599a Mon Sep 17 00:00:00 2001 From: Lenny Chen <55669665+lennessyy@users.noreply.github.com> Date: Thu, 7 Dec 2023 15:26:44 -0800 Subject: [PATCH 24/27] Update docs/docs-content/clusters/edge/networking/vxlan-overlay.md --- docs/docs-content/clusters/edge/networking/vxlan-overlay.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs-content/clusters/edge/networking/vxlan-overlay.md b/docs/docs-content/clusters/edge/networking/vxlan-overlay.md index 43e46644fd..bcd4f5d4dd 100644 --- a/docs/docs-content/clusters/edge/networking/vxlan-overlay.md +++ b/docs/docs-content/clusters/edge/networking/vxlan-overlay.md @@ -57,7 +57,7 @@ You will not be able to change the network overlay configurations after the clus 6. Select a cluster profile. If you don't have a cluster profile for Edge Native, refer to the [Create Edge Native Cluster Profile](../site-deployment/model-profile.md) guide. Click on **Next** after you have selected a cluster profile. -7. In the network layer of your cluster profile, specify the names of the Network Interface Controllers (NIC) on your hosts used to communicate with the cluster to be `scbr-100`. This is the name of the interface Palette creates on your Edge devices to establish the ovelay network. +7. In the network layer of your cluster profile, specify the names of the Network Interface Controllers (NIC) on your hosts used to communicate with the cluster to be `scbr-100`. This is the name of the interface Palette creates on your Edge devices to establish the overlay network. The following are the sections of the packs you need to change depending on which CNI pack you are using: From a06c7d4136fd577bbdfe1b94a07252e779d17ae2 Mon Sep 17 00:00:00 2001 From: Lenny Chen Date: Thu, 7 Dec 2023 15:32:56 -0800 Subject: [PATCH 25/27] fix typo --- docs/docs-content/clusters/edge/networking/vxlan-overlay.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs-content/clusters/edge/networking/vxlan-overlay.md b/docs/docs-content/clusters/edge/networking/vxlan-overlay.md index bcd4f5d4dd..6e821a06d3 100644 --- a/docs/docs-content/clusters/edge/networking/vxlan-overlay.md +++ b/docs/docs-content/clusters/edge/networking/vxlan-overlay.md @@ -57,7 +57,7 @@ You will not be able to change the network overlay configurations after the clus 6. Select a cluster profile. If you don't have a cluster profile for Edge Native, refer to the [Create Edge Native Cluster Profile](../site-deployment/model-profile.md) guide. Click on **Next** after you have selected a cluster profile. -7. In the network layer of your cluster profile, specify the names of the Network Interface Controllers (NIC) on your hosts used to communicate with the cluster to be `scbr-100`. This is the name of the interface Palette creates on your Edge devices to establish the overlay network. +7. In the network layer of your cluster profile, specify the name of the Network Interface Controllers (NIC) on your Edge hosts to be `scbr-100`. This is the name of the interface Palette creates on your Edge devices to establish the overlay network. The following are the sections of the packs you need to change depending on which CNI pack you are using: From bb32538d47449615d0aa55c5fad1a96ea2129e80 Mon Sep 17 00:00:00 2001 From: Lenny Chen Date: Thu, 7 Dec 2023 15:50:31 -0800 Subject: [PATCH 26/27] docs: fix formatting --- docs/docs-content/clusters/edge/networking/vxlan-overlay.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/docs-content/clusters/edge/networking/vxlan-overlay.md b/docs/docs-content/clusters/edge/networking/vxlan-overlay.md index 6e821a06d3..df136571da 100644 --- a/docs/docs-content/clusters/edge/networking/vxlan-overlay.md +++ b/docs/docs-content/clusters/edge/networking/vxlan-overlay.md @@ -98,6 +98,7 @@ You will not be able to change the network overlay configurations after the clus You do not need to make any adjustments to the Cilium pack. + If you are using other CNIs, refer to the documentation of your selected CNI and configure it to make sure that it picks the NIC named `scbr-100` on your Edge host. From 23619d3d0bbcd59240ceb6c832ece3f81057c1a3 Mon Sep 17 00:00:00 2001 From: Lenny Chen Date: Thu, 7 Dec 2023 15:52:57 -0800 Subject: [PATCH 27/27] docs: clarify kubevip static feature --- docs/docs-content/clusters/edge/networking/kubevip.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs-content/clusters/edge/networking/kubevip.md b/docs/docs-content/clusters/edge/networking/kubevip.md index 957988ca4b..34dcd0c078 100644 --- a/docs/docs-content/clusters/edge/networking/kubevip.md +++ b/docs/docs-content/clusters/edge/networking/kubevip.md @@ -7,7 +7,7 @@ sidebar_position: 30 tags: ["edge"] --- -You can use kube-vip to provide a virtual IP address for your cluster and use it to expose a service of type `LoadBalancer` on the external network. +You can use kube-vip to provide a virtual IP address for your cluster and use it to expose a service of type `LoadBalancer` on the external network. You can have kube-vip dynamically request IP addresses or use a static IP address. Kube-vip supports DHCP environments and can request additional IP address from the DHCP server automatically. Using kube-vip, you can expose services inside your cluster externally with a virtual IP address even if you do not have control over your host's network. Kube-vip can also act as a load balancer for both your control plane and Kubernetes services of type `LoadBalancer`.