{"id":13561160,"url":"https://github.com/purelb/purelb","last_synced_at":"2026-04-11T21:23:42.011Z","repository":{"id":40669248,"uuid":"439422500","full_name":"purelb/purelb","owner":"purelb","description":"PureLB is a Dual-stack Service Load Balancer Controller for Kubernetes.  Slack: https://kubernetes.slack.com/archives/C01BCB7U031","archived":false,"fork":false,"pushed_at":"2026-01-29T19:57:18.000Z","size":39046,"stargazers_count":116,"open_issues_count":10,"forks_count":7,"subscribers_count":5,"default_branch":"main","last_synced_at":"2026-01-30T04:47:35.335Z","etag":null,"topics":["go","ingress-controller","k8s","kubernetes","load-balancer","networking"],"latest_commit_sha":null,"homepage":"https://purelb.io","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/purelb.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-12-17T18:13:02.000Z","updated_at":"2026-01-29T19:56:29.000Z","dependencies_parsed_at":"2023-12-22T15:48:23.509Z","dependency_job_id":"5ae4001b-9fe8-414d-a91f-d74928c38f7a","html_url":"https://github.com/purelb/purelb","commit_stats":{"total_commits":1167,"total_committers":85,"mean_commits":"13.729411764705882","dds":"0.41302485004284495","last_synced_commit":"eb58cb69754f3f8c682fd38847867b9b80a97f8c"},"previous_names":[],"tags_count":93,"template":false,"template_full_name":null,"purl":"pkg:github/purelb/purelb","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/purelb%2Fpurelb","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/purelb%2Fpurelb/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/purelb%2Fpurelb/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/purelb%2Fpurelb/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/purelb","download_url":"https://codeload.github.com/purelb/purelb/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/purelb%2Fpurelb/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28919363,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-30T20:25:28.696Z","status":"ssl_error","status_checked_at":"2026-01-30T20:25:13.426Z","response_time":66,"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":["go","ingress-controller","k8s","kubernetes","load-balancer","networking"],"created_at":"2024-08-01T13:00:53.098Z","updated_at":"2026-04-11T21:23:41.997Z","avatar_url":"https://github.com/purelb.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"# PureLB - is a Service Load Balancer for Kubernetes\n\n[PureLB](https://purelb.io) is a load-balancer orchestrator for  [Kubernetes](https://kubernetes.io) clusters. It uses standard\nLinux networking, integrates goBGP for routing, and works with the operating\nsystems netlink library to add and remove address from interfaces to announce service addresses.\n\n## Documentation\n\n**This documentation is not for this version of Purelb.  There is an older version of Purelb at GitLab.**\n**The best resource for configuring this version of purelb is the samples until the documentation is updated**\n\nhttps://purelb.io/\n\n## Quick Start\n\n\nThe default installation includes [k8gobgp](https://github.com/purelb/k8gobgp) as a sidecar for BGP route announcement. After installing, apply a `BGPConfiguration` CR to configure BGP peering (see [sample](deployments/samples-with-gobgp/sample-bgpconfig.yaml)). If you don't need BGP, use the `-nobgp` manifest variants or set `gobgp.enabled=false` in Helm.\n\n### Option 1: Simple Manifest\n\nInstall PureLB with a single command:\n\n```sh\nkubectl apply -f https://github.com/purelb/purelb/releases/download/v0.16.1/install-v0.16.1.yaml\n```\n\nWithout BGP support:\n\n```sh\nkubectl apply -f https://github.com/purelb/purelb/releases/download/v0.16.1/install-nobgp-v0.16.1.yaml\n```\n\n### Option 2: Helm (Recommended for Production)\n\nInstall PureLB using Helm for more configuration options:\n\n```sh\nhelm repo add purelb https://purelb.github.io/purelb/charts\nhelm install --create-namespace --namespace=purelb-system purelb purelb/purelb\n```\n\nOr using OCI registry (Helm 3.8+, `--version` required):\n\n```sh\nhelm install --create-namespace --namespace=purelb-system purelb \\\n    oci://ghcr.io/purelb/purelb/charts/purelb --version v0.16.1\n```\n\nTo install without BGP support:\n\n```sh\nhelm install --create-namespace --namespace=purelb-system purelb purelb/purelb \\\n    --set gobgp.enabled=false\n```\n\nFor detailed installation and configuration, see https://purelb.github.io/purelb/install/\n\n### Testing Your Installation\n\nPureLB needs a `ServiceGroup` that tells it which addresses to allocate. The\n`deployments/samples` directory contains a working local-pool example with\nboth IPv4 and IPv6 ranges:\n[deployments/samples/local-servicegroup.yaml](deployments/samples/local-servicegroup.yaml).\n\nThe sample subnets (`192.168.254.0/24` and `fd53:9ef0:8683::/120`) will almost\ncertainly **not** be routable on your network. Copy the manifest below into\n`servicegroup.yaml`, replace the `subnet` and `pool` values with a range that\nis free on your LAN, and apply it:\n\n```yaml\n---\napiVersion: purelb.io/v2\nkind: ServiceGroup\nmetadata:\n  name: default\n  namespace: purelb-system\nspec:\n  local:\n    v4pools:\n    - subnet: 192.168.254.0/24            # \u003c-- edit: your LAN subnet\n      pool: 192.168.254.230-192.168.254.240  # \u003c-- edit: free range in that subnet\n      aggregation: default\n    v6pools:\n    - subnet: fd53:9ef0:8683::/120        # \u003c-- edit: your IPv6 subnet (omit this block on IPv4-only clusters)\n      pool: fd53:9ef0:8683::-fd53:9ef0:8683::3\n      aggregation: default\n```\n\n```shell\nkubectl apply -f servicegroup.yaml\n```\n\nDeploy nginx as a test backend — its default image listens on both IPv4 and\nIPv6:\n\n```shell\nkubectl create deployment nginx --image=nginx\n```\n\nExpose it with a dual-stack `LoadBalancer` Service. The sample\n[deployments/samples/sample-nginx-lb.yaml](deployments/samples/sample-nginx-lb.yaml)\nuses `ipFamilyPolicy: PreferDualStack`, so it works unchanged on both\nsingle-stack and dual-stack clusters:\n\n```shell\nkubectl apply -f https://raw.githubusercontent.com/purelb/purelb/main/deployments/samples/sample-nginx-lb.yaml\n```\n\nThe PureLB allocator picks one address per enabled family from the pool and\nwrites them to the Service status. The PureLB node agents elect a winning\nnode per address and configure the local OS to advertise it.\n\nVerify the allocation:\n\n```shell\nkubectl get svc nginx\n```\n\nYou should see one or two addresses in the `EXTERNAL-IP` column depending on\nwhether your cluster is single- or dual-stack. From a host with a route to\nthe pool subnet:\n\n```shell\ncurl      http://\u003cEXTERNAL-IPv4\u003e\ncurl -6   http://[\u003cEXTERNAL-IPv6\u003e]\n```\n\nFor deeper visibility — which node won the election, pool utilization, node\nagent health — install the `kubectl-purelb` plugin described below and run:\n\n```shell\nkubectl purelb status\nkubectl purelb pools\n```\n\n### kubectl-purelb Plugin (optional)\n\nThe `kubectl-purelb` plugin provides operational visibility commands\nfor PureLB clusters: pool utilization, service status, election state,\nBGP sessions, data plane health, and configuration validation.\n\nDownload the binary for your platform from the\n[latest release](https://github.com/purelb/purelb/releases/latest)\nand place it in your PATH:\n\n**Linux (amd64):**\n```shell\ncurl -LO https://github.com/purelb/purelb/releases/latest/download/kubectl-purelb-linux-amd64\nchmod +x kubectl-purelb-linux-amd64\nsudo mv kubectl-purelb-linux-amd64 /usr/local/bin/kubectl-purelb\n```\n\n**macOS (Apple Silicon):**\n```shell\ncurl -LO https://github.com/purelb/purelb/releases/latest/download/kubectl-purelb-darwin-arm64\nchmod +x kubectl-purelb-darwin-arm64\nsudo mv kubectl-purelb-darwin-arm64 /usr/local/bin/kubectl-purelb\n```\n\nTo build the plugin from source, see [BUILDING.md](BUILDING.md).\n\n**Verify and use:**\n```shell\nkubectl purelb version\nkubectl purelb status\nkubectl purelb pools\nkubectl purelb bgp sessions\n```\n\n## Building\n\nPureLB is built with `make` (container images via [ko](https://ko.build/)\nunder the hood). See [BUILDING.md](BUILDING.md) for Makefile targets,\nCI/CD, running PureLB locally against a test cluster, and building images\nto your own registry or to a tarball.\n\n## Credits\n\nPureLB was forked from MetalLB in 2020.  We believed a better solution was to use Linux networking functionality instead of working around it but the maintainers at the time had no interest in making any changes.  We would like to acknowledge the original developer, [Dave Anderson](https://www.dave.tf/) we hope you would be pleased with our work!!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpurelb%2Fpurelb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpurelb%2Fpurelb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpurelb%2Fpurelb/lists"}