Skip to content
This repository has been archived by the owner on Jun 3, 2024. It is now read-only.
/ consul-envoy Public archive

Consul to Envoy API listener

License

Notifications You must be signed in to change notification settings

jippi/consul-envoy

Repository files navigation

About consul-envoy

This project aim to be a quick'n'dirty way to get Envoy and Consul talking nicely, so any Consul service URL can be routed through evnoy.

The current code allows to route *.service.consul to the backends availble in the Consul catalog

Currently RDS - Route discovery service, SDS - Service discovery service and CDS - Cluster discovery service is implemented

Project goal

Making using Envoy with Consul as easy as fabio and traefik, possible exposting additional configuration to envoy through Consul Service tags (similar to fabio urlprefix-* configuration).

Configuration

  • PORT (env) - the HTTP port to listen on (example: 8877)
  • CONSUL_* (env) - the default Consul environment variables is used when connecting to the Consul cluster. (e.g. CONSUL_HTTP_ADDR)

Building

make requirements to install Go Vendor and fetch dependencies make install to build the binary (consul-envoy) into ${GOPATH}/bin make dist to build platform specific binary into ./build/consul-enovy-${OS}-${ARCH}

Example envoy config

The configuration assume that this project is named envoy-consul in the Consul catalog and listens on port 8877

{
    "listeners": [
        {
            "address": "tcp://0.0.0.0:80",
            "filters": [
                {
                    "name": "http_connection_manager",
                    "config": {
                        "codec_type": "auto",
                        "stat_prefix": "http",
                        "use_remote_address": true,
                        "rds": {
                            "route_config_name": "default",
                            "refresh_delay_ms": 10000,
                            "cluster": "rds_http"
                        },
                        "filters": [
                            {
                                "name": "router",
                                "config": {}
                            }
                        ]
                    }
                }
            ]
        },
    ],
    "admin": {
        "access_log_path": "/dev/null",
        "address": "tcp://0.0.0.0:8001"
    },
    "cluster_manager": {
        "cds": {
            "cluster": {
                "name": "cds",
                "type": "logical_dns",
                "lb_type": "round_robin",
                "connect_timeout_ms": 1000,
                "hosts": [
                    {
                        "url": "tcp://consul-envoy.service.consul:8877"
                    }
                ]
            }
        },
        "sds": {
            "refresh_delay_ms": 5000,
            "cluster": {
                "name": "sds",
                "type": "logical_dns",
                "lb_type": "round_robin",
                "connect_timeout_ms": 1000,
                "hosts": [
                    {
                        "url": "tcp://consul-envoy.service.consul:8877"
                    }
                ]
            }
        },
        "clusters": [
            {
                "name": "rds_http",
                "type": "logical_dns",
                "lb_type": "round_robin",
                "connect_timeout_ms": 1000,
                "hosts": [
                    {
                        "url": "tcp://consul-envoy.service.consul:8877"
                    }
                ]
            }
        ]
    }
}

Releases

No releases published

Packages

No packages published