{"id":15292891,"url":"https://github.com/frantjc/port-forward","last_synced_at":"2026-04-29T08:04:39.879Z","repository":{"id":257804353,"uuid":"861121772","full_name":"frantjc/port-forward","owner":"frantjc","description":"Port forward to internal Kubernetes Services.","archived":false,"fork":false,"pushed_at":"2025-12-13T22:33:41.000Z","size":168,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-23T08:11:54.141Z","etag":null,"topics":["go","golang","kubernetes","kubernetes-controller","kubernetes-operator","networking"],"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/frantjc.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":"2024-09-22T03:57:53.000Z","updated_at":"2025-12-13T22:33:44.000Z","dependencies_parsed_at":"2024-10-28T13:47:03.502Z","dependency_job_id":"1eb10bf3-d921-4f2f-9150-4b223daa8e1c","html_url":"https://github.com/frantjc/port-forward","commit_stats":null,"previous_names":["frantjc/port-forward"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/frantjc/port-forward","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frantjc%2Fport-forward","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frantjc%2Fport-forward/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frantjc%2Fport-forward/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frantjc%2Fport-forward/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/frantjc","download_url":"https://codeload.github.com/frantjc/port-forward/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frantjc%2Fport-forward/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32416147,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-29T06:29:02.080Z","status":"ssl_error","status_checked_at":"2026-04-29T06:29:00.631Z","response_time":110,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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","golang","kubernetes","kubernetes-controller","kubernetes-operator","networking"],"created_at":"2024-09-30T16:30:38.218Z","updated_at":"2026-04-29T08:04:39.874Z","avatar_url":"https://github.com/frantjc.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# port-forward [![CI](https://github.com/frantjc/port-forward/actions/workflows/ci.yml/badge.svg?branch=main\u0026event=push)](https://github.com/frantjc/port-forward/actions) [![godoc](https://pkg.go.dev/badge/github.com/frantjc/port-forward.svg)](https://pkg.go.dev/github.com/frantjc/port-forward) [![goreportcard](https://goreportcard.com/badge/github.com/frantjc/port-forward)](https://goreportcard.com/report/github.com/frantjc/port-forward)\n\nPort Forward is a Kubernetes Controller that forwards external ports to Kubernetes Services of type LoadBalancer which have been assigned private IP addresses. This is useful for clusters using something like MetalLB to expose Services internally that then want to expose some of them externally.\n\n## use\n\nInstall Port Forward:\n\n```sh\nkubectl kustomize 'https://github.com/frantjc/port-forward/config/manager?ref=v0.1.9' | kubectl apply -f-\n```\n\n\u003e Don't have MetalLB or something else to assign an IP address to the Service? Try adding the argument `--override-ip-address=192.168.0.11` to Port Forward.\n\nAnd give it something to do:\n\n```sh\nkubectl apply -f - \u003c\u003cEOF\napiVersion: v1\nkind: Service\nmetadata:\n  name: sample\n  annotations:\n    pf.frantj.cc/forward: \"yes\"\nspec:\n  type: LoadBalancer\n  ports:\n    - port: 443\n      targetPort: 443\n  selector:\n    your-label: your-pod\nEOF\n```\n\n\u003e See [sample](./config/samples/service.yaml) for full list of supported annotations and their descriptions.\n\n## developing\n\nYou’ll need a Kubernetes cluster to run against. You can use [KIND](https://sigs.k8s.io/kind) to get a local cluster for testing. Running against a remote cluster is likely not to work as the UPnP implementation relies on being on the host network of a Node of the cluster.\n\nPort Forward will automatically use the current context in your kubeconfig file (i.e. whatever cluster `kubectl cluster-info` shows).\n\nUses the Kubernetes [Operator pattern](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/).\n\nUses a [Controller](https://kubernetes.io/docs/concepts/architecture/controller/), which provides a reconcile function responsible for continually synchronizing Services of type LoadBalancer to reach and maintain the desired state.\n\nMore information can be found via the [Kubebuilder Documentation](https://book.kubebuilder.io/introduction.html).\n\nUses SNAT and UPnP to tell a router what to port forward. Written in such a way that more secure implementations can be written for networking devices that support them such as OPNsense.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrantjc%2Fport-forward","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffrantjc%2Fport-forward","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrantjc%2Fport-forward/lists"}