概要
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
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のマニフェストを変更する。
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翻訳使いまくってるけど