Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS Load balancer controller使用下でのAWSリソースのライフサイクル分離

k-nagase
October 12, 2023

AWS Load balancer controller使用下でのAWSリソースのライフサイクル分離

k-nagase

October 12, 2023
Tweet

More Decks by k-nagase

Other Decks in Programming

Transcript

  1. © 2023 3-shake Inc. 2 自己紹介 - 所属: 株式会社スリーシェイク Sreake事業部

    - 業務: エンジニアの端くれ。インフラ弄ったり、コード読み書きしたり - 最近は組織とエンジニアリングについて悶々と考えてみたり - 趣味: 車・酒・雪 永瀬滉平
  2. © 2023 3-shake Inc. 3 AWS Load Balancer Controllerを使った、EKSと Load

    Balancerの管理(棲み分け)のお話です!
  3. © 2023 3-shake Inc. 4 AWS Load Balanacer Controllerについて Kubernetes向けに立てられるAWSのELB管理をKubernetesの世界(マニフェスト)で行う

    ことができるようにするツール apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: alb.ingress.kubernetes.io/ssl-redirect: '443' alb.ingress.kubernetes.io/backend-protocol-version: GRPC alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]' alb.ingress.kubernetes.io/scheme: internet-facing alb.ingress.kubernetes.io/target-type: ip labels: app: grpcserver environment: dev name: grpcserver namespace: grpcserver spec: ingressClassName: alb rules: - host: grpcserver.example.com http: paths: - backend: service: name: grpcserver port: number: 50051 path: /helloworld.Greeter pathType: Prefix https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.6/how-it-works/ https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/examples/grpc/grpcserver-ingress.yaml
  4. © 2023 3-shake Inc. 6 どんな課題があったの? 課題感・ニーズ • AWSリソースをKubernetesの中の世界で定義すると、Terraformで管理しているものと部分的に別れて違和感があった •

    Nginx Ingress ControllerやIstio-Ingressgatewayなどを介さずGKEとCloud Loadbalancerの組み合わせでNetwork Endpoint Groupを用いたときのイメージで運用したかった
  5. © 2023 3-shake Inc. 7 apiVersion: elbv2.k8s.aws/v1beta1 kind: TargetGroupBinding metadata:

    name: argocd-server namespace: argocd spec: serviceRef: name: argocd-server port: 80 targetType: "ip" targetGroupARN: "arn:aws:elasticloadbalancing:ap-northeast-1:012345678901:targetgroup/xxxxx" networking: ingress: - from: - securityGroup: groupID: "sg-xxxxxxxxx" ports: - protocol: TCP TargetGroupにPod IPを追加するだけ TargetGroupBindingでいけた!!
  6. © 2023 3-shake Inc. 8 まとめ • AWSリソースをKubernetesの中の世界で定義すると、Terraformで管理しているものと部分的に別れて違和感があった → AWSリソースはTerraformでくっきり管理できて、Kubernetesの世界との棲み分けがスッキリした

    → ListenerRuleの重み付けを用いたカナリアリリースがTerraformで完結できるようになった • Nginx Ingress ControllerやIstio-Ingressgatewayなどを介さずGKEとCloud Loadbalancerの組み合わせでNetwork Endpoint Groupを用いたときのイメージで運用したかった → TargetGroupへのIPモードでの登録を利用して、同等の設計とできた 各課題に対して以下のような結果になりました