{"id":23010152,"url":"https://github.com/nikitamishagin/corebgp","last_synced_at":"2025-09-09T14:34:10.341Z","repository":{"id":266748401,"uuid":"899227483","full_name":"nikitamishagin/corebgp","owner":"nikitamishagin","description":"CoreBGP is a service for managing BGP announcements within your infrastructure.","archived":false,"fork":false,"pushed_at":"2025-02-27T20:32:56.000Z","size":173,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-28T05:21:50.775Z","etag":null,"topics":["bgp","healthcheck","rest-api"],"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/nikitamishagin.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":"2024-12-05T21:16:29.000Z","updated_at":"2025-02-27T20:33:00.000Z","dependencies_parsed_at":null,"dependency_job_id":"01e41251-3e98-4e01-854f-055ec4cb3770","html_url":"https://github.com/nikitamishagin/corebgp","commit_stats":null,"previous_names":["nikitamishagin/corebgp"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikitamishagin%2Fcorebgp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikitamishagin%2Fcorebgp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikitamishagin%2Fcorebgp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikitamishagin%2Fcorebgp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nikitamishagin","download_url":"https://codeload.github.com/nikitamishagin/corebgp/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246847137,"owners_count":20843444,"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":["bgp","healthcheck","rest-api"],"created_at":"2024-12-15T09:17:20.067Z","updated_at":"2025-04-02T16:15:55.192Z","avatar_url":"https://github.com/nikitamishagin.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CoreBGP\n\n**THE PROJECT IS STILL UNDER DEVELOPMENT**\n\n## Description\n\nCoreBGP is a full-fledged service for managing BGP announcements within your infrastructure. It provides a REST API,\nhealth checks, IPAM integration, and high availability storage. The service architecture is designed for modularity,\nhigh availability, and seamless integration with other systems. CoreBGP enables you to add custom BGP announcements to\nbalance the load across your application replicas.\n\n### Advantages\n\nWhat sets CoreBGP apart from other solutions? Existing implementations like GoBGP and ExaBGP are excellent products.\nHowever, they do not address all the requirements needed to act as a comprehensive BGP announcement controller in your\ninfrastructure. CoreBGP fills this gap by combining the best practices and providing a complete feature set for working\nwith BGP.\n\n## Components\n\nThe project is composed of several modules (microservices):\n\n- [etcd](https://github.com/etcd-io/etcd) (support for other databases is planned in the future);\n- API server;\n- Checker;\n- Updater;\n- [GoBGP](https://github.com/osrg/gobgp);\n- IPAM plugin (optional component).\n\n### ETCD\n\nETCD is used as a high availability storage cluster to save BGP announcements, their states, and the states of service\ncomponents. To ensure high availability, it is recommended to use a multi-node cluster. Deployments with a single ETCD\ninstance are only suitable for development and testing purposes. The choice of ETCD as the primary database is based on\nthe following reasons:\n\n- It is a noSQL database. Since the service has a narrow focus, most of the database will consist of a single table—BGP\n  announcements. Using relational databases in this case seems excessive. However, support for other databases through\n  adapters is planned in the future.\n- Simplifies the deployment of fault-tolerant clusters without requiring manual load balancing. In some database\n  systems, clusterization can be a complex task that complicates the service deployment process.\n- Supports writing to any node in the cluster. This feature is particularly valuable in high-load systems, as writing to\n  a local database node (on the same host) can significantly reduce network communication delays.\n- Easy to configure. ETCD can be launched with just a few startup arguments, delivering excellent performance out of the\n  box without fine-tuning.\n- Actively maintained and continuously evolving.\n\n### API server\n\nAPI server is a key component of the project that serves as a RESTful API with integration to ETCD. It provides a\nunified interface for interacting with various clients. Access control implementation is planned for the future.\n[The Gin framework](https://github.com/gin-gonic/gin) is used for development.\n\n### Checker\n\nChecker is a component responsible for performing health checks for next hops provided in the announcement. Based on its\nresults, decisions are made about adding or removing routes.\n\nA potential challenge is implementing complex logic for operating in a high availability configuration, which should:\n\n- Prevent simultaneous execution of the same task by multiple instances.\n- Ensure an even distribution of tasks among instances.\n- Minimize the execution of tasks by instances in other zones to reduce inter-zone traffic.\n- Guarantee the execution of all tasks in case one or more instances fail.\n\nAt the same time, it is important to maintain simplicity in implementation without using additional services or\ncomponents.\n\nEach instance of the component interacts with its own API server running on the same node.\n\n### Updater\n\nUpdater configures a subordinate instance of GoBGP through its gRPC API based on data retrieved from the API server.\nEssentially, it is responsible for maintaining the relevance of BGP routes and ensuring the restoration of the routing\ntable after failures.\n\nEach instance of the component interacts with its own API server running on the same node.\n\n### GoBGP\n\nGoBGP is the core component that acts as a BGP controller. It is expected to act as a route reflector and distribute\ninformation about advertised routes in the BGP network.\n\n### IPAM plugin\n\nThis is an optional component that can be implemented to integrate with a specific IPAM system. Integration with an\nexternal IPAM will eliminate the need to pass a specific address along with the announcement, which will simplify the\nwork with announcements for services (for example, addresses used for BGP load balancing).\n\n_readme in progress..._\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnikitamishagin%2Fcorebgp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnikitamishagin%2Fcorebgp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnikitamishagin%2Fcorebgp/lists"}