A service mesh is a configurable infrastructure layer for microservices-based applications that makes communication between service instances flexible, reliable, and fast. It provides features such as traffic management, service discovery, load balancing, and security. It typically uses a sidecar proxy for each service instance to handle communication between service instances and to provide these features. Examples of service meshes include Istio, Linkerd, and Envoy.