Install sidecar service meshes with Helm
Use Helm to deploy a sidecar service mesh to your Gloo Mesh cluster.
Review the following information about the Istio control plane setup in this guide:
- This installation guide installs a production-level Solo distribution of Istio, a hardened Istio enterprise image. For more information, see About the Solo distribution of Istio.
- For more information about using Istio Helm charts, see the Istio documentation.
Single cluster
Install a sidecar mesh in a single cluster environment.
Step 1: Prepare the cluster environment
Set up the following tools and environment variables.
Set environment variables for the Solo distribution of Istio that you want to install. You can find these values in the Istio images built by Solo.io support article. For more information, see the Solo distribution of Istio overview.
Be sure to review the following known Istio version restrictions.
In Gloo Mesh version 2.6 and later, ambient mode requires the Solo distribution of Istio version 1.22.3 or later (
1.22.3-solo
). In Gloo Mesh version 2.7 and later, multicluster setups require the Solo distribution of Istio version 1.24.3 or later (1.24.3-solo
), including the Solo distribution ofistioctl
.
In Istio 1.22.0-1.22.3, theISTIO_DELTA_XDS
environment variable must be set tofalse
. For more information, see this upstream Istio issue. Note that this issue is resolved in Istio 1.22.4.
Istio 1.20 is supported only as patch version1.20.1-patch1
and later. Do not use patch versions 1.20.0 and 1.20.1, which contain bugs that impact several Gloo Mesh features that rely on Istio ServiceEntries.Install
istioctl
, the Istio CLI tool.Add and update the Helm repository for Istio.
Step 2: Install CRDs
Deploy the Istio CRDs and a sidecar control plane to your cluster.
Save the name and kubeconfig context of a workload cluster in the following environment variables. Each time you repeat the steps in this guide, you change these variables to the next workload cluster’s name and context.
Install the Istio CRDs.
Create the
istio-config
namespace. This namespace serves as the administrative root namespace for Istio configuration.OpenShift only: Install the CNI plug-in, which is required for using Istio in OpenShift.
Step 3: Install the Istio control plane
Prepare a Helm values file for the
istiod
control plane. You can further edit the file to provide your own details for production-level settings.Download an example file,
istiod.yaml
, and update the environment variables with the values that you previously set. The provided Helm values files are configured with production-level settings; however, depending on your environment, you might need to edit settings to achieve specific Istio functionality.Optional: Trust domain validation is disabled by default in the profile that you downloaded in the previous step. If you have a multicluster mesh setup and you want to enable trust domain validation, add all the clusters that are part of your mesh in the
meshConfig.trustDomainAliases
field, excluding the cluster that you currently prepare for the istiod installation. For example, let’s say you have 3 clusters that belong to your mesh:cluster1
,cluster2
, andcluster3
. When you install istiod incluster1
, you set the following values for your trust domain:Then, when you move on to install istiod in
cluster2
, you settrustDomain: cluster2
andtrustDomainAliases: ["cluster1","cluster3"]
. You repeat this step for all the clusters that belong to your service mesh. Note that as you add or delete clusters from your service mesh, you must make sure that you update thetrustDomainAliases
field for all of the clusters.
Create the
istiod
control plane in your cluster.After the installation is complete, verify that the Istio control plane pods are running.
Example output:
Multicluster
Install a multicluster sidecar service meshes with Helm by using Solo.io’s multicluster peering capability.
Considerations
Before you install a multicluster sidecar mesh, review the following considerations and requirements.
Version and license requirements
- In Gloo Mesh version 2.7 and later, multicluster setups require the Solo distribution of Istio version 1.24.3 or later (
1.24.3-solo
), including the Solo distribution ofistioctl
. This distribution requires a Gloo Mesh Enterprise license. If you do not have one, contact an account representative.
Components
In the following steps, you install the Istio ambient components in each workload cluster to successfully create east-west gateways and establish multicluster peering, even if you plan to use a sidecar mesh. However, sidecar mesh setups continue to use sidecar injection for your workloads. Your workloads are not added to an ambient mesh.
Revision and canary upgrade limitations
The upgrade guides in this documentation show you how to perform in-place upgrades for your Istio components, which is the recommended upgrade strategy.
Step 1: Prepare the cluster environments
Set your Gloo Mesh Enterprise license key as an environment variable. If you do not have one, contact an account representative. If you prefer to specify license keys in a secret instead, see Licensing.
Set environment variables for the Solo distribution of Istio that you want to install. You can find these values in the Ambient section of the Istio images built by Solo.io support article.
Download the Solo distribution of Istio binary and install
istioctl
, which you use for multicluster linking and gateway commands.- Navigate to the storage repository for the Solo distribution of Istio binaries.
- Download the
tar.gz
file for your system, such asistio-1.24.2-solo-osx-amd64.tar.gz
. - Extract the downloaded
tar.gz
file. - Navigate to the package directory and add the
istioctl
client to your system’sPATH
. - Verify that the
istioctl
client runs the Solo distribution of Istio that you want to install.Example output:
- Navigate to the storage repository for the Solo distribution of Istio binaries.
- If you use Google Kubernetes Engine (GKE) clusters, create the following
ResourceQuota
in theistio-system
namespace of each cluster. For more information about this requirement, see the community Istio documentation.
Step 2: Create a shared root of trust
Each cluster in the multicluster setup must have a shared root of trust. This can be achieved by providing a root certificate signed by a PKI provider, or a custom root certificate created for this purpose. The root certificate signs a unique intermediate CA certificate for each cluster.
Step 3: Install CRDs
Save the name and kubeconfig context of a cluster where you want to install Istio in the following environment variables. Each time you repeat the steps in this guide, you change these variables to the next workload cluster’s name and context.
Install the
base
chart, which contains the CRDs and cluster roles required to set up Istio.Apply the CRDs for the Kubernetes Gateway API to your cluster, which are required to create components such as waypoint proxies for L7 traffic policies, gateways with the
Gateway
resource, and more.
Step 4: Deploy the Istio control plane
Create the
istiod
control plane in your cluster.Install the Istio CNI node agent daemonset. Note that although the CNI is included in this section, it is technically not part of the control plane or data plane.
Verify that the components of the Istio control plane are successfully installed. Because the Istio CNI is deployed as a daemon set, the number of CNI pods equals the number of nodes in your cluster. Note that it might take a few seconds for the pods to become available.
Example output:
Step 5: Deploy the Istio data plane
Install the ztunnel daemonset. Note that this component is required to successfully peer clusters together.
Verify that the ztunnel pods are successfully installed. Because the ztunnel is deployed as a daemon set, the number of pods equals the number of nodes in your cluster. Note that it might take a few seconds for the pods to become available.
Example output:
Label the
istio-system
namespace with the cluster’s network name, which you previously set to your cluster’s name in theglobal.network
field of theistiod
installation. The Istio control plane uses this label internally to group pods that exist in the same L3 network.Create an east-west gateway in the
istio-eastwest
namespace. An east-west gateway facilitates traffic between services in each cluster in your multicluster mesh.In a multicluster mesh, the east-west gateway serves as a ztunnel that allows traffic requests to flow across clusters, but it does not modify requests in any way. To control in-mesh traffic, you can instead apply policies to waypoint proxies that you create for a workload namespace.- You can use the following
istioctl
command to quickly create the east-west gateway. - To take a look at the Gateway resource that this command creates, you can include the
--generate
flag in the command.In this example output, thegatewayClassName
that is used,istio-eastwest
, is included by default when you install Istio in ambient mode.
- You can use the following
Step 6: Repeat steps 3 - 5 for each cluster
For each cluster that you want to include in the multicluster mesh setup, repeat steps 3 - 5 to install the CRDs, control plane, and data plane in each cluster. Remember to change the cluster name and context variables each time you repeat the steps.
Step 7: Link clusters
Linking clusters enables cross-cluster service discovery and allows traffic to be routed through east-west gateways across clusters.
Verify that the contexts for the clusters that you want to include in the multicluster mesh are listed in your kubeconfig file.
- In the output, note the names of the cluster contexts, which you use in the next step to link the clusters.
- If you have multiple kubeconfig files, you can generate a merged kubeconfig file by running the following command.
Using the names of the cluster contexts, link the clusters so that they can communicate. Note that you can either link the clusters bi-directionally or asymmetrically. In a standard bi-directional setup, services in any of the linked clusters can send requests to and receive requests from the services in any of the other linked clusters. In an asymmetrical setup, you allow one cluster to send requests to another cluster, but the other cluster cannot send requests back to the first cluster.
Note that these istio-remote
gateways are used for cluster peering only, and do not create deployments or services. Traffic requests between linked clusters are routed through the istio-eastwest
gateways.
For example, you can list the gateways in a cluster to see both the remote and east-west gateways.
However, if you list the services in the same namespace, only a service for the east-west gateway exists.