Convert Figma logo to code with AI

emissary-ingress logoemissary

open source Kubernetes-native API gateway for microservices built on the Envoy Proxy

4,502
705
4,502
426

Top Related Projects

open source Kubernetes-native API gateway for microservices built on the Envoy Proxy

28,877

Cloud-native high-performance edge/middle/service proxy

38,275

Connect, secure, control, and observe services.

63,965

The Cloud Native Application Proxy

3,941

Contour is a Kubernetes ingress controller using Envoy proxy.

43,774

🦍 The API 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.

28,877

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.

38,275

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.

63,965

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.

3,941

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.

43,774

🦍 The API 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 Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

Emissary-ingress

Version Docker Repository Join Slack Core Infrastructure Initiative: Best Practices

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:

See the full list of features here.

Branches

(If you are looking at this list on a branch other than main, it is likely to be wrong.)

  • main: main Emissary-ingress development work (:heavy_check_mark: active development)

  • master: frozen branch for Emissary-ingress 3.10 (:heavy_check_mark: frozen)

  • release/v2.5: frozen branch for Emissary-ingress 2.5 (:heavy_check_mark: frozen)

Building Emissary 4

gmake images should make all the images you need using goreleaser. Note that .goreleaser.yaml is a generated file; do not edit it directly. It's this way so that we can use the open-source version of goreleaser.

If you want to update the Envoy version, edit the ENVOY_IMAGE value in the Makefile.

Architecture

Emissary is configured via Kubernetes CRDs, or via annotations on Kubernetes Services. Internally, it uses the Envoy Proxy to actually handle routing data; externally, it relies on Kubernetes for scaling and resiliency.

Getting Started

The fastest way to get started with Emissary is to follow the Quickstart. For other common questions, check out the Emissary FAQ or the full Emissary documentation.

Community

Emissary-ingress is a CNCF Incubating project and welcomes any and all contributors.

At this point, Emissary's original parent company has stepped back from direct involvement in the project, so the community is now more important than ever. As we've said at the past few KubeCons, Emissary needs you.

The best way to join the community is to join the CNCF Slack and hop into the #emissary-ingress channel. Checking out [open issues] or [contributing documentation] are both great ways to get started contributing.

You can also check out the project's governance documentation: