emissary
open source Kubernetes-native API gateway for microservices built on the Envoy Proxy
Top Related Projects
open source Kubernetes-native API gateway for microservices built on the Envoy Proxy
Cloud-native high-performance edge/middle/service proxy
Connect, secure, control, and observe services.
The Cloud Native Application Proxy
Contour is a Kubernetes ingress controller using Envoy proxy.
🦍 The Cloud-Native API Gateway and AI Gateway.
Quick Overview
Emissary-ingress is an open-source Kubernetes-native API Gateway and Layer 7 load balancer built on the Envoy Proxy. It provides a powerful and flexible solution for managing ingress traffic, API management, and service mesh integration in Kubernetes environments.
Pros
- Highly configurable and extensible, supporting complex routing scenarios
- Seamless integration with Kubernetes, leveraging Custom Resource Definitions (CRDs)
- Built on Envoy Proxy, offering high performance and advanced traffic management features
- Supports modern protocols like gRPC, WebSockets, and HTTP/2
Cons
- Steeper learning curve compared to simpler ingress controllers
- Configuration can become complex for large-scale deployments
- Limited built-in observability features, often requiring additional tools
- Resource-intensive compared to lightweight alternatives
Getting Started
To install Emissary-ingress using Helm:
# Add the Datawire repository
helm repo add datawire https://app.getambassador.io
# Create namespace
kubectl create namespace emissary
# Install Emissary-ingress
helm install emissary-ingress datawire/emissary-ingress --namespace emissary
# Wait for the deployment to complete
kubectl wait --for condition=available --timeout=90s deploy -l app.kubernetes.io/instance=emissary-ingress -n emissary
To create a basic Mapping:
apiVersion: getambassador.io/v3alpha1
kind: Mapping
metadata:
name: example-mapping
spec:
hostname: "*"
prefix: /example/
service: example-service
Apply the Mapping:
kubectl apply -f example-mapping.yaml
For more detailed configuration and advanced features, refer to the official Emissary-ingress documentation.
Competitor Comparisons
open source Kubernetes-native API gateway for microservices built on the Envoy Proxy
Pros of emissary
- Actively maintained and regularly updated
- Extensive documentation and community support
- Seamless integration with Kubernetes environments
Cons of emissary
- Steeper learning curve for beginners
- May require more resources compared to simpler alternatives
- Configuration complexity for advanced use cases
Code Comparison
Both repositories contain the same codebase, as emissary-ingress/emissary is the main repository for the Emissary-ingress project. Here's a sample of the code structure:
# emissary/charts/emissary-ingress/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "emissary.fullname" . }}
labels:
{{- include "emissary.labels" . | nindent 4 }}
This code snippet showcases the Kubernetes deployment configuration for Emissary-ingress, which is consistent across both repositories.
Cloud-native high-performance edge/middle/service proxy
Pros of Envoy
- More mature and widely adopted project with extensive production use
- Highly performant and resource-efficient
- Supports a broader range of protocols and use cases
Cons of Envoy
- Steeper learning curve and more complex configuration
- Requires additional tooling for full API gateway functionality
- Less opinionated, which can lead to more decision-making for users
Code Comparison
Envoy configuration (YAML):
static_resources:
listeners:
- address:
socket_address:
address: 0.0.0.0
port_value: 8080
filter_chains:
- filters:
- name: envoy.filters.network.http_connection_manager
Emissary configuration (YAML):
---
apiVersion: getambassador.io/v2
kind: Mapping
metadata:
name: example-mapping
spec:
prefix: /example/
service: example-service
Envoy provides a lower-level configuration model, offering more granular control but requiring more detailed setup. Emissary, built on top of Envoy, provides a higher-level abstraction with a more user-friendly configuration format, focusing on API gateway use cases.
Both projects leverage Envoy's core functionality, but Emissary simplifies the configuration process for Kubernetes-native API gateway scenarios, while Envoy offers more flexibility for diverse deployment environments and use cases.
Connect, secure, control, and observe services.
Pros of Istio
- More comprehensive service mesh solution with advanced traffic management, security, and observability features
- Stronger support for multi-cluster and multi-cloud deployments
- Larger community and ecosystem, with extensive documentation and integrations
Cons of Istio
- Higher complexity and steeper learning curve
- Increased resource consumption and potential performance overhead
- More challenging to set up and maintain, especially for smaller projects
Code Comparison
Istio configuration example:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: my-service
spec:
hosts:
- my-service.example.com
http:
- route:
- destination:
host: my-service
Emissary configuration example:
apiVersion: getambassador.io/v2
kind: Mapping
metadata:
name: my-service
spec:
prefix: /my-service/
service: my-service
Istio offers more granular control over traffic routing and management, while Emissary provides a simpler configuration for basic use cases. Istio's configuration is more verbose and complex, reflecting its broader feature set, whereas Emissary's configuration is more concise and focused on API gateway functionality.
The Cloud Native Application Proxy
Pros of Traefik
- Easier configuration with automatic service discovery
- More extensive built-in middleware options
- Better support for non-Kubernetes environments
Cons of Traefik
- Less focus on API management capabilities
- More complex configuration for advanced use cases
- Steeper learning curve for Kubernetes-specific features
Code Comparison
Traefik configuration example:
http:
routers:
my-router:
rule: "Host(`example.com`) && PathPrefix(`/api`)"
service: my-service
middlewares:
- my-middleware
Emissary configuration example:
apiVersion: getambassador.io/v3alpha1
kind: Mapping
metadata:
name: example-mapping
spec:
prefix: /api/
service: example-service
Both Traefik and Emissary are popular ingress controllers and API gateways, but they have different strengths. Traefik excels in ease of use and versatility across various environments, while Emissary (formerly Ambassador) is more focused on Kubernetes-native API management. Traefik offers more built-in features and middleware options, making it easier to set up complex routing scenarios. However, Emissary provides a more straightforward configuration for Kubernetes-specific use cases and offers more advanced API management capabilities out of the box.
Contour is a Kubernetes ingress controller using Envoy proxy.
Pros of Contour
- Simpler configuration and setup process
- Better integration with Kubernetes native resources
- Faster performance for high-traffic scenarios
Cons of Contour
- Less flexible customization options
- Limited support for non-HTTP protocols
- Smaller ecosystem and community compared to Emissary
Code Comparison
Contour configuration example:
apiVersion: projectcontour.io/v1
kind: HTTPProxy
metadata:
name: example
spec:
virtualhost:
fqdn: example.com
routes:
- conditions:
- prefix: /
services:
- name: example-service
port: 80
Emissary configuration example:
apiVersion: getambassador.io/v3alpha1
kind: Mapping
metadata:
name: example
spec:
prefix: /
service: example-service:80
host: example.com
Both projects aim to provide Kubernetes ingress solutions, but they differ in their approach and feature sets. Contour focuses on simplicity and native Kubernetes integration, while Emissary offers more advanced customization options at the cost of increased complexity. The code examples demonstrate the difference in configuration syntax, with Contour using the HTTPProxy resource and Emissary using its custom Mapping resource.
🦍 The Cloud-Native API Gateway and AI Gateway.
Pros of Kong
- More extensive plugin ecosystem with 100+ plugins available
- Offers both open-source and enterprise editions with additional features
- Supports multiple protocols beyond HTTP, including TCP, UDP, and gRPC
Cons of Kong
- More complex configuration and setup process
- Higher resource consumption, especially for larger deployments
- Steeper learning curve for newcomers to API gateway concepts
Code Comparison
Kong configuration example:
services:
- name: example-service
url: http://example.com
routes:
- name: example-route
paths:
- /example
Emissary configuration example:
---
apiVersion: getambassador.io/v2
kind: Mapping
metadata:
name: example-mapping
spec:
prefix: /example
service: http://example.com
Both Kong and Emissary are popular API gateway solutions, but they differ in their approach and feature sets. Kong offers a more comprehensive set of features and plugins, making it suitable for complex enterprise environments. Emissary, on the other hand, focuses on simplicity and ease of use, making it a good choice for Kubernetes-native deployments and teams looking for a straightforward API gateway solution.
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
Emissary-ingress
Emissary-Ingress is an open-source Kubernetes-native API Gateway + Layer 7 load balancer + Kubernetes Ingress built on Envoy Proxy. Emissary-ingress is a CNCF incubation project (and was formerly known as Ambassador API Gateway).
Emissary-ingress enables its users to:
- Manage ingress traffic with load balancing, support for multiple protocols (gRPC and HTTP/2, TCP, and web sockets), and Kubernetes integration
- Manage changes to routing with an easy to use declarative policy engine and self-service configuration, via Kubernetes CRDs or annotations
- Secure microservices with authentication, rate limiting, and TLS
- Ensure high availability with sticky sessions, rate limiting, and circuit breaking
- Leverage observability with integrations with Grafana, Prometheus, and Datadog, and comprehensive metrics support
- Enable progressive delivery with canary releases
- Connect service meshes including Consul, Linkerd, and Istio
- Knative serverless integration
See the full list of features here.
Branches
(If you are looking at this list on a branch other than master
, it
may be out of date.)
master
- branch for Emissary-ingress dev work ( :heavy_check_mark: upcoming release)release/v3.9
- branch for Emissary-ingress 3.9.z workrelease/v2.5
- branch for Emissary-ingress 2.5.z work ( :heavy_check_mark: maintenance)
Architecture
Emissary is configured via Kubernetes CRDs, or via annotations on Kubernetes Service
s. Internally,
it uses the [Envoy Proxy] to actually handle routing data; externally, it relies on Kubernetes for
scaling and resiliency. For more on Emissary's architecture and motivation, read this blog post.
Getting Started
You can get Emissary up and running in just three steps. Follow the instructions here: https://www.getambassador.io/docs/emissary/latest/tutorials/getting-started/
If you are looking for a Kubernetes ingress controller, Emissary provides a superset of the functionality of a typical ingress controller. (It does the traditional routing, and layers on a raft of configuration options.) This blog post covers Kubernetes ingress.
For other common questions, view this FAQ page.
You can also use Helm to install Emissary. For more information, see the instructions in the Helm installation documentation
Check out the full Emissary documentation at www.getambassador.io/docs/open-source.
Community
Emissary-ingress is a CNCF Incubating project and welcomes any and all contributors.
Check out the Community/
directory for information on
the way the community is run, including:
- the
CODE_OF_CONDUCT.md
- the
GOVERNANCE.md
structure - the list of
MAINTAINERS.md
- the
MEETING_SCHEDULE.md
of regular trouble-shooting meetings and contributor meetings - how to get
SUPPORT.md
.
The best way to join the community is to join the CNCF Slack #emissary-ingress channel.
Check out the DevDocumentation/
directory for
information on the technicals of Emissary, most notably the
CONTRIBUTING.md
contributor's guide.
If you're interested in contributing, here are some ways:
- Write a blog post for our blog
- Investigate an open issue
- Add more tests
The Ambassador Edge Stack is a superset of Emissary-ingress that provides additional functionality including OAuth/OpenID Connect, advanced rate limiting, Swagger/OpenAPI support, integrated ACME support for automatic TLS certificate management, and a cloud-based UI. For more information, visit https://www.getambassador.io/editions/.
Top Related Projects
open source Kubernetes-native API gateway for microservices built on the Envoy Proxy
Cloud-native high-performance edge/middle/service proxy
Connect, secure, control, and observe services.
The Cloud Native Application Proxy
Contour is a Kubernetes ingress controller using Envoy proxy.
🦍 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