{"id":36866996,"url":"https://github.com/lothar1998/kuberesolver-java","last_synced_at":"2026-01-12T14:55:08.544Z","repository":{"id":292747498,"uuid":"968580567","full_name":"lothar1998/kuberesolver-java","owner":"lothar1998","description":"Kuberesolver for Java","archived":false,"fork":false,"pushed_at":"2025-06-25T16:38:09.000Z","size":104,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-25T17:38:45.065Z","etag":null,"topics":["grpc","kuberesolver","kubernetes","loadbalancing","nameresolver","resolver"],"latest_commit_sha":null,"homepage":"","language":"Java","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/lothar1998.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}},"created_at":"2025-04-18T10:42:45.000Z","updated_at":"2025-05-12T20:41:56.000Z","dependencies_parsed_at":"2025-05-12T09:02:08.814Z","dependency_job_id":null,"html_url":"https://github.com/lothar1998/kuberesolver-java","commit_stats":null,"previous_names":["lothar1998/kuberesolver-java"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/lothar1998/kuberesolver-java","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lothar1998%2Fkuberesolver-java","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lothar1998%2Fkuberesolver-java/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lothar1998%2Fkuberesolver-java/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lothar1998%2Fkuberesolver-java/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lothar1998","download_url":"https://codeload.github.com/lothar1998/kuberesolver-java/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lothar1998%2Fkuberesolver-java/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28340412,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T12:22:26.515Z","status":"ssl_error","status_checked_at":"2026-01-12T12:22:10.856Z","response_time":98,"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":["grpc","kuberesolver","kubernetes","loadbalancing","nameresolver","resolver"],"created_at":"2026-01-12T14:55:08.410Z","updated_at":"2026-01-12T14:55:08.517Z","avatar_url":"https://github.com/lothar1998.png","language":"Java","readme":"# kuberesolver-java\nA gRPC name resolver that uses a Kubernetes API to discover backend servers via `Service` name. This library uses\nonly the JSON parsing library as the dependency to do not blow your dependency tree.\n\n### Usage\n#### Maven\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003eio.github.lothar1998\u003c/groupId\u003e\n    \u003cartifactId\u003ekuberesolver-java\u003c/artifactId\u003e\n    \u003cversion\u003e0.0.2\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n#### Gradle\n```groovy\nimplementation 'io.github.lothar1998:kuberesolver-java:0.0.2'\n```\nThen register `KubernetesNameResolverProvider` in default registry:\n```java\nimport io.github.lothar1998.kuberesolver.KubernetesNameResolverProvider;\nimport io.grpc.ManagedChannelBuilder;\nimport io.grpc.NameResolverRegistry;\n\npublic class App {\n    public static void main(String[] args) {\n        // register global Kubernetes name resolver provider\n        NameResolverRegistry.getDefaultRegistry().register(new KubernetesNameResolverProvider());\n\n        // build gRPC channel as usual\n        var channel = ManagedChannelBuilder\n                .forTarget(\"kubernetes:///service-name:port\")\n                .build();\n    }\n}\n```\n\n### Supported targets\nThis library supports all targets from the below list:\n```\nkubernetes:///service-name\nkubernetes:///service-name:8080\nkubernetes:///service-name:portname\nkubernetes:///service-name.namespace:8080\nkubernetes:///service-name.namespace.svc.cluster_name\nkubernetes:///service-name.namespace.svc.cluster_name:8080\n\nkubernetes://namespace/service-name:8080\nkubernetes://service-name\nkubernetes://service-name:8080/\nkubernetes://service-name.namespace:8080/\nkubernetes://service-name.namespace.svc.cluster_name\nkubernetes://service-name.namespace.svc.cluster_name:8080\n```\n\n#### Namespace handling\nIf the namespace is not explicitly provided in the target URI, the resolver will first attempt to read the current pod's namespace from the mounted file at `/var/run/secrets/kubernetes.io/serviceaccount/namespace`. If this file is not found or cannot be read, it will default to using the `default` namespace.\n\n#### Port handling\nIf the port is not specified in the URI, the resolver will use any of the ports defined in the Kubernetes `EndpointSlice`. Alternatively, a port can be specified by its name in the URI (e.g., `kubernetes:///myservice:grpc`), in which case the resolver will look for an `EndpointSlice` port with that name. If a numerical port is provided, that port will be used.\n\n### Alternative scheme \nYou can use alternative schema (other than `kubernetes`) by using overloaded constructor:\n```new KubernetesNameResolverProvider(\"my-custom-scheme\")```.\n\n### RBAC\nIf you are using RBAC in you Kubernetes cluster, you have to give `WATCH` access to `endpointslices` resource \n to allow the resolver to discover the backend servers.\n\n### Acknowledgements\n\nThis project is inspired by https://github.com/sercand/kuberesolver.\nSpecial thanks to the authors for their foundational work and design ideas.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flothar1998%2Fkuberesolver-java","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flothar1998%2Fkuberesolver-java","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flothar1998%2Fkuberesolver-java/lists"}