{"id":17617896,"url":"https://github.com/jlevesy/grpc-traffic-controller","last_synced_at":"2026-01-20T15:32:50.512Z","repository":{"id":61791988,"uuid":"554340461","full_name":"jlevesy/grpc-traffic-controller","owner":"jlevesy","description":"Kubernetes xDS control plane for gRPC","archived":false,"fork":false,"pushed_at":"2023-12-13T20:44:32.000Z","size":1635,"stargazers_count":1,"open_issues_count":7,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-13T13:43:25.409Z","etag":null,"topics":["control-plane","grpc","kubernetes","service-discovery","service-mesh","xds"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jlevesy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-10-19T16:43:36.000Z","updated_at":"2024-05-29T11:27:32.000Z","dependencies_parsed_at":"2023-02-15T12:31:00.404Z","dependency_job_id":"3535b9cf-720b-4926-a9af-c629daa99634","html_url":"https://github.com/jlevesy/grpc-traffic-controller","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jlevesy/grpc-traffic-controller","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jlevesy%2Fgrpc-traffic-controller","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jlevesy%2Fgrpc-traffic-controller/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jlevesy%2Fgrpc-traffic-controller/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jlevesy%2Fgrpc-traffic-controller/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jlevesy","download_url":"https://codeload.github.com/jlevesy/grpc-traffic-controller/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jlevesy%2Fgrpc-traffic-controller/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28606142,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-20T14:45:23.139Z","status":"ssl_error","status_checked_at":"2026-01-20T14:44:16.929Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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-plane","grpc","kubernetes","service-discovery","service-mesh","xds"],"created_at":"2024-10-22T19:16:51.402Z","updated_at":"2026-01-20T15:32:50.495Z","avatar_url":"https://github.com/jlevesy.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# gTC: gRPC Traffic Controller\n\ngRPC Traffic Controller (or gTC) is a Kubernetes controller that allows through a manifest to describe routing configuration between gRPC clients and servers. It provides configuration to the clients using the gRPC xDS service discovery integration available in all major gRPC implemetations.\n\nSome of the gRPC features supported by gTC:\n\n- Traffic Splitting and Routing\n- Weighted Load Balancing\n- Circuit breaking\n- Retries\n- Fault injection\n- Locality Fallback\n- Hash Ring Load Balancing\n- Topology Aware Routing, if a destination service has [TAR enabled](https://kubernetes.io/docs/concepts/services-networking/topology-aware-routing/), gTC will serve the hinted endpoints with a higher priority.\n\nSome features I wish to add:\n\n- Prometheus Metrics\n- Integration of SPIFFE and SPIRE, for both TLS and RBAC.\n\n## Documentation\n\nPlease refer to the [official website](https://jlevesy.github.io/grpc-traffic-controller).\n\n## Usage Examples\n\nSee [the example setup](./example/k8s/echo-server/1-grpc-service.yaml).\n\n## Current Status\n\nxDS features implemented in gRPC are listed [here](https://grpc.github.io/grpc/cpp/md_doc_grpc_xds_features.html), this table tracks their support in gTC.\n\n| gRFC  | Status |\n| ------------- | ------------- |\n| [A27](https://github.com/grpc/proposal/blob/master/A27-xds-global-load-balancing.md) | Supported (except LRS) | N/A (initial implementation) |\n| [A28](https://github.com/grpc/proposal/blob/master/A28-xds-traffic-splitting-and-routing.md)  | Supported |\n| [A29](https://github.com/grpc/proposal/blob/master/A29-xds-tls-security.md)  | TODO |\n| [A31](https://github.com/grpc/proposal/blob/master/A31-xds-timeout-support-and-config-selector.md)  | Supported: MaxStreamDuration on routes and HTTPConnManager. |\n| [A32](https://github.com/grpc/proposal/blob/master/A32-xds-circuit-breaking.md)  | Supported: Cluster MaxRequests |\n| [A33](https://github.com/grpc/proposal/blob/master/A33-Fault-Injection.md)  | Supported: delay and abort injection |\n| [A36](https://github.com/grpc/proposal/blob/master/A36-xds-for-servers.md)  | TODO |\n| [A39](https://github.com/grpc/proposal/blob/master/A39-xds-http-filters.md)  | Supported filters at listener, route and backend level |\n| [A40](https://github.com/grpc/proposal/blob/master/A40-csds-support.md)  | TODO, Not directly related but it highlight the need of supporting CSDS on gTC's end? |\n| [A41](https://github.com/grpc/proposal/blob/master/A41-xds-rbac.md)  | TODO |\n| [A42](https://github.com/grpc/proposal/blob/master/A42-xds-ring-hash-lb-policy.md) | Supported: Route Hash Policies and LB Policy on backend |\n| [A44](https://github.com/grpc/proposal/blob/master/A44-xds-retry.md)  | Supported, both on route and listener |\n\n- I indend to suport xDS enabled gRPC servers, yet it might require a slight API change, or even a new CRD. More thinking is needed here.\n- LRS server side is left out of scope at the moment, though it could be an interesting thing to elaborate (expose load metrics?) I am unsure of what to do with for now.\n\n## Getting Started\n\n### Required Tools\n\n- [go1.21](https://go.dev/learn/)\n- [k3d](https://github.com/k3d-io/k3d)\n- [ko](https://github.com/google/ko)\n- [helm](https://helm.sh/)\n- [kubectl](https://kubernetes.io/docs/tasks/tools/#kubectl)\n\n### Running the development environment\n\nFor the first time you need to install the code generation tools\n\n```bash\nmake install_code_generator install_controller_tools\n```\n\nThen you can run\n\n```bash\nmake dev\n```\n\nThis command:\n\n1. Creates a k3d cluster\n2. Installs the gTC controller\n3. Deploy an example server\n4. Deploys an example client.\n\nFrom there you can run a few example commands\n\n```bash\nmake client_shell_0 CMD='/ko-app/client -period=100ms --addr xds:///echo-server/basic  \"hello there\"'\nmake client_shell_0 CMD='/ko-app/client -premium -period=100ms --addr xds:///echo-server/abort-fault-injection-backend-override  \"hello there\"'\n```\n\nFeel free to try out [all the examples available](./example/k8s/echo-server/1-grpc-service.yaml)\n\nIf you wish to run the test suite\n\n```bash\nmake test\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjlevesy%2Fgrpc-traffic-controller","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjlevesy%2Fgrpc-traffic-controller","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjlevesy%2Fgrpc-traffic-controller/lists"}