Closed1

AWS EKSでService(Type: LoadBalancer)を作成する際に既存のNLBを再利用したい

harrythecodeharrythecode

何が問題か

AWS EKS上でService(Type: LoadBalancer; NLBを選択)を作成すると1つのサービスにつき1つのNLBが立ち上がります。これは仕様でAWS側も修正する気がなく、Serviceを作るたびに余計なコストをかけたくないので何か策がないかを調べました。

調べた結果以下の2通りがあることが分かりました。

Service (Type: NodePort, LoadBalancer)のイメージが良く分からない方は以下のメモをご確認ください。

https://zenn.dev/link/comments/a6b9d137cc49fc

1. NodePortを使う

LoadBalancerを使わず、NodePortを使い、直接Portを開けてPodへアクセスさせます。

  • 利点: LB不要
  • 欠点: FWの管理とNodeのIPが変更になった場合の対応が必要

2. 手動で既存のNLBにTargetGroupを組み合わせる

AWS公式GithubのIssues[1]で以下が現時点の最適解だそうです。Serviceの数が少ない場合はありかもしれません。

  1. NLBをTerraform等で作成
  2. TargetGroupをTerraform等で作成
  3. 生成されたtargetGroupARNをコピー
  4. 以下のようなkind: TargetGroupBindingのリソース作成 [2]
apiVersion: elbv2.k8s.aws/v1beta1
kind: TargetGroupBinding
metadata:
  name: my-tgb
spec:
  serviceRef:
    name: awesome-service # route traffic to the awesome-service
    port: 80
  targetGroupARN: <arn-to-targetGroup>
  • 利点: コストかからず
  • 欠点: Serviceの数が増えれば増えるほど管理コストが増える
脚注
  1. https://github.com/kubernetes-sigs/aws-load-balancer-controller/issues/2175#issuecomment-1085434935 ↩︎

  2. https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.1/guide/targetgroupbinding/targetgroupbinding/ ↩︎

このスクラップは2023/03/17にクローズされました