linkerd2
Ultralight, security-first service mesh for Kubernetes. Main repo for Linkerd 2.x.
Top Related Projects
Connect, secure, control, and observe services.
Cloud-native high-performance edge/middle/service proxy
Dapr is a portable, event-driven, runtime for building distributed applications across cloud and edge.
The Cloud Native Application Proxy
eBPF-based Networking, Security, and Observability
🦍 The Cloud-Native API Gateway and AI Gateway.
Quick Overview
Linkerd is an open-source service mesh that provides a transparent way to add observability, security, and reliability to microservices. It is designed to be a lightweight, language-agnostic, and highly scalable solution for managing service-to-service communication in modern cloud-native applications.
Pros
- Observability: Linkerd provides detailed metrics, tracing, and logging for all service-to-service communication, enabling developers to quickly identify and resolve issues.
- Security: Linkerd automatically encrypts all traffic between services and can enforce mutual TLS authentication, ensuring secure communication.
- Reliability: Linkerd's load balancing, retries, and circuit breaking features help improve the overall reliability and resilience of the application.
- Ease of Use: Linkerd is designed to be easy to install and configure, with a simple command-line interface and a well-documented deployment process.
Cons
- Complexity: While Linkerd aims to be lightweight, the overall complexity of a service mesh architecture can be a challenge for some teams, especially those new to the concept.
- Performance Overhead: The additional layer of abstraction introduced by Linkerd can result in a small performance overhead, which may be a concern for latency-sensitive applications.
- Vendor Lock-in: By choosing Linkerd, teams may become dependent on the project and its ecosystem, which could lead to vendor lock-in concerns.
- Limited Language Support: Linkerd primarily focuses on supporting popular languages and frameworks, but may have limited support for less common or niche technologies.
Getting Started
To get started with Linkerd, follow these steps:
- Install the Linkerd CLI:
curl -sL https://run.linkerd.io/install | sh
- Verify the installation:
linkerd version
- Install Linkerd into your Kubernetes cluster:
linkerd install | kubectl apply -f -
- Verify the installation:
linkerd check
- Inject the Linkerd proxy into your application:
kubectl get deploy -n default -o yaml | linkerd inject - | kubectl apply -f -
- Explore the Linkerd dashboard:
linkerd dashboard
For more detailed instructions and advanced configuration options, please refer to the Linkerd documentation.
Competitor Comparisons
Connect, secure, control, and observe services.
Pros of Istio
- Istio provides a more comprehensive set of features, including traffic management, security, and observability, making it a more robust and feature-rich solution.
- Istio has a larger community and ecosystem, with more contributors and a wider range of integrations and plugins.
- Istio is more actively developed and maintained, with more frequent updates and bug fixes.
Cons of Istio
- Istio has a higher complexity and learning curve, which can make it more challenging to set up and configure, especially for smaller projects.
- Istio has a higher resource footprint, requiring more CPU and memory resources to run, which can be a concern for resource-constrained environments.
- Istio's performance can be slower than Linkerd's, especially for simple use cases, due to its more comprehensive feature set.
Code Comparison
Linkerd:
apiVersion: linkerd.io/v1alpha2
kind: ServiceProfile
metadata:
name: web
spec:
routes:
- condition:
method: GET
pathRegex: /api/.*
name: api
- condition:
method: GET
pathRegex: /static/.*
name: static
Istio:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: web
spec:
hosts:
- web
http:
- match:
- uri:
regex: /api/.*
route:
- destination:
host: api
- match:
- uri:
regex: /static/.*
route:
- destination:
host: static
Cloud-native high-performance edge/middle/service proxy
Pros of Envoy
- Envoy is a more mature and widely-adopted project, with a larger community and more contributors.
- Envoy has a broader set of features and capabilities, including support for a wide range of protocols and load balancing algorithms.
- Envoy is designed to be highly scalable and performant, making it a good choice for large-scale, high-traffic applications.
Cons of Envoy
- Envoy has a steeper learning curve compared to Linkerd, as it is a more complex and feature-rich project.
- Envoy may have a higher resource footprint than Linkerd, as it is a more heavyweight solution.
Code Comparison
Linkerd:
impl Proxy {
pub fn new(config: Config) -> Self {
Proxy {
config,
runtime: Runtime::new(),
metrics: Metrics::new(),
tracing: Tracing::new(),
// ...
}
}
pub fn run(&mut self) {
self.runtime.block_on(async {
self.tracing.init();
self.metrics.init();
// ...
});
}
}
Envoy:
class Envoy : Logger::Loggable<Logger::Id::main> {
public:
Envoy(OptionsImpl& options, Event::TimeSystem& time_system,
Thread::BasicLockProvider& lock_provider, Stats::Store& stats_store,
Filesystem::Instance& file_system, Api::Api& api,
Server::ComponentFactory& component_factory,
std::unique_ptr<Server::HotRestartInterface> restarter)
: options_(options),
time_system_(time_system),
lock_provider_(lock_provider),
stats_store_(stats_store),
file_system_(file_system),
api_(api),
component_factory_(component_factory),
restarter_(std::move(restarter)) {}
// ...
};
Dapr is a portable, event-driven, runtime for building distributed applications across cloud and edge.
Pros of Dapr
- Dapr provides a wide range of built-in components for common tasks like state management, pub/sub, and more, making it easier to build distributed applications.
- Dapr supports multiple programming languages, allowing developers to use their preferred language for different services.
- Dapr's service invocation and binding capabilities simplify the integration of services, reducing the complexity of distributed systems.
Cons of Dapr
- Dapr's complexity and additional layer of abstraction may introduce overhead and performance concerns in some use cases.
- The Dapr ecosystem is relatively newer compared to Linkerd, which may have a more mature and established community.
- Dapr's learning curve may be steeper for developers who are not familiar with the concept of a service mesh or sidecar architecture.
Code Comparison
Linkerd2 (Proxy Configuration):
apiVersion: linkerd.io/v1beta1
kind: Proxy
metadata:
name: default
spec:
proxyImage:
imageName: ghcr.io/linkerd/proxy
version: stable-2.12.1
proxyInitImage:
imageName: ghcr.io/linkerd/proxy-init
version: v2.1.0
Dapr (Component Configuration):
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: statestore
spec:
type: state.redis
version: v1
metadata:
- name: redisHost
value: localhost:6379
- name: redisPassword
value: ""
The Cloud Native Application Proxy
Pros of Traefik
- Traefik is a modern, fast, and easy-to-use reverse proxy and load balancer that simplifies the deployment and management of microservices.
- It provides automatic configuration and discovery of services, making it easy to integrate with various cloud providers and container orchestration platforms.
- Traefik offers a user-friendly web UI for monitoring and managing the proxy.
Cons of Traefik
- Traefik may have a steeper learning curve compared to Linkerd, especially for users new to reverse proxies and load balancers.
- The configuration of Traefik can be more complex, as it requires understanding various concepts like routers, middlewares, and services.
Code Comparison
Linkerd2 (Proxy Initialization):
let proxy = Proxy::new(
config.proxy.clone(),
config.identity.clone(),
config.tap.clone(),
config.dst_client.clone(),
config.metrics.clone(),
config.tracing.clone(),
config.drain.clone(),
config.admin.clone(),
config.outbound.clone(),
config.inbound.clone(),
config.dns_resolver.clone(),
config.event_buffer_capacity,
config.event_buffer_max_age,
);
Traefik (Entrypoint Configuration):
entryPoints:
web:
address: ":80"
websecure:
address: ":443"
http:
tls:
certResolver: myresolver
eBPF-based Networking, Security, and Observability
Pros of Cilium
- Cilium provides a more comprehensive solution for network and security policies, with support for advanced features like network load balancing and service mesh integration.
- Cilium has a strong focus on performance and scalability, making it a suitable choice for large-scale deployments.
- Cilium's integration with Kubernetes and other container orchestration platforms is more seamless, providing a more unified management experience.
Cons of Cilium
- Cilium has a steeper learning curve compared to Linkerd, requiring more configuration and setup to get started.
- Cilium's documentation, while comprehensive, may not be as beginner-friendly as Linkerd's.
- Cilium's resource requirements may be higher than Linkerd's, especially for smaller deployments.
Code Comparison
Linkerd (Proxy Configuration):
proxy:
image:
name: ghcr.io/linkerd/proxy
version: stable-2.12.1
resources:
cpu:
request: 100m
limit: 1
memory:
request: 20Mi
limit: 250Mi
Cilium (Daemon Set Configuration):
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: cilium
spec:
template:
spec:
containers:
- name: cilium
image: quay.io/cilium/cilium:v1.12.2
resources:
requests:
cpu: 100m
memory: 100Mi
limits:
cpu: 1
memory: 1Gi
🦍 The Cloud-Native API Gateway and AI Gateway.
Pros of Kong
- Kong provides a more comprehensive API management solution, including features like authentication, rate limiting, and transformations.
- Kong has a larger and more active community, with more third-party plugins and integrations available.
- Kong offers commercial support and enterprise-grade features, making it a more suitable choice for larger organizations.
Cons of Kong
- Kong has a steeper learning curve and requires more configuration compared to Linkerd.
- Kong's performance may be slightly lower than Linkerd's, as it has more features and functionality.
- Kong's open-source version has a more limited feature set compared to its commercial offerings.
Code Comparison
Here's a brief code comparison between Linkerd and Kong:
Linkerd (Proxy Configuration):
apiVersion: linkerd.io/v1alpha2
kind: Proxy
metadata:
name: default
spec:
proxyImage:
imageName: gcr.io/linkerd-io/proxy
version: stable-2.12.1
proxyInitImage:
imageName: gcr.io/linkerd-io/proxy-init
version: v2.1.0
Kong (Proxy Configuration):
apiVersion: kong.x-k8s.net/v1
kind: KongClusterPlugin
metadata:
name: rate-limiting
config:
minute: 20
hour: 500
policy: local
redis_host: redis.default.svc.cluster.local
redis_port: 6379
redis_password: ""
redis_database: 0
The Linkerd configuration sets up the proxy image and version, while the Kong configuration sets up a rate-limiting plugin with various parameters.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
Linkerd
:balloon: Welcome to Linkerd! :wave:
Linkerd is an ultralight, security-first service mesh for Kubernetes. Linkerd adds critical security, observability, and reliability features to your Kubernetes stack with no code change required.
Linkerd is a Cloud Native Computing Foundation (CNCF) project.
Repo layout
This is the primary repo for the Linkerd 2.x line of development.
The complete list of Linkerd repos is:
- linkerd2: Main Linkerd 2.x repo, including control plane and CLI
- linkerd2-proxy: Linkerd 2.x data plane proxy
- linkerd2-proxy-api: Linkerd 2.x gRPC API bindings
- linkerd: Linkerd 1.x
- website: linkerd.io website (including docs for 1.x and 2.x)
Quickstart and documentation
You can run Linkerd on any modern Kubernetes cluster in a matter of seconds. See the Linkerd Getting Started Guide for how.
For more comprehensive documentation, start with the Linkerd docs. (The doc source code is available in the website repo.)
Working in this repo
BUILD.md
includes general information on how to work in this repo.
We :heart: pull requests! See CONTRIBUTING.md
for info on
contributing changes.
Get involved
- Join Linkerd's user mailing list, developer mailing list, and announcements mailing list.
- Follow @Linkerd on Twitter.
- Join the Linkerd Slack.
Steering Committee meetings
We host regular online meetings for the Linkerd Steering Committee. All are welcome to attend, but audio and video participation is limited to Steering Committee members and maintainers. These meetings are currently scheduled on an ad-hoc basis and announced on the linkerd-users mailing list.
Code of Conduct
This project is for everyone. We ask that our users and contributors take a few minutes to review our Code of Conduct.
Security
See SECURITY.md for our security policy, including how to report vulnerabilities.
Linkerd undergoes periodic third-party security audits and we publish the results here.
License
Copyright 2023 the Linkerd Authors. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use these files except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
Top Related Projects
Connect, secure, control, and observe services.
Cloud-native high-performance edge/middle/service proxy
Dapr is a portable, event-driven, runtime for building distributed applications across cloud and edge.
The Cloud Native Application Proxy
eBPF-based Networking, Security, and Observability
🦍 The Cloud-Native API Gateway and AI Gateway.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot