From a0e37cdcf633cd2e796d675845165fd652d2803e Mon Sep 17 00:00:00 2001 From: rlewkowicz Date: Fri, 22 Apr 2022 13:17:03 -0400 Subject: [PATCH] init --- README.md | 33 +++++++++ docs/arch.jpeg | Bin 0 -> 80654 bytes files/storageclass.yaml | 11 +++ iam.tf | 142 +++++++++++++++++++++++++++++++++++++ main.tf | 152 ++++++++++++++++++++++++++++++++++++++++ manifests.tf | 40 +++++++++++ providers.tf | 18 +++++ variables.tf | 26 +++++++ 8 files changed, 422 insertions(+) create mode 100644 README.md create mode 100644 docs/arch.jpeg create mode 100644 files/storageclass.yaml create mode 100644 iam.tf create mode 100644 main.tf create mode 100644 manifests.tf create mode 100644 providers.tf create mode 100644 variables.tf diff --git a/README.md b/README.md new file mode 100644 index 0000000..e51eb64 --- /dev/null +++ b/README.md @@ -0,0 +1,33 @@ +# Preface + +This is a very simple, opinionated module to give you an eks cluster and associated efs store so your pvcs can cross AZ's. Note that efs is considerably slow, so if you're running a website or something of the sort, you're going to want either nginx micro caching or varnish in front of it. However you want to limit page rendering. + +Its a very simple and powerful architechture. + +![arch](docs/arch.jpeg) + +I don't expose instance size and a handful of other things at this time. This will accompany a blog post, of which the goal is to provide one of the cheapest, cost stable, k8s implimentations out there. EFS is cheap, you get 12 spot instances totaling 24 cores and 24 gigs of ram for 60/mo. For just managed eks and nodes that's about 132/mo. You'll see a little creep on this with alb and efs costs, but it should be negliglble. I'd say I highly doubt this ecosystem will exceed 200/mo. Some of the fully abstracted k8's services are cheap at a first glance, but they scale rapidly with compute needs. This maintains a mostly fixed cost (I think everyone nails you on network costs, it's like pennies though for fairly massive amounts of data). + +I use the default public subnets, otherwise you need nat instances for private outbound and that costs money. + +# K8 Components + +Out of the box, it will configure and install the EFS csi driver and generate the associated iam policy and service accounts against the OIDC endpoint. + +It will also configure external DNS, again with associated iam policies and service accounts. + +You also get nginx as a service which creates an assoicarted loadbalncer. External dns will key on ingress objects you create and create alias records to your load balancer. + + + +## Inputs + +| Name | Description | Type | Default | Required | +|------|-------------|------|---------|:--------:| +| [name](#input\_name) | n/a | `string` | `"k8s"` | no | +| [namespace](#input\_namespace) | n/a | `string` | `"playground"` | no | +| [region](#input\_region) | n/a | `string` | n/a | yes | +| [stage](#input\_stage) | n/a | `string` | `"dev"` | no | +| [subnet\_ids](#input\_subnet\_ids) | n/a | `list(string)` | n/a | yes | +| [vpc\_id](#input\_vpc\_id) | n/a | `string` | n/a | yes | + \ No newline at end of file diff --git a/docs/arch.jpeg b/docs/arch.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..43719ddf04498a706def1a091fcc5d3db329b07a GIT binary patch literal 80654 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

