Member-only story

本番環境に適したEKSクラスタの設計とプロビジョニング方法(後半)

gavin.zhou
10 min readMay 13, 2022

--

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

--

--

No responses yet