AWSとTerraformで学ぶプロダクションレディーなKubernetesのメモ
2022年8月時点でのメモ
本書での前提となる各バージョンが古かったため検証は以下で実施している
Terraform 1.27
Kubernetes 1.23
terraform-aws-modules/eks/aws 18.27.1
なぜこの本を買ったか
eksctl に依存しない EKS クラスターの構築手段を知りたかったため
AWS の環境構築はすべて Terraform で完結させたい
ハマったこと
sock-shop が表示できない
本書の2.5まで進めた時点で sock-shop が表示されず原因調査
試しにEC2のセキュリティグループを編集しNordPortである30001をインバウンドに追加すると表示されるようになった
原因
terraform-aws-modules/eks/aws のバージョンが書籍と異なるため、launch_template によるセキュリティーグループの指定方法が変わっていた
書籍と同じ記述で terraform apply すると、eks モジュールが自動作成する launch_template のセキュリティグループがEC2インスタンスに適用されてしまう
解決方法
eks_managed_node_groups 内の create_launch_template を false にすることで自動生成されるテンプレートの適用を回避できる
code:eks.tf
module "eks" {
source = "terraform-aws-modules/eks/aws"
version = "~> 18.0"
cluster_name = local.cluster_name
cluster_version = local.cluster_version
subnet_ids = module.vpc.public_subnets
vpc_id = module.vpc.vpc_id
eks_managed_node_groups = {
green = {
desired_size = 1
min_size = 1
max_size = 1
create_launch_template = false
launch_template_name = aws_launch_template.eks_example.name
launch_template_version = aws_launch_template.eks_example.default_version
}
}
tags = {
Environment = "dev"
Terraform = "true"
}
}
resource "aws_launch_template" "eks_example" {
name_prefix = "external-eks-ex-"
description = "EKS managed node group external launch template"
update_default_version = true
network_interfaces {
security_groups = [
module.eks.cluster_primary_security_group_id,
aws_security_group.node_example.id
]
}
}
参考