From Zero to Istio Ambient + Argo CD on KinD in 15 Minutes!
May 30, 2024
Alex Ly
How long does it take to configure your first local development environment, sidecarless service mesh, and GitOps workflow?
How about 15 minutes? Give us that much time and we’ll give you an ephemeral testbed to explore the benefits of the new architecture mode in Istio, deploy a few applications, and validate zero-trust with minimal effort! We’ll host all of this on a local kind cluster to keep the setup standalone and as simple as possible.
Purpose of This Tutorial
The main goal of this tutorial is to showcase how Istio Ambient architecture components can be integrated into a GitOps workflow, with Argo CD being our tool of choice. We’ll guide you through the installation of Argo CD, Gloo Platform, and Istio Ambient, and then validate that service-to-service communication is automatically secured using mTLS.
Would you prefer to perform this exercise on a public cloud rather than a local KinD cluster? In the coming weeks, we’ll share alternative versions of this tutorial.
For this exercise, we’re going to do all the work on your local workstation. All you’ll need to get started is a Docker-compatible environment such as Docker Desktop, plus the CLI utilities kubectl, kind. Make sure these are all available to you before jumping into the next section.
Install KinD
To install kind simply run the following:
kind create cluster
Verify that the cluster has been created:
kubectl config get-contexts
The output should look similar to below:
% kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* kind-kind kind-kind kind-kind
Reminder if you want a specific version of Istio or to use the officially supported images provided by Solo.io, get the Hub value from the Solo support page for Istio Solo images. The value is present within the Solo.io Istio Versioning Repo key section.
Otherwise, we can use the upstream Istio community image as defined.
Configure the Kubernetes Gateway API CRDs on the cluster, we will need these to deploy components like the Waypoint proxy:
Note that in order to enable ztunnel interception, all that is required is the istio.io/dataplane-mode: ambient label on the workload namespace. The Argo application is already configured with this label, you can verify with the following command:
kubectl get namespace client -oyaml
kubectl get namespace httpbin -oyaml
You can check to see that the applications have been deployed:
kubectl get pods -n client && \
kubectl get pods -n httpbin
Notice that there are no sidecars have been configured for our apps, so no restarts required!
% kubectl get pods -n client && \
kubectl get pods -n httpbin
NAME READY STATUS RESTARTS AGE
sleep-9454cc476-fd8vw 1/1 Running 0 15s
NAME READY STATUS RESTARTS AGE
httpbin-698cc5f69-h4v7p 1/1 Running 0 9s
exec into sleep client and curl httpbin /get endpoint to verify mTLS
If you’d like to cleanup the work you’ve done, simply delete the kind cluster where you’ve been working.
kind delete cluster
Learn More
In this blog post, we explored how you can get started with Istio Ambient and Argo CD on your own workstation. We walked step-by-step through the process of standing up a KinD cluster, configuring the new Istio Ambient architecture, installing a couple applications, and then validating zero trust for service-to-service communication without injecting sidecars! All of the code used in this guide is available on github.
Istio Ambient is completely open source and free to use, however a Gloo Mesh Core subscription offers even more value to users who require:
Full Support with 24×7 Enterprise SLAs
Long term N-4 support
Hardened images
Architectural guidance and production readiness review
Istio lifecycle management tooling
Ops dashboard for management, monitoring, and insights
Telemetry integration using OTEL
For more information, check out the following resources: