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. AWS Load balancer controller使用下でのAWSリソースのラ
    イフサイクル分離

    View Slide

  2. © 2023 3-shake Inc. 2
    自己紹介
    - 所属: 株式会社スリーシェイク Sreake事業部
    - 業務: エンジニアの端くれ。インフラ弄ったり、コード読み書きしたり
    - 最近は組織とエンジニアリングについて悶々と考えてみたり
    - 趣味: 車・酒・雪
    永瀬滉平

    View Slide

  3. © 2023 3-shake Inc. 3
    AWS Load Balancer Controllerを使った、EKSと
    Load Balancerの管理(棲み分け)のお話です!

    View Slide

  4. © 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

    View Slide

  5. © 2023 3-shake Inc. 5
    何に困っていたの?
    EKSを軸に据えた設計・環境構築を行っていた。諸々 AWSリソースはTerraformでコードで管理していた。
    EKSクラスタで動くアプリケーションへの受け口として ELB(ALB)を据えることとしてAWS Load Balancer
    Controllerにて管理を行おうとしていた。

    View Slide

  6. © 2023 3-shake Inc. 6
    どんな課題があったの?
    課題感・ニーズ
    ● AWSリソースをKubernetesの中の世界で定義すると、Terraformで管理しているものと部分的に別れて違和感があった
    ● Nginx Ingress ControllerやIstio-Ingressgatewayなどを介さずGKEとCloud Loadbalancerの組み合わせでNetwork
    Endpoint Groupを用いたときのイメージで運用したかった

    View Slide

  7. © 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でいけた!!

    View Slide

  8. © 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モードでの登録を利用して、同等の設計とできた
    各課題に対して以下のような結果になりました

    View Slide

  9. Thank you

    View Slide