Install Istio in ambient mode
Use the Solo distribution of Istio to deploy Istio in ambient mode.
In Gloo Mesh version 2.7 and later, Solo has a new way of installing ambient meshes with the Gloo Operator.
For more information about the components that are installed in these steps, see the ambient components overview.
Considerations
Before you install an ambient mesh, review the following considerations and requirements.
Version requirements
- 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 Istio 1.22.0-1.22.3, the
ISTIO_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.
Single-cluster limitation
In Istio versions 1.23 and earlier, Istio in ambient mode is supported only for single clusters. Ambient mode in a multicluster environment where apps in different clusters can communicate through east-west routing as part of a single service mesh is not supported. However, you can still deploy separate ambient service meshes to multiple, individual workload clusters.
Multicluster routing with an ambient mesh is supported in the Solo distribution Istio 1.24 and later. To try it out, consider upgrading to Gloo Mesh version 2.7, which includes support for Istio 1.24.
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: Set up tools
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.
# Solo distrubution of Istio patch version # in the format 1.x.x, with no tags export ISTIO_VERSION=1.23.4 # Repo key for the minor version of the Solo distribution of Istio # This is the 12-character hash at the end of the repo URL: 'us-docker.pkg.dev/gloo-mesh/istio-<repo-key>' export REPO_KEY=<repo_key> # Solo distrubution of Istio patch version and Solo tag # Optionally append other Solo tags as needed export ISTIO_IMAGE=${ISTIO_VERSION}-solo # Solo distribution of Istio image repo export REPO=us-docker.pkg.dev/gloo-mesh/istio-${REPO_KEY} # Solo distribution of Istio Helm repo export HELM_REPO=us-docker.pkg.dev/gloo-mesh/istio-helm-${REPO_KEY}
Install
istioctl
, the Istio command line tool. Use the same version that you want to use to install your ambient mesh.curl -L https://istio.io/downloadIstio | ISTIO_VERSION=${ISTIO_VERSION} sh - cd istio-${ISTIO_VERSION} export PATH=$PWD/bin:$PATH
Check the platform-specific prerequisites for ambient to determine whether you must make any changes to your environment before you install an ambient mesh.
Step 2: Install CRDs
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.kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.1.0/standard-install.yaml
Install the
base
chart, which contains the CRDs and cluster roles required to set up Istio.
Step 3: Deploy the ambient 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 ambient 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.
kubectl get pods -A | grep istio
Example output:
istio-system istiod-85c4dfd97f-mncj5 1/1 Running 0 40s istio-system istio-cni-node-pr5rl 1/1 Running 0 9s istio-system istio-cni-node-pvmx2 1/1 Running 0 9s istio-system istio-cni-node-6q26l 1/1 Running 0 9s
Step 4: Deploy the ambient data plane
Install the ztunnel daemonset.
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.
kubectl get pods -A | grep ztunnel
Example output:
ztunnel-tvtzn 1/1 Running 0 7s ztunnel-vtpjm 1/1 Running 0 4s ztunnel-hllxg 1/1 Running 0 4s
Optional: To send requests to sample apps from outside your Gloo Mesh setup, you can deploy an Istio ingress gateway.
Create the
istio-ingress
namespace. Note that you might choose a different namespace, such asistio-gateways
. If so, be sure to change the namespace in subsequent steps.kubectl create ns istio-ingress
Create a Kubernetes service to expose the ingress gateway.
kubectl apply -f - <<EOF apiVersion: v1 kind: Service metadata: labels: app: istio-ingressgateway istio: ingressgateway name: istio-ingressgateway namespace: istio-ingress spec: ports: - name: http2 port: 80 protocol: TCP targetPort: 80 - name: https port: 443 protocol: TCP targetPort: 443 selector: app: istio-ingressgateway istio: ingressgateway type: LoadBalancer EOF
Deploy the Istio ingress gateway.
helm upgrade --install istio-ingressgateway oci://${HELM_REPO}/gateway \ --namespace istio-ingress \ --version ${ISTIO_IMAGE} \ -f - <<EOF autoscaling: enabled: false imagePullPolicy: IfNotPresent profile: ambient labels: app: istio-ingressgateway istio: ingressgateway service: type: None EOF
Verify that the ingress gateway pod has a status of
RUNNING
and that the load balancer service has an external address.kubectl get pods,svc -n istio-ingress
Example output:
NAME READY STATUS RESTARTS AGE istio-ingressgateway-665d46686f-nhh52 1/1 Running 0 106s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE istio-ingressgateway LoadBalancer 10.96.252.49 <externalip> 15021:32378/TCP,80:30315/TCP,443:32186/TCP,31400:30313/TCP,15443:31632/TCP 2m2s