{"id":34222689,"url":"https://github.com/royroyee/bvcni","last_synced_at":"2026-04-18T23:04:24.300Z","repository":{"id":177868945,"uuid":"660997194","full_name":"royroyee/bvcni","owner":"royroyee","description":"A Simple CNI plugin based on linux bridge and VXLAN for Kubernetes","archived":false,"fork":false,"pushed_at":"2023-07-04T13:45:51.000Z","size":6232,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"new_branch","last_synced_at":"2024-06-21T19:54:11.501Z","etag":null,"topics":["cni","go","kubernetes","vxlan"],"latest_commit_sha":null,"homepage":"","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/royroyee.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":"2023-07-01T13:13:31.000Z","updated_at":"2024-05-31T08:26:48.000Z","dependencies_parsed_at":"2023-07-10T18:15:25.488Z","dependency_job_id":null,"html_url":"https://github.com/royroyee/bvcni","commit_stats":null,"previous_names":["royroyee/bvcni"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/royroyee/bvcni","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/royroyee%2Fbvcni","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/royroyee%2Fbvcni/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/royroyee%2Fbvcni/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/royroyee%2Fbvcni/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/royroyee","download_url":"https://codeload.github.com/royroyee/bvcni/tar.gz/refs/heads/new_branch","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/royroyee%2Fbvcni/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27757813,"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-12-15T02:00:09.782Z","response_time":96,"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":["cni","go","kubernetes","vxlan"],"created_at":"2025-12-15T23:49:04.549Z","updated_at":"2025-12-15T23:49:05.095Z","avatar_url":"https://github.com/royroyee.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# bvcni\nA Simple CNI plugin based on Linux bridge and VXLAN for Kubernetes\n\n## Introduction\n**bvcni** is a Container Networking Interface (CNI) plugin, designed for Kubernetes clusters. It simplifies container networking management by utilizing a combination of **Bridge** and **VXLAN** \n\n\n## Architecture\nbvcni uses Linux-based bridges and VXLAN in its architecture, emulating the approach of Flannel's **VXLAN** mode\n\n![bvcni architecture.png](img%2Fbvcni%20architecture.png)\n\n## Features\nbvcni aims for simplicity, minimizing complex configurations.\n- **Bridge Networking**: Connects containers within the same network bridge, enabling communication between them.\n- **VXLAN Networking**: Establishes connections between containers using VXLAN virtual networks, ensuring network isolation and scalability.\n\n## Prerequisites\n- No other CNI should be installed. If another CNI was previously used, a reset is recommended.\n\n## Build and Test\n- [Docker Hub](https://hub.docker.com/r/royroyee/bvcnid)\n\nApply the following command when no other CNI is installed:\n\n\n\n\n```\nkubectl apply -f https://raw.githubusercontent.com/royroyee/bvcni/new_branch/bvcni.yaml\n```\n\n\u003e **Note : Run the command when no other CNI is installed.**\n\nPrior to the CNI installation, the node will be in the NOT READY state. Once applied, a DaemonSet named `bvcnid` will be deployed to each node. The CNI configuration file will be generated in the `/etc/cni/net.d` directory, and the plugin binary files will be stored in `/opt/cni/bin`. \nA temporary file, `tmp/reserved_ips`, is also created for IP allocation.\n\n\n### CNI Config File (00-bvcni.conf)\n```\n{\n  \"cniVersion\": \"0.3.1\",\n  \"name\": \"bvcni\",\n  \"type\": \"bvcni\",\n  \"podcidr\": \"10.244.1.0/24\"\n}\n```\n\n    \n\nAfterwards, the node will transition to the READY state, and you will be able to use kubernetes.\n\n```\nNAME                                 READY   STATUS             RESTARTS          AGE\nbvcnid-68n69                         1/1     Running               0              10s\nbvcnid-hrqzh                         1/1     Running               0              10s\nbvcnid-t86df                         1/1     Running               0              10s\n\nNAME          STATUS   ROLES                  AGE     VERSION\nk8s-master    Ready    control-plane,master   3d      v1.23.0\nk8s-worker1   Ready    worker                 3d      v1.23.0\nk8s-worker2   Ready    worker                 2d22h   v1.23.0\n```\n\n```\nroyroyee@k8s-master:~$ kubectl get pods -o wide\nNAME      READY   STATUS    RESTARTS      AGE    IP           NODE          NOMINATED NODE   READINESS GATES\nalpine1   1/1     Running      0         164m   10.244.2.2   k8s-worker2   \u003cnone\u003e           \u003cnone\u003e\nalpine2   1/1     Running      0         85m    10.244.2.4   k8s-worker2   \u003cnone\u003e           \u003cnone\u003e\n```\n\n### Internet\n```\nroyroyee@k8s-master:~$ kubectl exec -it alpine1 -- ping 8.8.8.8\nPING 8.8.8.8 (8.8.8.8): 56 data bytes\n64 bytes from 8.8.8.8: seq=0 ttl=52 time=28.315 ms\n64 bytes from 8.8.8.8: seq=1 ttl=52 time=28.116 ms\n64 bytes from 8.8.8.8: seq=2 ttl=52 time=28.130 ms\n```\n\n\n### Same node container network connection\n```\n\broyroyee@k8s-master:~$ kubectl exec -it alpine1 -- ping 10.244.2.4\nPING 10.244.2.4 (10.244.2.4): 56 data bytes\n64 bytes from 10.244.2.4: seq=0 ttl=64 time=0.067 ms\n64 bytes from 10.244.2.4: seq=1 ttl=64 time=0.097 ms\n```\n\n### Different nodes container network connection\nTBF\n\n\n\n\n\n\n## Known issues\n- There are occasional instances where the VXLAN ARP, FDB, and routing table do not update correctly during DaemonSet build\n  - This can be resolved by deleting and re-running the daemonset (i.e., running it twice).\n\n\n- Communication between nodes is possible, but there are issues with pod-to-pod communication across different nodes.\n    - We are currently investigating the issue, and although there is a potential solution using eBPF, it involves complex aspects, so we are currently putting it on hold.\n\n\n- There is an issue with the proper update of iptables settings.\n  - If the iptables update has not occurred or if internet connectivity is not available within the pod, you must manually execute the following command (per current manual instructions):\n\nYou need to perform this on each node :\n``` \n$ iptables -A FORWARD -s 10.244.0.0/16 -j ACCEPT\n\n$ iptables -A FORWARD -d 10.244.0.0/16 -j ACCEPT \n\n$ iptables -t nat -A POSTROUTING -s 10.244.2.0/24 -j MASQUERADE\n```\n`10.244.2.0/24` : node's PODCIDR\n\n\n    \n  \n\u003e We plan to fix this issue as soon as possible.\n\n## Contributing\nThis project is still under development and there are many areas that need improvement. Feedback and suggestions are always welcome through issues or pull requests\n\n## Contributors\n[Younghwan Kim](https://github.com/royroyee)\n\n## License\n[MIT License](https://github.com/royroyee/bvcni/blob/new_branch/LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Froyroyee%2Fbvcni","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Froyroyee%2Fbvcni","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Froyroyee%2Fbvcni/lists"}