{"id":16182443,"url":"https://github.com/monder/service-target-group","last_synced_at":"2026-05-10T06:45:24.818Z","repository":{"id":75163020,"uuid":"148287049","full_name":"monder/service-target-group","owner":"monder","description":"Kubernetes controller that registers service endpoints in AWS target group","archived":false,"fork":false,"pushed_at":"2020-05-12T17:31:51.000Z","size":23,"stargazers_count":3,"open_issues_count":1,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-13T15:18:14.754Z","etag":null,"topics":["alb","aws","aws-eks","aws-load-balancer","aws-vpc","eks","ingress","ingress-controller","k8s","kubernetes"],"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/monder.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":"2018-09-11T08:41:16.000Z","updated_at":"2021-11-24T10:09:14.000Z","dependencies_parsed_at":"2023-03-11T18:34:22.732Z","dependency_job_id":null,"html_url":"https://github.com/monder/service-target-group","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/monder%2Fservice-target-group","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/monder%2Fservice-target-group/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/monder%2Fservice-target-group/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/monder%2Fservice-target-group/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/monder","download_url":"https://codeload.github.com/monder/service-target-group/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247652666,"owners_count":20973670,"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":["alb","aws","aws-eks","aws-load-balancer","aws-vpc","eks","ingress","ingress-controller","k8s","kubernetes"],"created_at":"2024-10-10T06:31:43.994Z","updated_at":"2026-05-10T06:45:19.780Z","avatar_url":"https://github.com/monder.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n![Docker Build Status](https://img.shields.io/docker/build/monder/service-target-group.svg)\n[![Go Report Card](https://goreportcard.com/badge/github.com/monder/service-target-group)](https://goreportcard.com/report/github.com/monder/service-target-group)\n![MicroBadger Size](https://img.shields.io/microbadger/image-size/monder/service-target-group/latest.svg)\n![GitHub](https://img.shields.io/github/license/monder/service-target-group.svg)\n\n\n\u003e Kubernetes controller that registers service endpoints in AWS target group\n\n## Summary\n\nThis project was created as an alternative to built-in [LoadBalancer](https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer) and [aws-alb-ingress-controller](https://github.com/kubernetes-sigs/aws-alb-ingress-controller). Main difference from ingress controller is that it does not create any new AWS resources. It could be handy when migrating infrastructure to kubernetes and want to reuse existing load balancers that are managed elsewhere.\n\n## Overview\n\nThis controller assumes that you have existing ALB configured with some target groups. It also requires that your pods have routable IP addresses within the VPC. This could be achived by using [vpc-cni](https://github.com/aws/amazon-vpc-cni-k8s) plugin.\n\nLets have a service defined as:\n```yaml\nkind: Service\napiVersion: v1\nmetadata:\n  name: foo\n  annotations:\n    stg.monder.cc/target-group: arn:aws:elasticloadbalancing:eu-west-1:000000000000:targetgroup/foo/bar\nspec:\n  clusterIP: None\n  selector:\n    name: foo\n  ports:\n  - protocol: TCP\n    port: 3000\n    targetPort: 3000\n```\nWhen new pod is added and its endpoint becomes `ready`, it will be added to target group provided in annotation. When pod is removed it will automatically be removed from the group.\n\nKubernetes:\n\n\u003cimg width=\"759\" alt=\"image 2018-10-07 at 11 23 07 am\" src=\"https://user-images.githubusercontent.com/232147/46579958-b4c0cb00-ca23-11e8-841e-03ccd6796313.png\"\u003e\n\nAWS:\n\n\u003cimg width=\"410\" alt=\"image 2018-10-07 at 11 21 48 am\" src=\"https://user-images.githubusercontent.com/232147/46579956-b25e7100-ca23-11e8-8b8e-72bbbf632d1f.png\"\u003e\n\n\n**Please note that AWS target group type must be `ip`. See more [here](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html#target-type)**\n\n## Setup\n\nController requires following [IAM policy](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html):\n```json\n{\n    \"Effect\": \"Allow\",\n    \"Action\": [\n        \"elasticloadbalancing:DescribeTargetHealth\",\n        \"elasticloadbalancing:RegisterTargets\",\n        \"elasticloadbalancing:DeregisterTargets\"\n    ],\n    \"Resource\": \"*\"\n},     \n```\n\nController definition:\n```yaml\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: stg-controller\nspec:\n  selector:\n    matchLabels:\n      name: stg-controller\n  replicas: 1\n  template:\n    metadata:\n      annotations:\n        iam.amazonaws.com/role: stg_controller\n      labels:\n        name: stg-controller\n    spec:\n      serviceAccountName: stg-controller\n      containers:\n      - name: stg-controller\n        image: monder/service-target-group:latest\n        args:\n        - -namespaces=default,public\n---\nkind: ClusterRole\napiVersion: rbac.authorization.k8s.io/v1\nmetadata:\n  name: stg-controller\nrules:\n- apiGroups: [\"\"]\n  resources: [\"services\", \"endpoints\"]\n  verbs: [\"get\", \"watch\", \"list\"]\n---\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: stg-controller\n  namespace: default\n---\napiVersion: rbac.authorization.k8s.io/v1beta1\nkind: ClusterRoleBinding\nmetadata:\n  name: stg-controller\nroleRef:\n  apiGroup: rbac.authorization.k8s.io\n  kind: ClusterRole\n  name: stg-controller\nsubjects:\n- kind: ServiceAccount\n  name: stg-controller\n  namespace: default\n```\n\n## TODO\n\n* Deregister all targets when kubernetes service is destroyed.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmonder%2Fservice-target-group","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmonder%2Fservice-target-group","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmonder%2Fservice-target-group/lists"}