Developing software systems that follow microservice architectural patterns has become the de-facto practice nowadays. Furthermore, moving from monolithic to microservices is a popular trend lately. Many issues, such as system scalability, manageability, and dependability, are addressed by the microservice design. It does, however, provide additional problems that should be looked after to maintain healthy and reliable software.
To deal with these problems, numerous tools have been created in recent years to make working with programs in a microservice environment easier for developers. Istio is among such tools that are utilized for microservice traffic management. It is effective in managing traffic among microservices in a Kubernetes cluster, as well as providing traceability and observability of interactions between them. This blog will help you learn about Istio, its benefits, architecture, challenges, and even the installation process. But before that, let’s learn about the challenges faced by organizations in microservices.
Challenges in Managing Microservices
Microservices are development and architectural strategy that divides business operations into independently deployable and managed services. Microservices are loosely connected system elements that interact with one another via APIs. Microservices have the advantage of being able to be updated separately from each other, facilitating smaller and more frequent deployments.
Maintaining a wide range of loosely connected services that change often and independently promotes agility, but it also poses many organizational challenges as given below:
- Having lots of decentralized and loosely connected components ends up creating lots of interaction complexities among them.
- For enabling customized routing for A/B testing without affecting clients inside the network, traffic management at every service endpoint becomes increasingly critical.
- When services are separated with various binary processes and perhaps built in multiple languages, protecting communication via encrypted data transfers becomes increasingly difficult.
- When services are distributed, controlling timeouts and coding errors between them can cause cascade failures and is much more complex to accomplish.
A lot of these issues can be handled right from the service code. Adjusting the service code, on the other hand, places a significant burden on you to correctly code solutions, and they need all the microservice owners to agree on the same solution approach to ensure uniformity. The solution to such issues are complicated, and relying on application code is error-prone.
Therefore, “service mesh” like Istio was introduced to ensure the removal of the burden of codifying solutions to these challenges, and also to help in the reduction of the operational expenses of maintaining microservices.
What is a Service Mesh
A service mesh is a programmable platform for monitoring, securing, and interconnecting microservices. It does not build communication among microservices; instead, it contains procedures and regulations that govern how microservices will interact on top of the existing networks. A service mesh is often neutral to the software’s languages and may be deployed to existing applications with little or no code.
This is how organizations gather metrics, trace communication, and encrypt communications without having to change the apps themselves. Since service mesh is a programmable framework, users can announce their objectives, and the mesh will make sure they are carried out throughout the services and network.
By eliminating complicated functionality that would otherwise have to be packaged in the program itself, a service mesh optimizes the application code, making it easier to design, maintain, and develop. Finally, a service mesh enables individuals to develop more quickly.
What is Istio?
Istio is an open-source service mesh that transparently overlays current application programs. Istio’s strong capabilities make it easier to protect, integrate, and manage services consistently and effectively. Istio enables load balancing, service-to-service identification, and supervision with minimal or no modifications to the service code. Its strong control plane comes with important characteristics such as:
- TLS encryption, robust identity-based verification, and authorization to ensure secure service-to-service interaction among clusters.
- Automated load balancing for HTTP, gRPC, WebSocket, etc. with extensive routing rules, error checking, failovers, and fault injections
- Access restrictions, rate limitations, and quotas are supported through a pluggable policy layer and API.
- All traffic inside the clusters receives automated metrics, records, and footprints, including cluster entry and egress.
Istio is built to be extensible and can manage a wide range of deployment requirements. Istio’s control plane operates on Kubernetes, and you may link VMs or other endpoints operating outside the Kubernetes to the mesh, extend it to additional clusters, and even link VMs or other endpoints with each other.
Istio is extended and leveraged by a broad community of developers, partners, integrators, and marketers for a wide range of situations. You may install Istio manually, or you can buy solutions that integrate and manage Istio automatically.
Features of Istio
1. Traffic Management
Routing traffic impacts efficiency and leads to improved deployment strategy, both inside and between clusters. Traffic management and routing rules in Istio make it easy to manage the flow of traffic and API requests among services. Istio makes it simple to set up critical activities like A/B testing, canary deployments, and staged rollouts using percentage-based traffic divides, as well as simplifying the setup of service-level characteristics.
Understanding behavior and performance gets more difficult as services become more sophisticated. For all interactions within a service mesh, Istio generates comprehensive telemetry. This telemetry allows operators to see service activity, allowing them to diagnose, maintain, and improve their applications.
The administrators will get complete insights into how monitored services are interacting using Istio. You get extensive and comprehensive service mesh observability through Istio.
3. Monitor Service Mesh
With Istio’s extensive tracking, monitoring, and logging tools, you can gain a thorough knowledge of how server performances are affecting things upstream.
4. Simplifying Load Balancing
For almost all of your traffic, utilize automatic load balancing, as well as sophisticated capabilities like client-based routing and canary rollouts. This will reduce the manual efforts and time spent balancing the load.
5. Security Capabilities
Safeguarding against man-in-the-middle attacks, auditing tools, and mutual TLS are all requirements for microservices. Istio comes with a complete safety solution that allows administrators to handle all these concerns. It protects business services and data with a strong identity, sophisticated policy, transparent TLS encryption, along with authentication, authorization, and audit (AAA) capabilities.
Istio’s security architecture is based on security-by-default, to provide in-depth protection that enables users to run security-conscious applications even over untrustworthy networks.
6. Istio Architecture
The architecture of Istio is majorly divided into a data plane and a control plane:
- The data plane is made up of sidecars that are smart proxies (Envoy). By collaborating with Mixer (overall policies and monitoring center), these proxies moderate and regulate all network traffic among microservices.
- The control plane is in charge of managing and configuring the proxies that are used for routing the traffic. Mixers are also configured by the control plane for enforcing regulations and gathering telemetry.
All the incoming traffic is either categorized as data plane traffic or control plane traffic in Istio. The communications which the application business logic sends and receives are referred to as data plane traffic. The installation and management-related messages transmitted among Istio components for programming the mesh’s behavior are referred to as control plane traffic. In Istio, traffic management only pertains to data plane traffic.
Istio utilizes an enhanced version of Envoy proxy for offering features and functionality required to interact with Istio’s control plane. Every service endpoint has Envoy installed as a sidecar and this provides a control point for Istio to collect metrics, manage traffic, assess policies, along with secure data transmission.
The only Istio component that communicates with control plane traffic is the Envoy proxy. Istio can extract a plethora of information regarding traffic behavior as characteristics thanks to this sidecar deployment. These properties may then be used by Istio in Mixer to enforce policy choices and communicate them to monitoring systems to reveal details about the mesh’s activity. An individual can also use the sidecar proxy approach for adding Istio features to an existing deployment without having to rewrite or redesign it. Benefits added by Envoy proxies to Istio service mesh are:
- Features for traffic control include fine-grained traffic management and extensive route principles for HTTP, gRPC, WebSocket, and TCP data.
- Setting up retries, failovers, circuit breakers, etc. are all part of network resilience.
- It utilizes the configuration API to implement security regulations, as well as access control and rate limitation.
The mixer is a component that is platform agnostic. The Mixer gathers telemetry data from the Envoy proxy as well as other applications and implements access control and usage restrictions throughout the service mesh. Request-level characteristics are extracted by the proxies and sent to Mixer for assessment.
The mixer has a plug-in model that is adaptable. Istio can communicate with a wide range of host environments and infrastructure backends. It can also hide details from the Envoy proxy and Istio-managed services.
Pilot offers Envoy sidecars authentication services, traffic management features for smart routing, and resilience (timeouts, retries, circuit breakers, etc.).
Pilot transforms behavior-controlling high-level routing rules to Envoy-specific settings and promotes them to the sidecars at the time of execution. Pilot also isolates platform-specific service discovery techniques and combines them into a common format that can be consumed by any Envoy API-compliant sidecar.
Citadel’s built-in identification and credentials management allow organizations to have a robust service-to-service and end-user identification. Citadel could be used in the service mesh for upgrading unencrypted traffic and it also allows operators to impose regulations based on the service identification rather than the more volatile layer 3 and layer 4 network identities. You may use Istio’s authorization functionality to manage who can access your services.
The galley is responsible for handling configuration validation, ingestion, processing, and dissemination. The Galley is in charge of Istio’s setup and, as a result, it shields the other Istio elements to obtain the crucial data from one of the underlying platforms, such as Kubernetes.
How Do Istio, Envoy, and Kubernetes Work Together?
Knowing both Envoy and Kubernetes is essential for understanding Istio and its architecture. It’s not a case of Istio vs. Envoy or Istio vs. Kubernetes because they frequently collaborate to ensure that a microservices-based containerized system runs well.
For instance, both the control plane and data plane are included in service mesh like Istio. Istio’s data plane is an enhanced version of Envoy. In the Istio service mesh, Envoy handles all inbound and outgoing traffic.
On the other hand, Kubernetes is an open-source Container orchestration platform that automates and orchestrates many of the manual procedures required in the deployment and scaling process of container-based applications. Using Istio and Kubernetes together is popular among developers, even though Istio is platform-independent. Therefore, it can be used on a wide range of platforms:
Istio can be installed by using a Helm chart, Kubernetes YAML files, or an Istio Operator. However, we will discuss installing Istio using the Kubernetes YAML files as it is the quickest and most efficient way.
1. Downloading Istio Release
First of all, download the most recent Istio release. All the new releases are found on the Istio releases page that is available on the official istio.io website with proper directions for installing. For downloading the latest version (v1.10.2), type the below-mentioned command into your terminal:
$ curl -L https://git.io/getLatestIstio | ISTIO_VERSION=1.3.0 sh –
$ cd istio-1.3.0
2. Setting Up the CLI
Before you can continue, you must first set up the Istio command-line interface (CLI). Istioctl is the command-line interface for Istio. You can install it on your personal development infrastructure. To do so, add istioctl to your PATH environment variable after downloading it by running the following command:
$ export PATH=$PWD/bin:$PATH
3. Verifying Kubernetes Cluster
Istio has needs for Kubernetes capabilities which are only accessible in specific versions of Kubernetes. To ensure that your Kubernetes cluster satisfies the criteria for Istio, you can utilize the istioctl utility:
$ istioctl verify-install
4. Installing Istio Control Plane
Before installing the Istio control plane, an individual first have to install the needed Istio CRDs (Custom Resources Definition) using the below-given command:
$ for i in install/kubernetes/helm/istio-init/files/crd*yaml; \
do kubectl apply -f $i; done
Right after installing the CRDs, you can use the istio-demo.yaml Kubernetes resource to install Istio demo profile:
$ kubectl apply -f install/kubernetes/istio-demo.yaml
Wait for some time before running the command for verifying the install to ensure that the installation went smoothly:
$ istioctl verify-install -f install/kubernetes/istio-demo.yaml
If an error message displays on the screen, restart the verify-install command. If your installation is successful, you might see the message as shown below:
Checked 28 crds
Checked 9 Istio Deployments
Istio is installed successfully
Hope you have learned now how Microservices can split business activities into deployable and managed services that may be deployed independently. Microservices are a bunch of loosely connected system elements that interact with one another via APIs. However, managing a diverse set of loosely connected services that change often and independently improves agility, comes with a slew of organizational challenges.
Therefore, “service mesh” like Istio was introduced to overcome these challenges and reduce the operational expenses of maintaining microservices. The strong capabilities of Istio make it easier to protect, integrate, and manage services consistently and effectively. So far, the blog must have helped you learn about Istio in detail, its features and architecture, and most importantly, its installation process.