BenderScript / envoy_control_plane

Build your Own Envoy Proxy Control Plane

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Envoy control plane Example

Topology

This repository represents my experiments while trying to understand in detail how the Envoy control plane worked. As compared to envoy proxy proper there isn't a lot of detailed HOW-TOs on the control plane, but fortunately I found a few good references, specially this one: Envoy hello World

As far code examples, there a few gems that provide great building blocks:

So, why go through this exercise? Several reasons:

  • The code the article above did not work anymore due to changes in the Envoy API code
  • I wanted to learn by doing it mostly from scratch
  • I wanted to use Golang's core library as much as possible. In other words, the least number of third-party dependencies.

This is still a work in progress. I am still polishing the example.

Environment

This was tested with the following:

  • MacOS Mojave 10.14.3
  • go1.11.5 darwin/amd64
  • Envoy v1.9.0

Topology Details

One of the challenges in this exercise was to have the Envoy Proxy run as a container and the application natively. It is not straightforward to have a container access an application running on the host. It took me a while but I finally managed to get the right envoy configuration.

I wanted to have the control plane running natively on the host because I wanted to tinker with it: change, step debug, rerun, stop, Printf, etc.

I had to use two main tricks to have this working:

Running the example

Assuming you have docker installed and all the other basic stuff, everything you need to run the example should be under testdata.

Run:

./build_all.sh

If everything goes well, you should see the following docker images and a running container

REPOSITORY                         TAG                 IMAGE ID            CREATED              SIZE
envoy_control_plane                v1.9.0              d21d40d3f20a        About a minute ago   189MB
envoyproxy/envoy                   v1.9.0              b02c1418b106        4 months ago         164MB


CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                                                NAMES
fb862e600bb0        envoy_control_plane:v1.9.0   "/usr/bin/dumb-init …"   2 minutes ago       Up 2 minutes        0.0.0.0:10000->10000/tcp, 0.0.0.0:19000->19000/tcp   envoy_1_9_0

About

Build your Own Envoy Proxy Control Plane

License:Apache License 2.0


Languages

Language:Go 100.0%