b5c2Wg^PPAi?}{f>r1_x8 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 literal 0 HcmV?d00001 diff --git a/files/storageclass.yaml b/files/storageclass.yaml new file mode 100644 index 0000000..c7b1a79 --- /dev/null +++ b/files/storageclass.yaml @@ -0,0 +1,11 @@ +kind: StorageClass +apiVersion: storage.k8s.io/v1 +metadata: + name: efs-sc +provisioner: efs.csi.aws.com +parameters: + provisioningMode: efs-ap + fileSystemId: ##FS_ID## + directoryPerms: "755" + gidRangeStart: "1000" # optional + gidRangeEnd: "2000" # optional diff --git a/iam.tf b/iam.tf new file mode 100644 index 0000000..49acde3 --- /dev/null +++ b/iam.tf @@ -0,0 +1,142 @@ +resource "aws_iam_policy" "external_dns_policy" { + name = "${module.eks_cluster.eks_cluster_id}-external-dns" + description = "policy to allow k8s external dns for ${module.eks_cluster.eks_cluster_id}" + + policy = jsonencode({ + "Version" : "2012-10-17", + "Statement" : [ + { + "Effect" : "Allow", + "Action" : [ + "route53:ChangeResourceRecordSets" + ], + "Resource" : [ + "arn:aws:route53:::hostedzone/*" + ] + }, + { + "Effect" : "Allow", + "Action" : [ + "route53:ListHostedZones", + "route53:ListResourceRecordSets" + ], + "Resource" : [ + "*" + ] + } + ] + }) +} + +resource "aws_iam_policy" "efs_csi_policy" { + name = "${module.eks_cluster.eks_cluster_id}-efs_csi_policy" + description = "${module.eks_cluster.eks_cluster_id} efs csi policy" + + policy = jsonencode({ + "Version" : "2012-10-17", + "Statement" : [ + { + "Effect" : "Allow", + "Action" : [ + "elasticfilesystem:DescribeAccessPoints", + "elasticfilesystem:DescribeFileSystems" + ], + "Resource" : "*" + }, + { + "Effect" : "Allow", + "Action" : [ + "elasticfilesystem:CreateAccessPoint" + ], + "Resource" : "*", + "Condition" : { + "StringLike" : { + "aws:RequestTag/efs.csi.aws.com/cluster" : "true" + } + } + }, + { + "Effect" : "Allow", + "Action" : "elasticfilesystem:DeleteAccessPoint", + "Resource" : "*", + "Condition" : { + "StringEquals" : { + "aws:ResourceTag/efs.csi.aws.com/cluster" : "true" + } + } + } + ] + }) +} + +resource "aws_iam_role" "efs_csi_role" { + depends_on = [module.eks_cluster.eks_cluster_identity_oidc_issuer_arn] + name = "${module.eks_cluster.eks_cluster_id}-efs-csi-role" + + assume_role_policy = jsonencode( + { + "Version" : "2012-10-17", + "Statement" : [ + { + "Effect" : "Allow", + "Principal" : { + "Federated" : "${module.eks_cluster.eks_cluster_identity_oidc_issuer_arn}" + }, + "Action" : "sts:AssumeRoleWithWebIdentity", + "Condition" : { + "StringEquals" : { + "${replace(module.eks_cluster.eks_cluster_identity_oidc_issuer, "https://", "")}:sub" : "system:serviceaccount:kube-system:efs-csi-controller-sa", + "${replace(module.eks_cluster.eks_cluster_identity_oidc_issuer, "https://", "")}:aud" : "sts.amazonaws.com" + } + } + } + ] + } + ) +} + +resource "kubernetes_service_account" "efs-csi-controller-sa" { + metadata { + name = "efs-csi-controller-sa" + namespace = "kube-system" + annotations = { "eks.amazonaws.com/role-arn" : "${aws_iam_role.efs_csi_role.arn}" } + } +} + +resource "aws_iam_role" "external_dns_controller_role" { + depends_on = [module.eks_cluster.eks_cluster_identity_oidc_issuer_arn] + name = "${module.eks_cluster.eks_cluster_id}-external-dns" + + assume_role_policy = jsonencode( + { + "Version" : "2012-10-17", + "Statement" : [ + { + "Effect" : "Allow", + "Principal" : { + "Federated" : "${module.eks_cluster.eks_cluster_identity_oidc_issuer_arn}" + }, + "Action" : "sts:AssumeRoleWithWebIdentity", + "Condition" : { + "StringEquals" : { + "${replace(module.eks_cluster.eks_cluster_identity_oidc_issuer, "https://", "")}:sub" : "system:serviceaccount:external-dns:external-dns-controller", + "${replace(module.eks_cluster.eks_cluster_identity_oidc_issuer, "https://", "")}:aud" : "sts.amazonaws.com" + } + } + } + ] + } + ) +} + +resource "aws_iam_role_policy_attachment" "external_dns_policy_external_dns_controller_role" { + policy_arn = aws_iam_policy.external_dns_policy.arn + role = aws_iam_role.external_dns_controller_role.name + depends_on = [aws_iam_role.external_dns_controller_role] +} + +resource "aws_iam_role_policy_attachment" "efs_controller" { + policy_arn = aws_iam_policy.efs_csi_policy.arn + role = aws_iam_role.efs_csi_role.name + depends_on = [aws_iam_role.efs_csi_role] +} \ No newline at end of file diff --git a/main.tf b/main.tf new file mode 100644 index 0000000..3ef5124 --- /dev/null +++ b/main.tf @@ -0,0 +1,152 @@ +module "eks_cluster" { + source = "cloudposse/eks-cluster/aws" + version = "0.45.0" + + namespace = var.namespace + stage = var.stage + name = var.name + + region = var.region + create_security_group = true + + vpc_id = var.vpc_id + subnet_ids = var.subnet_ids + kubernetes_version = "1.22" + oidc_provider_enabled = true + + enabled_cluster_log_types = [] + + wait_for_cluster_command = "curl --silent --fail --retry 90 --retry-delay 5 --retry-connrefused --insecure --output /dev/null $ENDPOINT/healthz" +} + + +module "eks_node_group" { + source = "cloudposse/eks-node-group/aws" + version = "0.28.0" + + namespace = var.namespace + stage = var.stage + name = var.name + + instance_types = ["t3a.small"] + subnet_ids = var.subnet_ids + cluster_name = module.eks_cluster.eks_cluster_id + desired_size = 12 + min_size = 6 + max_size = 12 + kubernetes_version = ["1.22"] + resources_to_tag = ["instance", "volume", "network-interface"] + label_key_case = "title" + capacity_type = "SPOT" + + associated_security_group_ids = [module.eks_cluster.security_group_id] + + depends_on = [module.eks_cluster.kubernetes_config_map_id] + + create_before_destroy = true + + node_group_terraform_timeouts = [{ + create = "40m" + update = null + delete = "20m" + }] +} + +module "efs" { + source = "cloudposse/efs/aws" + version = "0.32.6" + + + namespace = var.namespace + stage = var.stage + name = var.name + region = var.region + vpc_id = var.vpc_id + subnets = var.subnet_ids + + allowed_security_group_ids = [module.eks_cluster.security_group_id] +} + +resource "helm_release" "cert_manager" { + depends_on = [module.eks_node_group] + + name = "cert-manager" + repository = "https://charts.jetstack.io" + chart = "cert-manager" + version = "v1.7.1" + namespace = "cert-manager" + create_namespace = true + + + set { + name = "installCRDs" + value = "true" + } +} + +resource "helm_release" "nginx_ingress" { + depends_on = [helm_release.cert_manager, module.eks_node_group] + + name = "nginx-ingress" + repository = "https://charts.bitnami.com/bitnami" + chart = "nginx-ingress-controller" + version = "9.1.5" + namespace = "nginx" + create_namespace = true + + set { + name = "ingressClassResource.default" + value = "true" + } + + set { + name = "publishService.enabled" + value = "true" + } + + values = [ + <