{"id":15127628,"url":"https://github.com/benderscript/envoy_control_plane","last_synced_at":"2026-02-16T21:33:06.056Z","repository":{"id":156947001,"uuid":"170343041","full_name":"BenderScript/envoy_control_plane","owner":"BenderScript","description":"Build your Own Envoy Proxy Control Plane","archived":false,"fork":false,"pushed_at":"2019-05-16T23:17:55.000Z","size":157,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-09-05T23:55:16.678Z","etag":null,"topics":["control-panel","docker","envoy","envoy-proxy","host","istio","natively","ports","proxy"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BenderScript.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2019-02-12T15:36:11.000Z","updated_at":"2025-04-04T01:18:02.000Z","dependencies_parsed_at":null,"dependency_job_id":"e7a4e6be-790d-4b22-9250-aef3202ef229","html_url":"https://github.com/BenderScript/envoy_control_plane","commit_stats":null,"previous_names":["benderscript/envoy_control_plane"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/BenderScript/envoy_control_plane","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BenderScript%2Fenvoy_control_plane","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BenderScript%2Fenvoy_control_plane/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BenderScript%2Fenvoy_control_plane/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BenderScript%2Fenvoy_control_plane/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BenderScript","download_url":"https://codeload.github.com/BenderScript/envoy_control_plane/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BenderScript%2Fenvoy_control_plane/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279085160,"owners_count":26100015,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-15T02:00:07.814Z","response_time":56,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["control-panel","docker","envoy","envoy-proxy","host","istio","natively","ports","proxy"],"created_at":"2024-09-26T02:05:08.838Z","updated_at":"2025-10-15T14:09:31.879Z","avatar_url":"https://github.com/BenderScript.png","language":"Go","readme":"# Envoy control plane Example\n\n![Topology](images/envoy_control_plane.jpg)\n\nThis 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](https://medium.com/@salmaan.rashid/envoy-control-plane-hello-world-2f49b2865f29)\n\nAs far code examples, there a few gems that provide great building blocks:\n\n* [Envoy's Testing Server Main](https://github.com/envoyproxy/go-control-plane/blob/master/pkg/test/main/main.go). This file contains the main() function.\n* [Envoy's Testing Server Startup Functions](https://github.com/envoyproxy/go-control-plane/blob/master/pkg/test/server.go). This file contains the start up functions for the various server.\n* [High Level Envoy API](https://github.com/envoyproxy/go-control-plane/blob/master/pkg/test/resource/resource.go). This file contains high-level APIs to create Envoy resources such as clusters, endpoints and routes.\n\n\n\nSo, why go through this exercise? Several reasons:\n\n* The code the article above did not work anymore due to changes in the Envoy API code\n* I wanted to learn by doing it mostly from scratch\n* I wanted to use Golang's core library as much as possible. In other words, the least number of third-party dependencies.\n\nThis is still a work in progress. I am still polishing the example.\n\n## Environment\n\nThis was tested with the following:\n \n * MacOS Mojave 10.14.3\n * go1.11.5 darwin/amd64\n * Envoy v1.9.0\n\n## Topology Details\n\nOne 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.\n\nI 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. \n\nI had to use two main tricks to have this working:\n\n* use [\"host.docker.internal\"](https://docs.docker.com/docker-for-mac/networking/) as control plane address\n* set the cluster type as type: STRICT_DNS\n\n## Running the example\n\nAssuming you have docker installed and all the other basic stuff, everything you need to run the example should be under [testdata](https://github.com/repenno/envoy_control_plane/tree/master/testdata). \n\nRun:\n\n```\n./build_all.sh\n```\n\nIf everything goes well, you should see the following docker images and a running container\n\n```\nREPOSITORY                         TAG                 IMAGE ID            CREATED              SIZE\nenvoy_control_plane                v1.9.0              d21d40d3f20a        About a minute ago   189MB\nenvoyproxy/envoy                   v1.9.0              b02c1418b106        4 months ago         164MB\n\n\nCONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                                                NAMES\nfb862e600bb0        envoy_control_plane:v1.9.0   \"/usr/bin/dumb-init …\"   2 minutes ago       Up 2 minutes        0.0.0.0:10000-\u003e10000/tcp, 0.0.0.0:19000-\u003e19000/tcp   envoy_1_9_0\n```\n\n\n\n\n\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbenderscript%2Fenvoy_control_plane","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbenderscript%2Fenvoy_control_plane","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbenderscript%2Fenvoy_control_plane/lists"}