Getting Started

This guide is intended for users who are new to Istio and lets you quickly evaluate Istio by installing the demo configuration profile.

If you are already familiar with Istio or interested in installing other configuration profiles or a more advanced deployment model, follow the installing with istioctl instructions instead.

  1. Set up your platform
  2. Download the release
  3. Install Istio
  4. Enable automatic sidecar injection
  5. Deploy the Bookinfo sample application

Set up your platform

Before you can install Istio, you need a cluster running a compatible version of Kubernetes. Istio 1.5 has been tested with Kubernetes releases 1.14, 1.15, 1.16.

Create a cluster by selecting the appropriate platform-specific setup instructions.

Some platforms provide a managed control plane which you can use instead of installing Istio manually. If this is the case with your selected platform, and you choose to use it, you will be finished installing Istio after creating the cluster, so you can skip the following instructions. For more information, see your platform service provider’s documentation.

Download and install Istio

Download the Istio release which includes installation files, samples, and the istioctl command line utility.

  1. Go to the Istio release page to download the installation file corresponding to your OS. Alternatively, on a macOS or Linux system, you can run the following command to download and extract the latest release automatically:

    $ curl -L https://istio.io/downloadIstio | sh -
    
  2. Move to the Istio package directory. For example, if the package is istio-1.5.0:

    $ cd istio-1.5.0
    

    The installation directory contains:

    • Installation YAML files for Kubernetes in install/kubernetes
    • Sample applications in samples/
    • The istioctl client binary in the bin/ directory. istioctl is used when manually injecting Envoy as a sidecar proxy.
  3. Add the istioctl client to your path, on a macOS or Linux system:

    $ export PATH=$PWD/bin:$PATH
    
  4. You can optionally enable the auto-completion option when working with a bash or ZSH console.

Install Istio

Follow these steps to install Istio using the demo configuration profile on your chosen platform.

  1. Install the demo profile

    $ istioctl manifest apply --set profile=demo
    
  2. Verify the installation by ensuring the following Kubernetes services are deployed and verify they all have an appropriate CLUSTER-IP except the jaeger-agent and jaeger-collector-headless services:

    $ kubectl get svc -n istio-system
    NAME                        TYPE           CLUSTER-IP       EXTERNAL-IP      PORT(S)                                                                                                                      AGE
    grafana                     ClusterIP      172.21.175.168   <none>           3000/TCP                                                                                                                     13s
    istio-egressgateway         ClusterIP      172.21.97.171    <none>           80/TCP,443/TCP,15443/TCP                                                                                                     17s
    istio-ingressgateway        LoadBalancer   172.21.176.181   169.45.251.236   15020:30598/TCP,80:32145/TCP,443:30492/TCP,15029:31754/TCP,15030:31106/TCP,15031:32379/TCP,15032:31237/TCP,15443:31060/TCP   17s
    istio-pilot                 ClusterIP      172.21.161.83    <none>           15010/TCP,15011/TCP,15012/TCP,8080/TCP,15014/TCP,443/TCP                                                                     28s
    istiod                      ClusterIP      172.21.137.226   <none>           15012/TCP,443/TCP                                                                                                            28s
    jaeger-agent                ClusterIP      None             <none>           5775/UDP,6831/UDP,6832/UDP                                                                                                   12s
    jaeger-collector            ClusterIP      172.21.227.125   <none>           14267/TCP,14268/TCP,14250/TCP                                                                                                12s
    jaeger-collector-headless   ClusterIP      None             <none>           14250/TCP                                                                                                                    12s
    jaeger-query                ClusterIP      172.21.94.208    <none>           16686/TCP                                                                                                                    12s
    kiali                       ClusterIP      172.21.192.82    <none>           20001/TCP                                                                                                                    11s
    prometheus                  ClusterIP      172.21.30.218    <none>           9090/TCP                                                                                                                     11s
    tracing                     ClusterIP      172.21.126.166   <none>           80/TCP                                                                                                                       11s
    zipkin                      ClusterIP      172.21.122.59    <none>           9411/TCP                                                                                                                     11s
    

    Also ensure corresponding Kubernetes pods are deployed and have a STATUS of Running:

    $ kubectl get pods -n istio-system
    NAME                                    READY   STATUS    RESTARTS   AGE
    grafana-5cc7f86765-lqdzk                1/1     Running   0          2m25s
    istio-egressgateway-97445fd58-vx9s9     1/1     Running   0          2m29s
    istio-ingressgateway-565b5cd49f-9knzt   1/1     Running   0          2m29s
    istio-tracing-8584b4d7f9-ft88q          1/1     Running   0          2m25s
    istiod-6476b4cb9b-8gfj2                 1/1     Running   0          2m41s
    kiali-8559969566-wm62d                  1/1     Running   0          2m24s
    prometheus-965cff5ff-pprnh              2/2     Running   0          2m24s
    

Enable automatic sidecar injection

A benefit of Istio is automatic sidecar injection, which allows your applications to work in the service mesh without modification. To take advantage of this feature, enable sidecar injection by adding the istio-injection=enabled label to the Kubernetes namespaces in which you plan to deploy your applications. For more information, see Istio sidecar injector.

$ kubectl label namespace <namespace> istio-injection=enabled

Alternatively, you can manually inject Envoy containers in your application pods before deploying them, using istioctl kube-inject:

$ istioctl kube-inject -f <your-app-spec>.yaml | kubectl apply -f -

Deploy an application or the Bookinfo sample

If you have an application ready to go, deploy it:

$ kubectl create -n <namespace> -f <your-app-spec>.yaml

Alternatively, deploy the Bookinfo sample to evaluate Istio’s features for traffic routing, fault injection, rate limiting, etc. Then, explore the various Istio tasks that interest you.

Next evaluation steps

After installing Istio and deploying an application, see the following topics to explore more Istio features:

Prepare for production deployment

Before you install and customize Istio for production use, see the following topics:

Engage with the community

We invite you to join our community and share your feedback and suggestions to improve Istio.

Uninstall Istio

The uninstall deletes the istio-system namespace and the resources in it, including any associated RBAC permissions. The uninstall command might generate errors about non-existent resources, which you can ignore:

$ istioctl manifest generate --set profile=demo | kubectl delete -f -
Was this information useful?
Do you have any suggestions for improvement?

Thanks for your feedback!