{"id":15674218,"url":"https://github.com/nakabonne/sxds","last_synced_at":"2025-05-06T22:53:02.580Z","repository":{"id":108451800,"uuid":"155803488","full_name":"nakabonne/sxds","owner":"nakabonne","description":"simple-xds that provides configuration and route table to data-plane for service discovery","archived":false,"fork":false,"pushed_at":"2019-11-17T07:57:42.000Z","size":3644,"stargazers_count":14,"open_issues_count":0,"forks_count":4,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-05-03T04:16:01.189Z","etag":null,"topics":["envoy","microservices","service-mesh","xds"],"latest_commit_sha":null,"homepage":"https://medium.com/@nakabonne/a-choice-to-start-small-service-mesh-441886b696d9","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nakabonne.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,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-11-02T02:28:28.000Z","updated_at":"2023-01-03T09:08:31.000Z","dependencies_parsed_at":"2023-04-12T16:47:01.013Z","dependency_job_id":null,"html_url":"https://github.com/nakabonne/sxds","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nakabonne%2Fsxds","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nakabonne%2Fsxds/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nakabonne%2Fsxds/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nakabonne%2Fsxds/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nakabonne","download_url":"https://codeload.github.com/nakabonne/sxds/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252782470,"owners_count":21803382,"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","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":["envoy","microservices","service-mesh","xds"],"created_at":"2024-10-03T15:43:49.724Z","updated_at":"2025-05-06T22:53:02.561Z","avatar_url":"https://github.com/nakabonne.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# sxds\n\n[![CircleCI](https://circleci.com/gh/nakabonne/sxds.svg?style=svg)](https://circleci.com/gh/nakabonne/sxds)\n[![Release](https://img.shields.io/github/release/nakabonne/sxds.svg?style=flat-square)](https://github.com/nakabonne/sxds/releases/latest)\n[![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square)](/LICENSE.md)\n[![Go Doc](https://img.shields.io/badge/godoc-reference-blue.svg?style=flat-square)](http://godoc.org/github.com/nakabonne/sxds)\n\nSimple xds for data-plane in ServiceMesh.  \nSxds enables service discovery, dynamic updates to load balancing pools and routing tables, and supports any data-plane that conforms to data-plane-api.  \nThe communication protocol with data-plane is supported only by gRPC.\n\n  \nThis README assumes you're familiar with the [data-plane-api](https://www.envoyproxy.io/docs/envoy/latest/configuration/overview/v2_overview) already.\n\n## Motivation\nUsing an orchestration tool makes it possible to achieve Service Mesh relatively easily.  \nBut if you don't use it, you can't benefit from a great tool such as Istio!  \nIf you want to realize Service Mesh in such an environment, sxds is one of effective methods.  \n\n## Feature\n\n- Provides policy and configuration for all of the running data planes\n  - Listener discovery service ([LDS](https://www.envoyproxy.io/docs/envoy/latest/configuration/listeners/lds))\n  - Cluster discovery service ([CDS](https://www.envoyproxy.io/docs/envoy/latest/configuration/cluster_manager/cds))\n  - Route discovery service ([RDS](https://www.envoyproxy.io/docs/envoy/latest/configuration/http_conn_man/rds))\n  - Endpoint discovery service ([EDS](https://www.envoyproxy.io/docs/envoy/latest/api-v2/api/v2/eds.proto#envoy-api-file-envoy-api-v2-eds-proto))\n\n## Installation\n\n### Binaries\n\nPlease see [Github Releases](https://github.com/nakabonne/sxds/releases).\n\n### From source\n\n```\n$ go get -u github.com/nakabonne/sxds\n$ go install github.com/nakabonne/sxds/cmd/sxds\n```\n\n## Usage\n\n### Run\n\nTwo servers, [xds](#xds) and [cacher](#cacher) will listen.\n\n```sh\n$ sxds\n```\n\n### Required settings\n\nThere are only two things you have to do beforehand.\n\n#### Set resources\n\nsxds caches resources and returns DiscoverResponse for data-plane.  \nso you need to send the json file to the [cacher server](#cacher).  \nPlease create json while referring to the [document](https://github.com/nakabonne/sxds/tree/master/doc/RESOURCES.md).\n\n```\n$ curl -XPUT http://{IP_ADDRESS}:8082/resources/sidecar -d @sidecar.json\n```\n\n#### Data-Plane settings\n\n\nIn order to suppress memory consumption, sxds cache resources for each node type.  \nAnd sxds gets node type from node id, so you need to follow the naming convention.  \nPlease add node_type to prefix like \"sidecar-app1\" for naming node id of data-plane.  \n\n##### envoy  \n\n[envoy-config]\n\nAdd sxds cluster to static_resources and specify it in dynamic_resources.  \nSee [sample](https://github.com/nakabonne/sxds/blob/master/sample/envoy/envoy.yml).  \n\n[specification of node id]  \n\nAdd node_type to the prefix of the name given to the `--service-node` option.  \n\n```\n$ envoy --service-node sidecar-app1 --service-cluster app1\n```\n\n### Optional settings\n\n```sh\nSXDS_PRODUCTION=false # default: false\nSXDS_ADS_MODE=false   # default: false\nSXDS_XDS_PORT=8081    # default: 8081\nSXDS_CACHER_PORT=8082 # default: 8082\n```\n\nFor ADS mode, please click [here](https://github.com/envoyproxy/data-plane-api/blob/master/XDS_PROTOCOL.md#aggregated-discovery-services-ads)\n\n## Architecture\n\n![architecture](https://github.com/nakabonne/sxds/blob/master/media/architecture.png) \n\n### xDS\ngRPC server that return response to data-plane.\n\n### cacher\n\nREST server that caches resources.\n\n\n## Terms\n\n| term | meaning |\n|:----------|:-----------|\n|node type|The role of node which put each data-plane(e.g. sidecar, router)|\n|resources|Data to use for DiscoveryResponse(e.g. listeners, clusters) |\n\n## TODO\n\n- [x] Make detailed documentation on resource json\n- [ ] Make sxdsctl that is cli tool for put resources\n- [ ] Update to be available synchronous (long) polling via REST endpoints \n- [ ] Automatic generation of resources json\n- [ ] More test...\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnakabonne%2Fsxds","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnakabonne%2Fsxds","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnakabonne%2Fsxds/lists"}