Edited at

EKSで作成されたロードバランサにACMで発行した証明書を当てる

More than 1 year has passed since last update.


概要

EKSによって作成されるロードバランサにACMで発行した証明書を適用して、HTTPSなアプリ(サイト)にする

EKS : Amazon Elastic Container Service for Kubernetes

ACM : AWS Certificate Manager


EKSがロードバランサを作成?

EKSというかKubernetesというか、あいつらが裏側でいろんなAWSリソースを作成するような仕組みになってます。

ロードバランサやらENIやら、いろいろと作られるっぽい。

その作成権限を与えるために、クラスタ作成時にIAMロールを選択しますよね。


Select the IAM Role to allow Amazon EKS and the Kubernetes control plane to manage AWS resources on your behalf.

あなたの代わりにEKSやKubernetesがAWSリソースを管理できるようにするために、IAMロールを選んでね。



作成された時点でのロードバランサ

こんな感じでマニフェストからserviceを作るとする。

$ kubectl create -f service.yml


service.yml

kind: Service

apiVersion: v1
metadata:
name: eks-service
spec:
type: LoadBalancer
selector:
app: rails-api
ports:
- protocol: TCP
port: 80
targetPort: 3000

serviceが作成された時点で、EKSによりロードバランサが作られる。

それを確認すべく、以下のコマンドを打つ。

$ kubectl describe services

こんな項目を見つける

LoadBalancer Ingress: xxxxxxxxxx.us-east-1.elb.amazonaws.com

xxxxxxxxxx.us-east-1.elb.amazonaws.com がアプリのエンドポイント。

ブラウザに貼り付けてEnterしてみると

http://xxxxxxxxxx.us-east-1.elb.amazonaws.com

で繋がっていることが確認できると思う。


http が許されるのは小学生までだよね

って言われそうなので https を使うことにします。

serviceのマニフェストを変更する。


service.yml

kind: Service

apiVersion: v1
metadata:
name: eks-service
annotations:
service.beta.kubernetes.io/aws-load-balancer-ssl-cert: <ACMで作成した証明書のARN>
service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "443"
spec:
type: LoadBalancer
selector:
app: rails-api
ports:
- protocol: TCP
port: 443
targetPort: 3000


  • ACMで作成した証明書をロードバランサに適用


    • あらかじめ作成しておいてください



  • ロードバランサより内側での通信はhttpで行う


    • プライベートサブネットにインスタンスを置いている場合などはこんな感じの設定でOK



  • 443ポートでhttpsな通信を受け付ける


感想


  • kubernetesの公式サイトをちゃんと見ていない僕「手動で証明書適用しないとだめなのかな...」

  • kubernetesの公式サイトをちゃんと見たあとの僕「全部書いてるやん!!!」

手動で頑張らなくて良い証明書の当て方はkubernetesの公式にありましたとさ。

"SSL support on AWS" って見出しところ。

マニフェストに記述するだけで済んで楽でした。

まだベータ版なのかな? というところがちょっと気になりポイント。


最後に

なんだかんだ公式が最強なので英語だけど頑張って読みましょう。

僕はGoogle翻訳使いまくってるけど