Istio – An open platform to connect, manage, and secure microservices
github.com
github.com
- Automatic load balancing for HTTP, gRPC, WebSockets, and TCP traffic.
- Fine-grained control of traffic behaviour with rich routing rules, retries, fail-overs, and fault injection.
- A pluggable policy layer and configuration API supporting access controls, rate limits and quotas.
- Automatic metrics, logs, and traces for all traffic within a cluster, including cluster ingress and egress.
- Secure service-to-service communication in a cluster with strong identity-based authentication and authorization.
Istio on its own is powerful and flexible. It can also be hard to understand, setup, and manage, plus can be brittle.
(disclaimer: I'm co-founder of Vamp.io, a canary test & release system for DevOps teams that works with both HAProxy and Istio)
What Istio imho misses is a user-friendly way of setting up, managing and automating Istio configurations for microservices topologies to quickly achieve automated canary-releasing and A/B testing pipelines. Call Vamp a canary-releasing and A/B testing “control plane” for Istio/K8s if you will.
Basically the potential of service-meshes like Istio lies in "driving" it from higher-level metric/KPI-based automation systems.
We wrote several blog-posts on how to make use of Istio, starting here: https://medium.com/vamp-io/taming-istio-76fab339f685 (more blogs on Istio can be found here https://medium.com/vamp-io/tagged/istio)
Hopefully this gives some more insights in what Istio is, what it isn't, and how you can leverage it in your pipelines and architectures.
I know it's a big corporate product, but this is a sign of bad project management, imho. At the very least they could offer to let a community member go through and clean it up if they won't do it themselves.
There are 195 issues marked stale going back two years.
IOW, it's popular open source, the Github issue tracker is going to have a lot of noise. What would a community member do that the stale bot isn't doing? What open source project comparable to Kubernetes' scope and interest has an open tracker that exemplifies what you seek?
Check this, +4600 issues that were never addressed, just ignored https://github.com/kubernetes/kubernetes/issues?page=5&q=lab...
I see that it hooks into micro/services communication, but why do we need that? isnt policies enforced by cni plugins? and can microservices communicate already with k8s and mesos default setups?
is istio an network abstraction layer for k8s and mesos? why would anyone want that, is there anybody who changes scheduling runtimes often?
I'd highly recommend reading the docs if you haven't already to get a better overview.
It allows you to use kubernetes manifest to centrally control policies such as: - Canary load balancing (pushing a certain percentage of the traffic to a canary release) - TLS Mutual Authentication - Retries with exponential backoff - Circuit breakers - Instrumenting your traffic for distributed tracing (e.g. with Jaeger) - Adding your own custom HTTP headers
All of that is transparent to your microservice. This comes instead of having to repeat the service mesh logic that does everything above in each microservice. From the microservice 's perspective they're just sending simple traffic without implementing retries, circuit breakers, HTTPS or instrumentation. Istio takes care of all the rest using sidecars and and ingress controllers.
- they're moving "legacy" infrastructure off EC2 or similar onto Kubernetes and their service discovery stack is already in place. They end up bypassing cluster IPs and dealing directly with pod IPs. - they're starting with Istio or something similar from the get go because the native service discovery is hard to grok and leaves out a lot of the nice things that Istio gets you for free (once you've set it up)
There's lots of overlap, but I've not heard of anyone making a strong argument for the native service discovery.
I've seen plenty of those from smaller startups.
Native service discovery works a lot better than using pod IPs, which are intended to be transient.
A standard ClusterIp service includes DNS records by default and it's good enough for simple use cases.
Why the heck are they even using Kubernetes then? Just deploy a bunch of docker containers with the autorestart flag.
This is terrible design.
If you need pod-direct accessibility, the StatefulSet headless service feature will give each pod a unique DNS name and auto-update it when the pod IPs change.
That said, legacy migration into Kubernetes was WAY Oversold by some.
"Istio is the control plane and Envoy is the data plane"
"Ultimately, the goal of a control plane is to set policy that will eventually be enacted by the data plane."
With Istio - 1st pod takes 60% of traffic, second takes 30%, and last two take 5% each
With Istio - 1st pod takes users from /foo, second from /baz, third with user-agent forby and fourth with user agent kirby
Just some very simple examples. Istio has many more capabilities
It does this by using little out-of-process agents (Envoy) to sit next to your application as a sidecar. All application network flows go through the sidecars (which are localhost).
Istio is the config engine for all these sidecars, and for the overall gateway to your clusters. They call this a service mesh.
Istio in theory has little to do with Kubernetes or Mesos, except that it intitially assumed everyone will be running apps in Kubernetes (because Istio is from google). But It is designed to be independent of k8s as it can run with Mesos or Cloud Foundry.
Some example use cases:
1. Configuring (mutual) TLS for apps so each app doesn’t have to. This is huge, as keypair handling is a major point of risk and annoyance.
2. Auto-renewing/installing (mutual) TLS certificates across an entire set of apps
3. Intercepting and re-routing network flows for A/B testing , traffic shedding, or failure tolerance (circuit breaking)
4. Global load balancing with more ability to tweak the algorithm (beyond just DNS)
5. Tracing / visibility of application network flows across a WAN for debugging
Is it necessary? No. Is it useful? Yeah, it can be.
0. https://github.com/nginxinc/nginmesh#important-project-notic...
In practice, Istio is pretty complex and not for the faint of heart. You can think of Istio and its cousins (Linkerd, Consul Connect, etc) as the spiritual successors of the original Netflix OSS stack and Finagle.
What Istio does is replace all that with several components. The foundation is the Envoy proxy which runs as a sidecar to all of your pods and handles all the network traffic, providing much better performance, more load-balancing algorithms, advanced routing, retries, rate limiting, observability and tracing (at protocol level), grpc/http2 in both directions, TLS management, traffic shadowing, and custom filters that you can use to do whatever you want with the traffic.
There are also several "control plane" components which actually do the wiring and config management and work in the background. There are several alternatives in this space like Linkerd, Consul Connect, Kong, and even Nginx and Haproxy getting into it. Some are focused only on Kubernetes while others let you communicate across clusters and standalone VMs.
We add dns names for cluster internal communication through coredns templates to this api gateway. https://opensource.zalando.com/skipper/kubernetes/east-west-... You can adapt it step by step and stop without a bid all in approach as service mesh vendors promote.
If you have not enough you can get even more advanced and add hpa by requests per second.
We use all of these in >50 production clusters with regular shop and order traffic far beyond 10k requests a second. We are interested in features, but even more in stability. We are interested in the community and will fix most of the issues you will show us to make errors less likely happen for us, too. We don’t sell software nor support, that’s why we have less advertisements and don’t show up on every kubecon.
I hope to read you in our community channels: https://github.com/zalando/skipper/blob/master/readme.md#com...
Good podcast episode about Hashicorp today: https://softwareengineeringdaily.com/2019/02/04/scaling-hash...
One of the great things about Istio is that it is a super interesting and informative way to better understand the Kubernetes, Docker, Helm stack.
When I first started learning Kubernetes it wasn't clear to me how a small startup or company could leverage the power of Kubernetes because in reality you need some scale to make it worthwhile.
However, once you can play with, observe and better understand some application infrastructure which sits on top of Kubernetes like Istio the light goes on in your head and things get much more interesting.
Here is a really nice short simple introduction to Istio
https://www.youtube.com/channel/UC-zVlo1F3mUbExQ96fABWcQ
And here are the playlists...
https://www.youtube.com/channel/UC-zVlo1F3mUbExQ96fABWcQ/pla...
It’s great if you know it’s codebase. Not for general case.
That interests me, while I know nothing about istio, I'd love to have something like his for me personally, if I understand correctly this could centrally manage certificates used as password and their management?
We fell for the hype and tried running ISTIO for a production workload and spent months trying to get it working with little success. Our use case was to load balance gRPC traffic amongst a small number of services on K8S. Regardless of which load balancing algorithm we used or the amount of traffic that was pushed at it we could not get ISTIO to actually spread the traffic in any sort of reasonable pattern. For example, if we had 8 containers running 4 would get a ton of traffic, 2 would get a small amount, and 2 would just have heartbeats.
We tried to get help, but the RocketChat channel was a ghost town and got little response on the Google group. Lots of people asking questions but no one answering. Some friends at Google told us there's an invite-only Slack channel, but we could never figure out what secret incantation we would need to do to get access there. Evidently only people at Google, IBM and Lyft are allowed into that one.
I'll contrast this to the LinkerD2 (linkerd.io) project. We ripped out ISTIO and installed LinkerD2 and it just worked. We didn't have to spend days hand writing YAML files to configure our VirtualServices, DestinationRules, Gateways, and ServiceEntries. One command and the whole thing was installed and running. We injected the sidecar with their cool CLI utility and boom we had a service mesh that actually load balanced gRPC properly. The LinkerD2 dashboard is a very powerful tool to visualize how your traffic is being routed, response times, success rates, etc. When we had questions, we could pop into the LinkerD2 Slack and someone from the team got right back to us with suggestions and sincere offers to help. The CEO of Buoyant even reached out personally to us, a fledgling Miami startup.
We also had issues where ISTIO would route requests to the wrong micro-service at random. We would run the same request multiple times and get different results every time. After moving to LinkerD2, those issues completely disappeared.
LinkerD2 is still a very new project, but as far as we have experienced, it is far more production ready than ISTIO. I can only imagine how far along LinkerD2 would be if it was given a tenth of the resources that are pushing ISTIO.
Our experience was back in the Fall of last year, but we tried ISTIO again last week and had the exact same results on a new installation. Once again, we had to pull ISTIO out and put LinkerD in and were able to get the system functioning immediately.
ISTIO did do a great job of load balancing HTTP/HTTPS traffic, it's just gRPC that is a long way off from being ready for prime time. Maybe if you have an army of consultants at your disposal it will work for you, but as a startup I'd stay away.
With few caveats
- Can become a configuration nightmare if not managed properly
- Not as sophisticated as Istio
On the positive side
- There won't be a lot of moving parts as in Istio.
- Envoy has excellent documentation for debugging
- Get things done with all the perks of Envoy
Although my team is evaluating Istio, currently we are using this to keep things minimal.
Istio seems to be used in production a number of places.
Edit: also node red seems to be more about coding and istio seems to be more about configuration.