{"id":13846227,"url":"https://github.com/sapcc/kube-parrot","last_synced_at":"2025-04-18T15:33:46.028Z","repository":{"id":8735996,"uuid":"59575687","full_name":"sapcc/kube-parrot","owner":"sapcc","description":"A Kubernetes Controller that Dynamically Announces Routes with BGP","archived":false,"fork":false,"pushed_at":"2025-03-26T16:11:48.000Z","size":46477,"stargazers_count":28,"open_issues_count":5,"forks_count":2,"subscribers_count":49,"default_branch":"master","last_synced_at":"2025-03-30T16:46:46.827Z","etag":null,"topics":[],"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/sapcc.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":"2016-05-24T13:30:48.000Z","updated_at":"2025-03-26T16:11:52.000Z","dependencies_parsed_at":"2023-10-16T08:43:16.942Z","dependency_job_id":"18f558a8-900c-40aa-b1c4-cef22d57c346","html_url":"https://github.com/sapcc/kube-parrot","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sapcc%2Fkube-parrot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sapcc%2Fkube-parrot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sapcc%2Fkube-parrot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sapcc%2Fkube-parrot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sapcc","download_url":"https://codeload.github.com/sapcc/kube-parrot/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249514427,"owners_count":21284542,"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":[],"created_at":"2024-08-04T18:00:20.309Z","updated_at":"2025-04-18T15:33:43.031Z","avatar_url":"https://github.com/sapcc.png","language":"Go","funding_links":[],"categories":["Operators vs Controllers"],"sub_categories":["Networking"],"readme":"# kube-parrot\n\nA Kubernetes Controller that Dynamically Announces Routes with BGP\n\n## Local testing\n\n```\n╭― ― ― ― ― ― ― ― ―╮  ╭― ― ― ― ― ― ― ― ―╮\n│  arista-ceos1   │  │  arista-ceos2   │\n│    10.0.0.2     │  │    10.0.0.3     │\n╰― ― ― ― ― ― ― ― ―╯  ╰― ― ― ― ― ― ― ― ―╯\n            |            |\n            |     iBGP   |     ↑\n         ╭― ― ― ― ― ― ― ― ―╮   podcidr    169.0.0.0/24\n         │       k3s       │   externalIP 10.1.0.100 \n         │    10.0.0.10    │   any other svc w/ externalIP\n         ╰― ― ― ― ― ― ― ― ―╯\n```\n\nRunning `make lab` will build an image (mind the registry) and deploy kube-parrot to k3s container connected to two Arista cEOS switches. \n\n```\n› make pods\nkubectl --kubeconfig kubeconfig.yaml --context default get pod -n kube-system\nNAME                                      READY   STATUS    RESTARTS   AGE\nkube-parrot-2722b                         1/1     Running   0          56s\nmetrics-server-86cbb8457f-q5qzb           1/1     Running   0          56s\ncoredns-6488c6fcc6-577rs                  1/1     Running   0          56s\nnginx-deployment-66b6c48dd5-qw6hs         1/1     Running   0          56s\nlocal-path-provisioner-5ff76fc89d-wdzwg   1/1     Running   0          56s\nhelm-install-traefik-tr2s8                1/1     Running   0          56s\n\n\n› make logs kube-parrot-2722b\nkubectl --kubeconfig kubeconfig.yaml --context default -n kube-system logs kube-parrot-2722b\nWelcome to Kubernetes Parrot v202112291324\nI1229 12:51:33.506280       1 server.go:80] Adding Neighbor: 10.0.0.2\ntime=\"2021-12-29T12:51:33Z\" level=info msg=\"Add a peer configuration for:10.0.0.2\" Topic=Peer\nI1229 12:51:33.556676       1 server.go:80] Adding Neighbor: 10.0.0.3\ntime=\"2021-12-29T12:51:33Z\" level=info msg=\"Add a peer configuration for:10.0.0.3\" Topic=Peer\nI1229 12:51:33.667271       1 metrics.go:25] Serving Prometheus metrics on 10.0.0.10:30039\nI1229 12:51:33.668747       1 store.go:44] Announcing         169.0.0.0/24 -\u003e 10.0.0.10       (NodePodSubnet: 169.0.0.0/24 -\u003e 5a46ee61b9e6)\ntime=\"2021-12-29T12:51:49Z\" level=info msg=\"Peer Up\" Key=10.0.0.3 State=BGP_FSM_OPENCONFIRM Topic=Peer\ntime=\"2021-12-29T12:51:52Z\" level=info msg=\"Peer Up\" Key=10.0.0.2 State=BGP_FSM_OPENCONFIRM Topic=Peer\nI1229 12:51:52.674222       1 store.go:44] Announcing        10.1.0.100/32 -\u003e 10.0.0.10       (ExternalIP:    kube-system/nginx -\u003e 10.0.0.10)\n\n\n# check from switch side\n› make sw1\ndocker exec -it arista-sw1 Cli\nSW1\u003een\nSW1#show ip bgp\nBGP routing table information for VRF default\nRouter identifier 10.0.0.2, local AS number 65001\nRoute status codes: s - suppressed, * - valid, \u003e - active, # - not installed, E - ECMP head, e - ECMP\n                    S - Stale, c - Contributing to ECMP, b - backup, L - labeled-unicast\nOrigin codes: i - IGP, e - EGP, ? - incomplete\nAS Path Attributes: Or-ID - Originator ID, C-LST - Cluster List, LL Nexthop - Link Local Nexthop\n\n         Network                Next Hop            Metric  LocPref Weight  Path\n * \u003e     10.1.0.100/32          10.0.0.10             0       100     0       i\n * \u003e     169.0.0.0/24           10.0.0.10             0       100     0       i\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsapcc%2Fkube-parrot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsapcc%2Fkube-parrot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsapcc%2Fkube-parrot/lists"}