Member-only story
本番環境に適したEKSクラスタの設計とプロビジョニング方法(後半)
TerraformやHelmなどのオープンソースツールを使って、AWS上にプロダクショングレードのKubernetesクラスタを作成・コンフィギュアするための包括的なガイドです。長い記事なので前半と後半の2回に分けて投稿します。今回は後半です。
EKSアドオンを賢く活用する
最近まで、EKSユーザーはkube-proxy、core-dns、VPC CNIなどのKubernetesコンポーネントを自己管理する必要がありました。1.18以降のEKSクラスタについては、Amazonがこれらのコンポーネントごとにマネージドバージョンを提供し、最新のセキュリティパッチやバグフィックスがAWSによってバリデーションされるようになっています。
新しいクラスタでは、core-dnsの構成に大規模な変更が予想されない限り、kube-proxyとcore-dnsアドオンを選択します。VPC CNIに関しては、上記の修正または設計上の決定(AWS VPC CNIの使用とオープンソースの代替品の比較など)に応じて回答が異なります。EBS CSIドライバアドオンもありますが、プレビューリリースでしか利用できないので、今後のリリースでGAになるまで待ちたいと思います。
Encrypt etcd and EBS Volumes
Kubernetesのシークレットは、デフォルトではマスターノードのetcdに暗号化されずに保存されます。EKSでは、KMSを使用してKubernetesのシークレットのエンベロープ暗号化を有効にするオプションがありますが、見落としがちなのがこの点です。EKSモジュールのcluster_encryption_configブロックをコンフィギュアします。
cluster_encryption_config = [{provider_key_arn = aws_kms_key.eks.arnresources = ["secrets"]}]
そして、それに応じてKMSリソースを作成します。
resource "aws_kms_key" "eks" {description = "EKS Secret Encryption Key"deletion_window_in_days = 7enable_key_rotation = truetags = local.tags}resource "aws_kms_key" "ebs" {description = "Customer managed key to…