From 373fa6bcb0cdfba35a0bb903ff11e0f83cfec462 Mon Sep 17 00:00:00 2001 From: smalltown Date: Thu, 5 Sep 2019 16:16:26 +0800 Subject: [PATCH 01/11] eks related module upgrade to terraform 0.12 --- examples/eks-cluster/main.tf | 67 +++++----- examples/eks-cluster/outputs.tf | 4 +- examples/eks-cluster/providers.tf | 28 +++++ examples/eks-cluster/variables.tf | 23 ++-- modules/aws/container_linux/main.tf | 3 - modules/aws/container_linux/outputs.tf | 2 +- modules/aws/container_linux/variables.tf | 4 +- modules/aws/eks-worker/ami.tf | 8 +- modules/aws/eks-worker/data.tf | 4 + modules/aws/eks-worker/main.tf | 21 ---- modules/aws/eks-worker/role.tf | 10 +- modules/aws/eks-worker/variables.tf | 68 +++++----- modules/aws/eks-worker/worker.tf | 84 ++++++------- modules/aws/eks/aws-iam-auth.tf | 97 ++++++-------- modules/aws/eks/eks.tf | 13 +- modules/aws/eks/kubeconfig.tf | 92 +++++++++----- modules/aws/eks/main.tf | 20 --- modules/aws/eks/outputs.tf | 14 +-- .../config-map-aws-auth-map_accounts.yaml.tpl | 1 - .../config-map-aws-auth-map_roles.yaml.tpl | 4 - .../config-map-aws-auth-map_users.yaml.tpl | 4 - .../resources/config-map-aws-auth.yaml.tpl | 12 +- .../eks/resources/kubeconfig.tpl} | 6 +- modules/aws/eks/role-eks.tf | 6 +- modules/aws/eks/role-workers.tf | 42 +++---- modules/aws/eks/sg-eks.tf | 20 +-- modules/aws/eks/sg-worker.tf | 26 ++-- modules/aws/eks/variables.tf | 119 +++++++++--------- modules/aws/network/bastion.tf | 40 +++--- modules/aws/network/data.tf | 4 + modules/aws/network/main.tf | 16 --- modules/aws/network/outputs.tf | 10 +- modules/aws/network/variables.tf | 22 ++-- modules/aws/network/vpc-private.tf | 40 +++--- modules/aws/network/vpc-public.tf | 58 ++++----- modules/aws/network/vpc.tf | 12 +- modules/aws/network/zone.tf | 12 +- .../ignitions/eks-kube-config/kubeconfig.tf | 43 ------- modules/ignitions/eks-kube-config/outputs.tf | 14 --- .../ignitions/eks-kube-config/variables.tf | 44 ------- 40 files changed, 490 insertions(+), 627 deletions(-) create mode 100644 examples/eks-cluster/providers.tf create mode 100644 modules/aws/eks-worker/data.tf delete mode 100644 modules/aws/eks-worker/main.tf delete mode 100644 modules/aws/eks/main.tf delete mode 100644 modules/aws/eks/resources/config-map-aws-auth-map_accounts.yaml.tpl delete mode 100644 modules/aws/eks/resources/config-map-aws-auth-map_roles.yaml.tpl delete mode 100644 modules/aws/eks/resources/config-map-aws-auth-map_users.yaml.tpl rename modules/{ignitions/eks-kube-config/resources/kubernetes/kubeconfig => aws/eks/resources/kubeconfig.tpl} (85%) create mode 100644 modules/aws/network/data.tf delete mode 100644 modules/aws/network/main.tf delete mode 100644 modules/ignitions/eks-kube-config/kubeconfig.tf delete mode 100644 modules/ignitions/eks-kube-config/outputs.tf delete mode 100644 modules/ignitions/eks-kube-config/variables.tf diff --git a/examples/eks-cluster/main.tf b/examples/eks-cluster/main.tf index 2fb017e1..915fca5d 100644 --- a/examples/eks-cluster/main.tf +++ b/examples/eks-cluster/main.tf @@ -2,22 +2,16 @@ locals { cluster_name = "${var.phase}-${var.project}" } -provider "aws" { - version = "2.3.0" - region = "${var.aws_region}" -} - # --------------------------------------------------------------------------------------------------------------------- # Network # --------------------------------------------------------------------------------------------------------------------- module "network" { source = "../../modules/aws/network" - aws_region = "${var.aws_region}" - bastion_key_name = "${var.key_pair_name}" - project = "${var.project}" - phase = "${var.phase}" - extra_tags = "${var.extra_tags}" + bastion_key_name = var.key_pair_name + project = var.project + phase = var.phase + extra_tags = var.extra_tags } # --------------------------------------------------------------------------------------------------------------------- @@ -25,14 +19,13 @@ module "network" { # --------------------------------------------------------------------------------------------------------------------- module "eks" { source = "../../modules/aws/eks" - aws_region = "${var.aws_region}" - kubernetes_version = "${var.kubernetes_version}" - project = "${var.project}" - phase = "${var.phase}" - exist_subnet_ids = "${module.network.private_subnet_ids}" - endpoint_public_access = "${var.endpoint_public_access}" - worker_groups = "${var.worker_groups}" - extra_tags = "${var.extra_tags}" + kubernetes_version = var.kubernetes_version + project = var.project + phase = var.phase + exist_subnet_ids = module.network.private_subnet_ids + endpoint_public_access = var.endpoint_public_access + worker_groups = var.worker_groups + extra_tags = var.extra_tags } @@ -43,11 +36,10 @@ module "eks" { module "worker_on_demand" { source = "../../modules/aws/eks-worker" - cluster_name = "${local.cluster_name}" - aws_region = "${var.aws_region}" - - security_group_ids = ["${module.eks.worker_sg_id}"] - subnet_ids = ["${module.network.private_subnet_ids}"] + cluster_name = local.cluster_name + kubernetes_version = var.kubernetes_version + security_group_ids = [module.eks.worker_sg_id] + subnet_ids = module.network.private_subnet_ids worker_config = { name = "on-demand" @@ -63,12 +55,12 @@ module "worker_on_demand" { spot_instance_pools = 1 } - ssh_key = "${var.key_pair_name}" + ssh_key = var.key_pair_name - extra_tags = "${merge(map( - "Phase", "${var.phase}", - "Project", "${var.project}", - ), var.extra_tags)}" + extra_tags = merge(map( + "Phase", var.phase, + "Project", var.project, + ), var.extra_tags) } # --------------------------------------------------------------------------------------------------------------------- @@ -78,11 +70,10 @@ module "worker_on_demand" { module "worker_spot" { source = "../../modules/aws/eks-worker" - cluster_name = "${local.cluster_name}" - aws_region = "${var.aws_region}" - - security_group_ids = ["${module.eks.worker_sg_id}"] - subnet_ids = ["${module.network.private_subnet_ids}"] + cluster_name = local.cluster_name + kubernetes_version = var.kubernetes_version + security_group_ids = [module.eks.worker_sg_id] + subnet_ids = module.network.private_subnet_ids worker_config = { name = "spot" @@ -98,10 +89,10 @@ module "worker_spot" { spot_instance_pools = 1 } - ssh_key = "${var.key_pair_name}" + ssh_key = var.key_pair_name - extra_tags = "${merge(map( - "Phase", "${var.phase}", - "Project", "${var.project}", - ), var.extra_tags)}" + extra_tags = merge(map( + "Phase", var.phase, + "Project", var.project, + ), var.extra_tags) } \ No newline at end of file diff --git a/examples/eks-cluster/outputs.tf b/examples/eks-cluster/outputs.tf index 9ee05f47..f4719f06 100644 --- a/examples/eks-cluster/outputs.tf +++ b/examples/eks-cluster/outputs.tf @@ -1,7 +1,7 @@ output "bastion_public_ip" { - value = "${module.network.bastion_public_ip}" + value = module.network.bastion_public_ip } output "ignition_s3_bucket" { - value = "${module.eks.s3_bucket}" + value = module.eks.s3_bucket } \ No newline at end of file diff --git a/examples/eks-cluster/providers.tf b/examples/eks-cluster/providers.tf new file mode 100644 index 00000000..de11cced --- /dev/null +++ b/examples/eks-cluster/providers.tf @@ -0,0 +1,28 @@ +terraform { + required_version = ">= 0.12.0" +} + +provider "aws" { + region = var.aws_region + version = "2.26.0" +} + +provider "external" { + version = "1.2.0" +} + +provider "local" { + version = "1.3.0" +} + +provider "null" { + version = "2.1.2" +} + +provider "random" { + version = "2.2.0" +} + +provider "template" { + version = "2.1.2" +} \ No newline at end of file diff --git a/examples/eks-cluster/variables.tf b/examples/eks-cluster/variables.tf index 91c9262f..58ac6483 100644 --- a/examples/eks-cluster/variables.tf +++ b/examples/eks-cluster/variables.tf @@ -1,45 +1,46 @@ variable "aws_region" { description = "The AWS region to build network infrastructure" - type = "string" + type = string default = "us-west-2" } variable "key_pair_name" { description = "The key pair name for access bastion ec2" - type = "string" + type = string } variable "project" { - type = "string" - default = "vishwakarma" description = "(Optional) project name, used to compose the resource name" + type = string + default = "vishwakarma" } variable "phase" { - type = "string" - default = "test" description = "(Optional) phase name, used to compose the resource name" + type = string + default = "test" } variable "kubernetes_version" { - type = "string" - default = "1.12.7" description = "(Optional) Desired Kubernetes master version. If you do not specify a value, the latest available version is used." + type = string + default = "1.13" } variable "endpoint_public_access" { - default = true description = "(Optional) kubernetes apiserver endpoint" + type = bool + default = true } variable "worker_groups" { description = "The worker groups's name for generating role" - type = "list" + type = list(string) default = ["on-demand", "spot"] } variable "extra_tags" { description = "Extra AWS tags to be applied to created resources." - type = "map" + type = map(string) default = {} } diff --git a/modules/aws/container_linux/main.tf b/modules/aws/container_linux/main.tf index 40454910..e15beb31 100644 --- a/modules/aws/container_linux/main.tf +++ b/modules/aws/container_linux/main.tf @@ -1,6 +1,3 @@ -provider "external" { - version = "1.0.0" -} data "external" "version" { program = ["sh", "-c", "curl https://${var.release_channel}.release.core-os.net/amd64-usr/current/version.txt | sed -n 's/COREOS_VERSION=\\(.*\\)$/{\"version\": \"\\1\"}/p'"] diff --git a/modules/aws/container_linux/outputs.tf b/modules/aws/container_linux/outputs.tf index 7805bef8..b4e76cdb 100644 --- a/modules/aws/container_linux/outputs.tf +++ b/modules/aws/container_linux/outputs.tf @@ -1,3 +1,3 @@ output "version" { - value = "${var.release_version == "latest" ? data.external.version.result["version"] : var.release_version}" + value = var.release_version == "latest" ? data.external.version.result["version"] : var.release_version } diff --git a/modules/aws/container_linux/variables.tf b/modules/aws/container_linux/variables.tf index 48a2493e..dc3ca4be 100644 --- a/modules/aws/container_linux/variables.tf +++ b/modules/aws/container_linux/variables.tf @@ -1,5 +1,5 @@ variable "release_channel" { - type = "string" + type = string description = <=:"). EOF + type = list(string) + default = [] +} + +variable "kubernetes_version" { + type = string + default = "1.13" + description = "Desired Kubernetes master version. If you do not specify a value, the latest available version is used." } variable "load_balancer_ids" { - type = "list" - default = [] description = "A list of elastic load balancer names to add to the autoscaling group names. Only valid for classic load balancers. For ALBs, use target_group_arns instead." + type = list(string) + default = [] } variable "security_group_ids" { - type = "list" - default = [] - description = < kube_config.yaml & \ -echo "${null_resource.update_config_map_aws_auth.triggers.config_map_rendered}" > aws_auth_configmap.yaml & \ +echo "${null_resource.update_config_map_aws_auth[0].triggers.kube_config_map_rendered}" > kube_config.yaml & \ +echo "${null_resource.update_config_map_aws_auth[0].triggers.config_map_rendered}" > aws_auth_configmap.yaml & \ kubectl apply -f aws_auth_configmap.yaml --kubeconfig kube_config.yaml && break || \ sleep 10; \ done; \ rm aws_auth_configmap.yaml kube_config.yaml; EOS - interpreter = ["${var.local_exec_interpreter}"] + interpreter = var.local_exec_interpreter } - triggers { - kube_config_map_rendered = "${module.ignition_kubeconfig.rendered}" - config_map_rendered = "${data.template_file.config_map_aws_auth.rendered}" - endpoint = "${aws_eks_cluster.vishwakarma.endpoint}" + triggers = { + kube_config_map_rendered = data.template_file.kubeconfig.rendered + config_map_rendered = data.template_file.config_map_aws_auth.rendered + endpoint = aws_eks_cluster.vishwakarma.endpoint } +} - count = "${var.manage_aws_auth ? 1 : 0}" +data "template_file" "worker_role_arns" { + count = length(var.worker_groups) + template = file("${path.module}/resources/worker-role.tpl") + + vars = { + worker_role_arn = aws_iam_role.workers.*.arn[count.index] + } +} + +data "template_file" "config_map_aws_auth" { + template = file("${path.module}/resources/config-map-aws-auth.yaml.tpl") + + vars = { + worker_role_arn = join( + "", + distinct( + data.template_file.worker_role_arns.*.rendered + ), + ) + map_users = yamlencode(var.map_users), + map_roles = yamlencode(var.map_roles), + map_accounts = yamlencode(var.map_accounts) + } } \ No newline at end of file diff --git a/modules/aws/eks/eks.tf b/modules/aws/eks/eks.tf index f4580ca5..776ea23d 100644 --- a/modules/aws/eks/eks.tf +++ b/modules/aws/eks/eks.tf @@ -5,17 +5,18 @@ locals { resource "aws_eks_cluster" "vishwakarma" { name = "${var.phase}-${var.project}" - role_arn = "${aws_iam_role.eks.arn}" + version = var.kubernetes_version + role_arn = aws_iam_role.eks.arn vpc_config { - endpoint_private_access = "${var.endpoint_private_access}" - endpoint_public_access = "${var.endpoint_public_access}" - subnet_ids = ["${var.exist_subnet_ids}"] - security_group_ids = ["${aws_security_group.eks.id}"] + endpoint_private_access = var.endpoint_private_access + endpoint_public_access = var.endpoint_public_access + subnet_ids = var.exist_subnet_ids + security_group_ids = [aws_security_group.eks.id] } depends_on = [ "aws_iam_role_policy_attachment.eks_cluster", "aws_iam_role_policy_attachment.eks_service", ] -} +} \ No newline at end of file diff --git a/modules/aws/eks/kubeconfig.tf b/modules/aws/eks/kubeconfig.tf index 7996f32c..eda0dc7e 100644 --- a/modules/aws/eks/kubeconfig.tf +++ b/modules/aws/eks/kubeconfig.tf @@ -1,22 +1,71 @@ +data "aws_region" "current" {} + +resource "local_file" "kubeconfig" { + count = var.kubeconfig_output_flag ? 1 : 0 + content = data.template_file.kubeconfig.rendered + filename = "${var.config_output_path}/kubeconfig" +} + +data "template_file" "kubeconfig" { + template = file("${path.module}/resources/kubeconfig.tpl") + + vars = { + kubeconfig_name = aws_eks_cluster.vishwakarma.id + endpoint = aws_eks_cluster.vishwakarma.endpoint + region = data.aws_region.current.name + cluster_auth_base64 = aws_eks_cluster.vishwakarma.certificate_authority.0.data + aws_authenticator_command = var.kubeconfig_aws_authenticator_command + aws_authenticator_command_args = length(var.kubeconfig_aws_authenticator_command_args) > 0 ? " - ${join( + "\n - ", + var.kubeconfig_aws_authenticator_command_args, + )}" : " - ${join( + "\n - ", + formatlist("\"%s\"", ["token", "-i", aws_eks_cluster.vishwakarma.id]), + )}" + aws_authenticator_additional_args = length(var.kubeconfig_aws_authenticator_additional_args) > 0 ? " - ${join( + "\n - ", + var.kubeconfig_aws_authenticator_additional_args, + )}" : "" + aws_authenticator_env_variables = length(var.kubeconfig_aws_authenticator_env_variables) > 0 ? " env:\n${join( + "\n", + data.template_file.aws_authenticator_env_variables.*.rendered, + )}" : "" + } +} + +data "template_file" "aws_authenticator_env_variables" { + count = length(var.kubeconfig_aws_authenticator_env_variables) + + template = < Date: Fri, 6 Sep 2019 23:04:50 +0800 Subject: [PATCH 02/11] upgrade elastikube: tf to 0.12, coredns to 1.6.2 , flannel to 0.11.0 --- examples/eks-cluster/variables.tf | 2 +- examples/elastikube-cluster/main.tf | 89 ++++---- examples/elastikube-cluster/outputs.tf | 4 +- examples/elastikube-cluster/providers.tf | 32 +++ examples/elastikube-cluster/variables.tf | 34 +-- examples/self-signed-etcd-certs/main.tf | 34 +-- examples/self-signed-etcd-certs/providers.tf | 15 ++ examples/self-signed-etcd-certs/variables.tf | 7 +- modules/aws/container_linux/variables.tf | 6 +- modules/aws/eks-worker/variables.tf | 2 +- modules/aws/eks/variables.tf | 2 +- modules/aws/elastikube/etcd.tf | 25 ++- modules/aws/elastikube/ign-essential.tf | 22 +- modules/aws/elastikube/main.tf | 16 -- modules/aws/elastikube/master.tf | 96 ++++----- modules/aws/elastikube/outputs.tf | 16 +- modules/aws/elastikube/s3.tf | 6 +- modules/aws/elastikube/variables.tf | 140 ++++++------ modules/aws/elastikube/worker-sg.tf | 24 +-- modules/aws/elastikube/zone.tf | 16 +- modules/aws/kube-etcd/ami.tf | 11 +- modules/aws/kube-etcd/certs.tf | 67 +++--- modules/aws/kube-etcd/dns.tf | 32 +-- modules/aws/kube-etcd/etcd.tf | 40 ++-- modules/aws/kube-etcd/ign-node-exporter.tf | 8 +- modules/aws/kube-etcd/ignition.tf | 42 ++-- modules/aws/kube-etcd/main.tf | 12 -- modules/aws/kube-etcd/outputs.tf | 8 +- modules/aws/kube-etcd/role.tf | 8 +- modules/aws/kube-etcd/sg.tf | 28 +-- modules/aws/kube-etcd/variables.tf | 74 +++---- modules/aws/kube-master/ami.tf | 11 +- modules/aws/kube-master/certs.tf | 26 +-- modules/aws/kube-master/ign-control-plane.tf | 30 +-- modules/aws/kube-master/ign-kubelet.tf | 16 +- modules/aws/kube-master/ignition.tf | 30 +-- modules/aws/kube-master/lb.tf | 28 +-- modules/aws/kube-master/main.tf | 20 -- modules/aws/kube-master/master.tf | 69 +++--- modules/aws/kube-master/outputs.tf | 4 +- modules/aws/kube-master/role.tf | 13 +- modules/aws/kube-master/s3.tf | 4 +- modules/aws/kube-master/sg.tf | 30 +-- modules/aws/kube-master/variables.tf | 127 +++++------ modules/aws/kube-worker/ami.tf | 11 +- modules/aws/kube-worker/ignition.tf | 38 ++-- modules/aws/kube-worker/main.tf | 20 -- modules/aws/kube-worker/role.tf | 12 +- modules/aws/kube-worker/variables.tf | 88 ++++---- modules/aws/kube-worker/worker.tf | 68 +++--- .../aws-iam-auth-master/manifests.tf | 2 +- .../ignitions/aws-iam-auth-master/outputs.tf | 6 +- .../aws-iam-auth-master/provision.tf | 10 +- .../aws-iam-auth-master/variables.tf | 15 +- .../aws-iam-auth-master/webhook-kubeconfig.tf | 14 +- modules/ignitions/docker/assets.tf | 14 +- modules/ignitions/docker/outputs.tf | 2 +- modules/ignitions/docker/variables.tf | 5 +- modules/ignitions/etcd/assets.tf | 24 +-- modules/ignitions/etcd/certs.tf | 36 ++-- modules/ignitions/etcd/outputs.tf | 16 +- .../resources/dropins/40-etcd-cluster.conf | 7 +- modules/ignitions/etcd/variables.tf | 12 +- modules/ignitions/iscsi/assets.tf | 2 +- modules/ignitions/iscsi/outputs.tf | 2 +- modules/ignitions/iscsi/variables.tf | 3 +- .../ignitions/kube-addon-dns/coredns-yaml.tf | 24 +-- modules/ignitions/kube-addon-dns/manifests.tf | 2 +- modules/ignitions/kube-addon-dns/outputs.tf | 2 +- .../kubernetes/manifests/coredns.yaml | 67 +++--- modules/ignitions/kube-addon-dns/variables.tf | 28 +-- .../kube-flannel-yaml.tf | 15 +- .../kube-addon-flannel-vxlan/manifests.tf | 2 +- .../kube-addon-flannel-vxlan/outputs.tf | 2 +- .../resources/addon/kube-flannel.yaml | 202 ++++++++++++++---- .../kube-addon-flannel-vxlan/variables.tf | 18 +- .../kube-addon-manager/kube-addon.tf | 8 +- .../ignitions/kube-addon-manager/outputs.tf | 2 +- .../ignitions/kube-addon-manager/variables.tf | 14 +- .../kube-addon-proxy/kube-proxy-yaml.tf | 10 +- modules/ignitions/kube-addon-proxy/outputs.tf | 2 +- .../ignitions/kube-addon-proxy/variables.tf | 20 +- modules/ignitions/kube-audit/manifests.tf | 2 +- modules/ignitions/kube-audit/outputs.tf | 2 +- modules/ignitions/kube-audit/policy-yaml.tf | 10 +- modules/ignitions/kube-audit/variables.tf | 12 +- modules/ignitions/kube-config/kubeconfig.tf | 24 +-- modules/ignitions/kube-config/outputs.tf | 4 +- modules/ignitions/kube-config/variables.tf | 19 +- .../kube-control-plane/kube-apiserver-yaml.tf | 55 +++-- .../kube-controller-manager-yaml.tf | 24 +-- .../kube-control-plane/kube-scheduler-yaml.tf | 12 +- .../kube-system-rbac-role-binding.tf | 8 +- .../ignitions/kube-control-plane/manifests.tf | 2 +- .../ignitions/kube-control-plane/outputs.tf | 24 +-- .../ignitions/kube-control-plane/secrets.tf | 48 ++--- .../ignitions/kube-control-plane/variables.tf | 67 +++--- modules/ignitions/kubelet/kubelet-env.tf | 12 +- modules/ignitions/kubelet/kubelet.tf | 22 +- modules/ignitions/kubelet/outputs.tf | 4 +- modules/ignitions/kubelet/variables.tf | 41 ++-- modules/ignitions/locksmithd/assets.tf | 4 +- modules/ignitions/locksmithd/outputs.tf | 2 +- modules/ignitions/locksmithd/variables.tf | 2 +- modules/ignitions/max-user-watches/assets.tf | 10 +- modules/ignitions/max-user-watches/outputs.tf | 2 +- .../ignitions/max-user-watches/variables.tf | 4 +- .../node-exporter/node-exporter-fetcher.tf | 8 +- .../ignitions/node-exporter/node-exporter.tf | 6 +- modules/ignitions/node-exporter/outputs.tf | 4 +- modules/ignitions/node-exporter/variables.tf | 7 +- modules/ignitions/ntp/assets.tf | 8 +- modules/ignitions/ntp/outputs.tf | 2 +- modules/ignitions/ntp/variables.tf | 2 +- .../ignitions/pod-checkpointer/manifests.tf | 2 +- modules/ignitions/pod-checkpointer/outputs.tf | 2 +- .../pod-checkpointer/pod-checkpointer-yaml.tf | 12 +- .../ignitions/pod-checkpointer/variables.tf | 10 +- modules/ignitions/tx-off/assets.tf | 4 +- modules/ignitions/tx-off/outputs.tf | 2 +- .../update-ca-certificates/assets.tf | 10 +- .../update-ca-certificates/outputs.tf | 2 +- modules/tls/certificate-authority/ca.tf | 24 +-- modules/tls/certificate-authority/main.tf | 11 - modules/tls/certificate-authority/outputs.tf | 8 +- .../tls/certificate-authority/variables.tf | 17 +- modules/tls/certificate/cert.tf | 36 ++-- modules/tls/certificate/main.tf | 11 - modules/tls/certificate/outputs.tf | 4 +- modules/tls/certificate/variables.tf | 18 +- modules/tls/private-key/main.tf | 3 - modules/tls/private-key/outputs.tf | 6 +- 132 files changed, 1391 insertions(+), 1395 deletions(-) create mode 100644 examples/elastikube-cluster/providers.tf create mode 100644 examples/self-signed-etcd-certs/providers.tf delete mode 100644 modules/aws/elastikube/main.tf delete mode 100644 modules/aws/kube-etcd/main.tf delete mode 100644 modules/aws/kube-master/main.tf delete mode 100644 modules/aws/kube-worker/main.tf delete mode 100644 modules/tls/certificate-authority/main.tf delete mode 100644 modules/tls/certificate/main.tf delete mode 100644 modules/tls/private-key/main.tf diff --git a/examples/eks-cluster/variables.tf b/examples/eks-cluster/variables.tf index 58ac6483..366380ed 100644 --- a/examples/eks-cluster/variables.tf +++ b/examples/eks-cluster/variables.tf @@ -24,7 +24,7 @@ variable "phase" { variable "kubernetes_version" { description = "(Optional) Desired Kubernetes master version. If you do not specify a value, the latest available version is used." type = string - default = "1.13" + default = "1.14" } variable "endpoint_public_access" { diff --git a/examples/elastikube-cluster/main.tf b/examples/elastikube-cluster/main.tf index da7fdbf9..06555ae1 100644 --- a/examples/elastikube-cluster/main.tf +++ b/examples/elastikube-cluster/main.tf @@ -1,12 +1,5 @@ locals { cluster_name = "${var.phase}-${var.project}" - - kubernetes_version = "v1.13.4" -} - -provider "aws" { - version = "2.3.0" - region = "${var.aws_region}" } # --------------------------------------------------------------------------------------------------------------------- @@ -15,11 +8,10 @@ provider "aws" { module "network" { source = "../../modules/aws/network" - aws_region = "${var.aws_region}" - bastion_key_name = "${var.key_pair_name}" - project = "${var.project}" - phase = "${var.phase}" - extra_tags = "${var.extra_tags}" + bastion_key_name = var.key_pair_name + project = var.project + phase = var.phase + extra_tags = var.extra_tags } # --------------------------------------------------------------------------------------------------------------------- @@ -29,11 +21,10 @@ module "network" { module "kubernetes" { source = "../../modules/aws/elastikube" - name = "${local.cluster_name}" - aws_region = "${var.aws_region}" - kubernetes_version = "${local.kubernetes_version}" - service_cidr = "${var.service_cidr}" - cluster_cidr = "${var.cluster_cidr}" + name = local.cluster_name + kubernetes_version = var.kubernetes_version + service_cidr = var.service_cidr + cluster_cidr = var.cluster_cidr etcd_config = { instance_count = "3" @@ -57,16 +48,16 @@ module "kubernetes" { } hostzone = "${var.project}.cluster" - endpoint_public_access = "${var.endpoint_public_access}" - private_subnet_ids = ["${module.network.private_subnet_ids}"] - public_subnet_ids = ["${module.network.public_subnet_ids}"] - ssh_key = "${var.key_pair_name}" + endpoint_public_access = var.endpoint_public_access + private_subnet_ids = module.network.private_subnet_ids + public_subnet_ids = module.network.public_subnet_ids + ssh_key = var.key_pair_name reboot_strategy = "off" - extra_tags = "${merge(map( - "Phase", "${var.phase}", - "Project", "${var.project}", - ), var.extra_tags)}" + extra_tags = merge(map( + "Phase", var.phase, + "Project", var.project, + ), var.extra_tags) } # --------------------------------------------------------------------------------------------------------------------- @@ -76,13 +67,12 @@ module "kubernetes" { module "worker_on_demand" { source = "../../modules/aws/kube-worker" - cluster_name = "${local.cluster_name}" - aws_region = "${var.aws_region}" - kubernetes_version = "${local.kubernetes_version}" - kube_service_cidr = "${var.service_cidr}" + cluster_name = local.cluster_name + kubernetes_version = var.kubernetes_version + kube_service_cidr = var.service_cidr - security_group_ids = ["${module.kubernetes.worker_sg_ids}"] - subnet_ids = ["${module.network.private_subnet_ids}"] + security_group_ids = module.kubernetes.worker_sg_ids + subnet_ids = module.network.private_subnet_ids worker_config = { name = "on-demand" @@ -98,14 +88,14 @@ module "worker_on_demand" { spot_instance_pools = 1 } - s3_bucket = "${module.kubernetes.s3_bucket}" - ssh_key = "${var.key_pair_name}" + s3_bucket = module.kubernetes.s3_bucket + ssh_key = var.key_pair_name - extra_tags = "${merge(map( - "Phase", "${var.phase}", - "Project", "${var.project}", - ), var.extra_tags)}" -} + extra_tags = merge(map( + "Phase", var.phase, + "Project", var.project, + ), var.extra_tags) +} # --------------------------------------------------------------------------------------------------------------------- # Worker Node (On Spot Instance) @@ -114,13 +104,12 @@ module "worker_on_demand" { module "worker_spot" { source = "../../modules/aws/kube-worker" - cluster_name = "${local.cluster_name}" - aws_region = "${var.aws_region}" - kubernetes_version = "${local.kubernetes_version}" - kube_service_cidr = "${var.service_cidr}" + cluster_name = local.cluster_name + kubernetes_version = var.kubernetes_version + kube_service_cidr = var.service_cidr - security_group_ids = ["${module.kubernetes.worker_sg_ids}"] - subnet_ids = ["${module.network.private_subnet_ids}"] + security_group_ids = module.kubernetes.worker_sg_ids + subnet_ids = module.network.private_subnet_ids worker_config = { name = "spot" @@ -136,11 +125,11 @@ module "worker_spot" { spot_instance_pools = 1 } - s3_bucket = "${module.kubernetes.s3_bucket}" - ssh_key = "${var.key_pair_name}" + s3_bucket = module.kubernetes.s3_bucket + ssh_key = var.key_pair_name - extra_tags = "${merge(map( - "Phase", "${var.phase}", - "Project", "${var.project}", - ), var.extra_tags)}" + extra_tags = merge(map( + "Phase", var.phase, + "Project", var.project, + ), var.extra_tags) } diff --git a/examples/elastikube-cluster/outputs.tf b/examples/elastikube-cluster/outputs.tf index a4fa922e..02a8dff9 100644 --- a/examples/elastikube-cluster/outputs.tf +++ b/examples/elastikube-cluster/outputs.tf @@ -1,7 +1,7 @@ output "bastion_public_ip" { - value = "${module.network.bastion_public_ip}" + value = module.network.bastion_public_ip } output "ignition_s3_bucket" { - value = "${module.kubernetes.s3_bucket}" + value = module.kubernetes.s3_bucket } diff --git a/examples/elastikube-cluster/providers.tf b/examples/elastikube-cluster/providers.tf new file mode 100644 index 00000000..e5d8b8dc --- /dev/null +++ b/examples/elastikube-cluster/providers.tf @@ -0,0 +1,32 @@ +terraform { + required_version = ">= 0.12.0" +} + +provider "aws" { + region = var.aws_region + version = "2.26.0" +} + +provider "external" { + version = "1.2.0" +} + +provider "ignition" { + version = "1.1.0" +} + +provider "null" { + version = "2.1.2" +} + +provider "random" { + version = "2.2.0" +} + +provider "template" { + version = "2.1.2" +} + +provider "tls" { + version = "2.1.0" +} \ No newline at end of file diff --git a/examples/elastikube-cluster/variables.tf b/examples/elastikube-cluster/variables.tf index 15cc0420..adc93fe1 100644 --- a/examples/elastikube-cluster/variables.tf +++ b/examples/elastikube-cluster/variables.tf @@ -1,45 +1,51 @@ variable "aws_region" { - type = "string" - default = "us-west-2" description = "(Optional) The AWS region" + type = string + default = "us-west-2" } variable "service_cidr" { - type = "string" - default = "172.16.0.0/13" description = "(Optional) The Kubernetes service CIDR." + type = string + default = "172.16.0.0/13" } variable "cluster_cidr" { - type = "string" - default = "172.24.0.0/13" description = "(Optional) The Kubernetes cluster CIDR." + type = string + default = "172.24.0.0/13" } variable "key_pair_name" { - type = "string" description = "The ssh key name for all instance, e.g. bastion, master, etcd, worker" + type = string +} + +variable "kubernetes_version" { + description = "(Optional) Desired Kubernetes master version. If you do not specify a value, the latest available version is used." + type = string + default = "v1.14.6" } variable "project" { - type = "string" - default = "elastikube" description = "(Optional) project name, used to compose the resource name" + type = string + default = "elastikube" } variable "phase" { - type = "string" - default = "test" description = "(Optional) phase name, used to compose the resource name" + type = string + default = "test" } variable "endpoint_public_access" { - default = false description = "(Optional) kubernetes apiserver endpoint" + default = false } variable "extra_tags" { - type = "map" - default = {} description = "Extra AWS tags to be applied to created resources." + type = map(string) + default = {} } diff --git a/examples/self-signed-etcd-certs/main.tf b/examples/self-signed-etcd-certs/main.tf index e7d6bc4b..4af1815c 100644 --- a/examples/self-signed-etcd-certs/main.tf +++ b/examples/self-signed-etcd-certs/main.tf @@ -4,7 +4,7 @@ module "etcd_ca" { cert_config = { common_name = "etcd" organization = "etcd" - validity_period_hours = "${var.validity_period_hours}" + validity_period_hours = var.validity_period_hours } rsa_bits = 2048 @@ -15,15 +15,15 @@ module "etcd_server_cert" { source = "../../modules/tls/certificate" ca_config = { - algorithm = "${module.etcd_ca.algorithm}" - key_pem = "${module.etcd_ca.private_key_pem}" - cert_pem = "${module.etcd_ca.cert_pem}" + algorithm = module.etcd_ca.algorithm + key_pem = module.etcd_ca.private_key_pem + cert_pem = module.etcd_ca.cert_pem } cert_config = { common_name = "etcd" organization = "etcd" - validity_period_hours = "${var.validity_period_hours}" + validity_period_hours = var.validity_period_hours } cert_hostnames = [ @@ -34,8 +34,8 @@ module "etcd_server_cert" { cert_ip_addresses = [ "127.0.0.1", - "${cidrhost(var.service_cidr, 15)}", - "${cidrhost(var.service_cidr, 20)}", + cidrhost(var.service_cidr, 15), + cidrhost(var.service_cidr, 20), ] cert_uses = ["server_auth"] @@ -47,15 +47,15 @@ module "etcd_client_cert" { source = "../../modules/tls/certificate" ca_config = { - algorithm = "${module.etcd_ca.algorithm}" - key_pem = "${module.etcd_ca.private_key_pem}" - cert_pem = "${module.etcd_ca.cert_pem}" + algorithm = module.etcd_ca.algorithm + key_pem = module.etcd_ca.private_key_pem + cert_pem = module.etcd_ca.cert_pem } cert_config = { common_name = "etcd" organization = "etcd" - validity_period_hours = "${var.validity_period_hours}" + validity_period_hours = var.validity_period_hours } cert_uses = ["client_auth"] @@ -67,15 +67,15 @@ module "etcd_peer_cert" { source = "../../modules/tls/certificate" ca_config = { - algorithm = "${module.etcd_ca.algorithm}" - key_pem = "${module.etcd_ca.private_key_pem}" - cert_pem = "${module.etcd_ca.cert_pem}" + algorithm = module.etcd_ca.algorithm + key_pem = module.etcd_ca.private_key_pem + cert_pem = module.etcd_ca.cert_pem } cert_config = { common_name = "etcd" organization = "etcd" - validity_period_hours = "${var.validity_period_hours}" + validity_period_hours = var.validity_period_hours } cert_hostnames = [ @@ -85,8 +85,8 @@ module "etcd_peer_cert" { cert_ip_addresses = [ "127.0.0.1", - "${cidrhost(var.service_cidr, 15)}", - "${cidrhost(var.service_cidr, 20)}", + cidrhost(var.service_cidr, 15), + cidrhost(var.service_cidr, 20), ] cert_uses = ["server_auth", "client_auth"] diff --git a/examples/self-signed-etcd-certs/providers.tf b/examples/self-signed-etcd-certs/providers.tf new file mode 100644 index 00000000..141b795f --- /dev/null +++ b/examples/self-signed-etcd-certs/providers.tf @@ -0,0 +1,15 @@ +terraform { + required_version = ">= 0.12.0" +} + +provider "local" { + version = "1.3.0" +} + +provider "template" { + version = "2.1.2" +} + +provider "tls" { + version = "2.1.0" +} \ No newline at end of file diff --git a/examples/self-signed-etcd-certs/variables.tf b/examples/self-signed-etcd-certs/variables.tf index 67eb2a35..02c9fbab 100644 --- a/examples/self-signed-etcd-certs/variables.tf +++ b/examples/self-signed-etcd-certs/variables.tf @@ -3,17 +3,16 @@ variable "validity_period_hours" { Validity period of the self-signed certificates (in hours). Default is 3 years. EOF - - type = "string" + type = string // Default is provided only in this case // bacause *some* of etcd internal certs are still self-generated and need // this variable set - default = 26280 + default = 26280 } variable "service_cidr" { - type = "string" + type = string default = "172.16.0.0/16" description = <=:"). EOF + type = list(string) + default = [] } variable "extra_etcd_ignition_file_ids" { - type = "list" - default = [] description = "(Optional) Additional ignition file IDs for etcds. See https://www.terraform.io/docs/providers/ignition/d/file.html for more details." + type = list(string) + default = [] } variable "extra_etcd_ignition_systemd_unit_ids" { - type = "list" - default = [] description = "(Optional) Additional ignition systemd unit IDs for etcds. See https://www.terraform.io/docs/providers/ignition/d/systemd_unit.html for more details." + type = list(string) + default = [] } variable "extra_ignition_file_ids" { - type = "list" - default = [] description = "(Optional) Additional ignition file IDs for masters. See https://www.terraform.io/docs/providers/ignition/d/file.html for more details." + type = list(string) + default = [] } variable "extra_ignition_systemd_unit_ids" { - type = "list" - default = [] description = "(Optional) Additional ignition systemd unit IDs for masters. See https://www.terraform.io/docs/providers/ignition/d/systemd_unit.html for more details." + type = list(string) + default = [] } variable "kubelet_flag_extra_flags" { - type = "list" - default = [] description = "Extra user-provided flags to kubelet." + type = list(string) + default = [] } variable "extra_tags" { description = "(Optional) Extra AWS tags to be applied to the resources." - type = "map" + type = map(string) default = {} } variable "auth_webhook_path" { - type = "string" - default = "" description = "(Optional) A path for using customize machine to authenticate to a Kubernetes cluster." + type = string + default = "" } variable "audit_policy_path" { - type = "string" - default = "" description = "(Optional) A policy path for Kubernetes apiserver to enable auditing log." + type = string + default = "" } variable "audit_log_backend" { - type = "map" + description = <=:"). EOF + type = list(string) + default = [] } variable "s3_bucket" { - type = "string" - default = "" - description = <=:"). EOF + type = list(string) + default = [] } variable "s3_bucket" { - type = "string" - default = "" - description = < 1. + pod_eviction_timeout: The grace period for deleting pods on failed nodes. The eviction process will start after node_monitor_grace_period + pod_eviction_timeout. + EOF + type = map(string) + default = { node_monitor_grace_period = "40s" pod_eviction_timeout = "5m" service_cidr = "10.3.0.0/16" pod_cidr = "10.2.0.0/16" } - - description = < 1. - pod_eviction_timeout: The grace period for deleting pods on failed nodes. The eviction process will start after node_monitor_grace_period + pod_eviction_timeout. - EOF } variable "hyperkube" { - type = "map" - - default = { + description = "The hyperkube container image path and tag" + type = map(string) + default = { image_path = "gcr.io/google-containers/hyperkube-amd64" - image_tag = "v1.13.4" + image_tag = "v1.14.6" } - - description = "The hyperkube container image path and tag" } diff --git a/modules/ignitions/kubelet/kubelet-env.tf b/modules/ignitions/kubelet/kubelet-env.tf index a4786a8f..f87dd50b 100644 --- a/modules/ignitions/kubelet/kubelet-env.tf +++ b/modules/ignitions/kubelet/kubelet-env.tf @@ -1,18 +1,18 @@ data "template_file" "kubelet_env" { - template = "${file("${path.module}/resources/kubernetes/kubelet.env")}" + template = file("${path.module}/resources/kubernetes/kubelet.env") - vars { - kubelet_image_url = "${var.hyperkube["image_path"]}" - kubelet_image_tag = "${var.hyperkube["image_tag"]}" + vars = { + kubelet_image_url = var.hyperkube["image_path"] + kubelet_image_tag = var.hyperkube["image_tag"] } } data "ignition_file" "kubelet_env" { filesystem = "root" path = "/etc/kubernetes/kubelet.env" - mode = 0644 + mode = 420 content { - content = "${data.template_file.kubelet_env.rendered}" + content = data.template_file.kubelet_env.rendered } } diff --git a/modules/ignitions/kubelet/kubelet.tf b/modules/ignitions/kubelet/kubelet.tf index 12c09c5e..d8ea0c40 100644 --- a/modules/ignitions/kubelet/kubelet.tf +++ b/modules/ignitions/kubelet/kubelet.tf @@ -1,20 +1,20 @@ data "template_file" "kubelet" { - template = "${file("${path.module}/resources/services/kubelet.service")}" + template = file("${path.module}/resources/services/kubelet.service") - vars { - kubelet_flag_cloud_provider = "${var.kubelet_flag_cloud_provider != "" ? "--cloud-provider=${var.kubelet_flag_cloud_provider}" : ""}" - kubelet_flag_cloud_config = "${var.kubelet_flag_cloud_config != "" ? "--cloud-config=/etc/kubernetes/cloud/config" : ""}" - kubelet_flag_cluster_dns = "${var.kubelet_flag_cluster_dns != "" ? "--cluster-dns=${var.kubelet_flag_cluster_dns}": ""}" - kubelet_flag_cni_bin_dir = "${var.kubelet_flag_cni_bin_dir != "" ? "--cni-bin-dir=${var.kubelet_flag_cni_bin_dir}" : ""}" - kubelet_flag_pod_manifest_path = "${var.kubelet_flag_pod_manifest_path != "" ? "--pod-manifest-path=${var.kubelet_flag_pod_manifest_path}" : ""}" - kubelet_flag_node_labels = "${var.kubelet_flag_node_labels != "" ? "--node-labels=${var.kubelet_flag_node_labels}" : ""}" - kubelet_flag_register_with_taints = "${var.kubelet_flag_register_with_taints != "" ? "--register-with-taints=${var.kubelet_flag_register_with_taints}" : ""}" - kubelet_flag_extra_flags = "${length(var.kubelet_flag_extra_flags) > 0 ? join(" ", var.kubelet_flag_extra_flags) : ""}" + vars = { + kubelet_flag_cloud_provider = var.kubelet_flag_cloud_provider != "" ? "--cloud-provider=${var.kubelet_flag_cloud_provider}" : "" + kubelet_flag_cloud_config = var.kubelet_flag_cloud_config != "" ? "--cloud-config=/etc/kubernetes/cloud/config" : "" + kubelet_flag_cluster_dns = var.kubelet_flag_cluster_dns != "" ? "--cluster-dns=${var.kubelet_flag_cluster_dns}": "" + kubelet_flag_cni_bin_dir = var.kubelet_flag_cni_bin_dir != "" ? "--cni-bin-dir=${var.kubelet_flag_cni_bin_dir}" : "" + kubelet_flag_pod_manifest_path = var.kubelet_flag_pod_manifest_path != "" ? "--pod-manifest-path=${var.kubelet_flag_pod_manifest_path}" : "" + kubelet_flag_node_labels = var.kubelet_flag_node_labels != "" ? "--node-labels=${var.kubelet_flag_node_labels}" : "" + kubelet_flag_register_with_taints = var.kubelet_flag_register_with_taints != "" ? "--register-with-taints=${var.kubelet_flag_register_with_taints}" : "" + kubelet_flag_extra_flags = length(var.kubelet_flag_extra_flags) > 0 ? join(" ", var.kubelet_flag_extra_flags) : "" } } data "ignition_systemd_unit" "kubelet" { name = "kubelet.service" enabled = true - content = "${data.template_file.kubelet.rendered}" + content = data.template_file.kubelet.rendered } diff --git a/modules/ignitions/kubelet/outputs.tf b/modules/ignitions/kubelet/outputs.tf index 9b844455..ffb78d32 100644 --- a/modules/ignitions/kubelet/outputs.tf +++ b/modules/ignitions/kubelet/outputs.tf @@ -1,11 +1,11 @@ output "systemd_units" { value = [ - "${data.ignition_systemd_unit.kubelet.id}", + data.ignition_systemd_unit.kubelet.rendered ] } output "files" { value = [ - "${data.ignition_file.kubelet_env.id}", + data.ignition_file.kubelet_env.rendered ] } diff --git a/modules/ignitions/kubelet/variables.tf b/modules/ignitions/kubelet/variables.tf index e44f0aa3..cb313242 100644 --- a/modules/ignitions/kubelet/variables.tf +++ b/modules/ignitions/kubelet/variables.tf @@ -1,18 +1,16 @@ variable "kubelet_flag_cloud_provider" { - type = "string" - default = "aws" description = "The provider for cloud services. Specify empty string for running with no cloud provider." + type = string + default = "aws" } variable "kubelet_flag_cloud_config" { - type = "string" - default = "" description = "The path to the cloud provider configuration file. Empty string for no configuration file." + type = string + default = "" } variable "kubelet_flag_cluster_dns" { - type = "string" - description = <=:"). EOF + type = string + default = "" } variable "kubelet_flag_pod_manifest_path" { - type = "string" - default = "/etc/kubernetes/manifests" description = "Path to the directory containing static pod files to run, or the path to a single static pod file. Files starting with dots will be ignored." + type = string + default = "/etc/kubernetes/manifests" } variable "kubelet_flag_extra_flags" { - type = "list" - default = [] description = "Extra user-provided flags to kubelet." + type = list(string) + default = [] } variable "hyperkube" { - type = "map" - default = { + description = "(Optional) The hyperkube container image path and tag." + type = map(string) + default = { image_path = "gcr.io/google-containers/hyperkube-amd64" - image_tag = "v1.13.4" + image_tag = "v1.14.6" } - - description = "(Optional) The hyperkube container image path and tag." } diff --git a/modules/ignitions/locksmithd/assets.tf b/modules/ignitions/locksmithd/assets.tf index 8096d2a1..8680132c 100644 --- a/modules/ignitions/locksmithd/assets.tf +++ b/modules/ignitions/locksmithd/assets.tf @@ -1,8 +1,8 @@ locals { - mask = "${ var.reboot_strategy == "off" ? true : false }" + mask = var.reboot_strategy == "off" ? true : false } data "ignition_systemd_unit" "locksmithd" { name = "locksmithd.service" - mask = "${local.mask}" + mask = local.mask } diff --git a/modules/ignitions/locksmithd/outputs.tf b/modules/ignitions/locksmithd/outputs.tf index 1087da09..d3c02088 100644 --- a/modules/ignitions/locksmithd/outputs.tf +++ b/modules/ignitions/locksmithd/outputs.tf @@ -1,6 +1,6 @@ output "systemd_units" { value = [ - "${data.ignition_systemd_unit.locksmithd.id}", + data.ignition_systemd_unit.locksmithd.rendered ] } diff --git a/modules/ignitions/locksmithd/variables.tf b/modules/ignitions/locksmithd/variables.tf index 5642c24d..94a9576d 100644 --- a/modules/ignitions/locksmithd/variables.tf +++ b/modules/ignitions/locksmithd/variables.tf @@ -1,4 +1,4 @@ variable "reboot_strategy" { - type = "string" description = "(Optional) CoreOS reboot strategies on updates, two option here: etcd-lock or off" + type = string } diff --git a/modules/ignitions/max-user-watches/assets.tf b/modules/ignitions/max-user-watches/assets.tf index 8d09a850..550f41f2 100644 --- a/modules/ignitions/max-user-watches/assets.tf +++ b/modules/ignitions/max-user-watches/assets.tf @@ -1,17 +1,17 @@ data "template_file" "max_user_watches" { - template = "${file("${path.module}/resources/sysctl.d/max-user-watches.conf")}" + template = file("${path.module}/resources/sysctl.d/max-user-watches.conf") - vars { - max_user_watches = "${var.max_user_watches}" + vars = { + max_user_watches = var.max_user_watches } } data "ignition_file" "max_user_watches" { filesystem = "root" path = "/etc/sysctl.d/10-max-user-watches.conf" - mode = 0644 + mode = 420 content { - content = "${data.template_file.max_user_watches.rendered}" + content = data.template_file.max_user_watches.rendered } } diff --git a/modules/ignitions/max-user-watches/outputs.tf b/modules/ignitions/max-user-watches/outputs.tf index 1177bb60..21d4e103 100644 --- a/modules/ignitions/max-user-watches/outputs.tf +++ b/modules/ignitions/max-user-watches/outputs.tf @@ -4,6 +4,6 @@ output "systemd_units" { output "files" { value = [ - "${data.ignition_file.max_user_watches.id}", + data.ignition_file.max_user_watches.rendered ] } diff --git a/modules/ignitions/max-user-watches/variables.tf b/modules/ignitions/max-user-watches/variables.tf index 75f6400f..4e8e6b3c 100644 --- a/modules/ignitions/max-user-watches/variables.tf +++ b/modules/ignitions/max-user-watches/variables.tf @@ -1,5 +1,5 @@ variable "max_user_watches" { - default = 16184 - description = "(Optional) The max amount of inotify watchers" + type = number + default = 16184 } diff --git a/modules/ignitions/node-exporter/node-exporter-fetcher.tf b/modules/ignitions/node-exporter/node-exporter-fetcher.tf index 9e1c709e..4597727e 100644 --- a/modules/ignitions/node-exporter/node-exporter-fetcher.tf +++ b/modules/ignitions/node-exporter/node-exporter-fetcher.tf @@ -1,13 +1,13 @@ data "template_file" "node_exporter_fetcher" { - template = "${file("${path.module}/resources/services/node-exporter-fetcher.service")}" + template = file("${path.module}/resources/services/node-exporter-fetcher.service") - vars { - version = "${var.node_exporter_version}" + vars = { + version = var.node_exporter_version } } data "ignition_systemd_unit" "node_exporter_fetcher" { name = "node-exporter-fetcher.service" enabled = true - content = "${data.template_file.node_exporter_fetcher.rendered}" + content = data.template_file.node_exporter_fetcher.rendered } diff --git a/modules/ignitions/node-exporter/node-exporter.tf b/modules/ignitions/node-exporter/node-exporter.tf index 0796a24f..bf4c5029 100644 --- a/modules/ignitions/node-exporter/node-exporter.tf +++ b/modules/ignitions/node-exporter/node-exporter.tf @@ -1,7 +1,7 @@ data "template_file" "node_exporter" { - template = "${file("${path.module}/resources/services/node-exporter.service")}" + template = file("${path.module}/resources/services/node-exporter.service") - vars { + vars = { listen_address = "${var.listen_address}:${var.listen_port}" } } @@ -9,5 +9,5 @@ data "template_file" "node_exporter" { data "ignition_systemd_unit" "node_exporter" { name = "node-exporter.service" enabled = true - content = "${data.template_file.node_exporter.rendered}" + content = data.template_file.node_exporter.rendered } diff --git a/modules/ignitions/node-exporter/outputs.tf b/modules/ignitions/node-exporter/outputs.tf index f9107d6a..46fb614a 100644 --- a/modules/ignitions/node-exporter/outputs.tf +++ b/modules/ignitions/node-exporter/outputs.tf @@ -1,7 +1,7 @@ output "systemd_units" { value = [ - "${data.ignition_systemd_unit.node_exporter.id}", - "${data.ignition_systemd_unit.node_exporter_fetcher.id}", + data.ignition_systemd_unit.node_exporter.rendered, + data.ignition_systemd_unit.node_exporter_fetcher.rendered, ] } diff --git a/modules/ignitions/node-exporter/variables.tf b/modules/ignitions/node-exporter/variables.tf index dcb650f2..5f007101 100644 --- a/modules/ignitions/node-exporter/variables.tf +++ b/modules/ignitions/node-exporter/variables.tf @@ -1,13 +1,14 @@ variable "listen_address" { - type = "string" + type = string default = "0.0.0.0" } variable "listen_port" { + type = number default = 9100 } variable "node_exporter_version" { - type = "string" - default = "0.16.0" + type = string + default = "0.18.1" } diff --git a/modules/ignitions/ntp/assets.tf b/modules/ignitions/ntp/assets.tf index 0271a44e..a25e3a83 100644 --- a/modules/ignitions/ntp/assets.tf +++ b/modules/ignitions/ntp/assets.tf @@ -1,17 +1,17 @@ data "template_file" "ntp_dropin" { - template = "${file("${path.module}/resources/systemd/timesyncd.conf.d/10-timesyncd.conf")}" + template = file("${path.module}/resources/systemd/timesyncd.conf.d/10-timesyncd.conf") vars { - ntp_servers = "${join(" ", var.ntp_servers)}" + ntp_servers = join(" ", var.ntp_servers) } } data "ignition_file" "ntp_dropin" { path = "/etc/systemd/timesyncd.conf.d/10-timesyncd.conf" filesystem = "root" - mode = 0644 + mode = 420 content { - content = "${data.template_file.ntp_dropin.rendered}" + content = data.template_file.ntp_dropin.rendered } } diff --git a/modules/ignitions/ntp/outputs.tf b/modules/ignitions/ntp/outputs.tf index 1cab0f99..12cd82a4 100644 --- a/modules/ignitions/ntp/outputs.tf +++ b/modules/ignitions/ntp/outputs.tf @@ -4,6 +4,6 @@ output "systemd_units" { output "files" { value = [ - "${data.ignition_file.ntp_dropin.id}", + data.ignition_file.ntp_dropin.rendered ] } diff --git a/modules/ignitions/ntp/variables.tf b/modules/ignitions/ntp/variables.tf index 0f473384..c56196bd 100644 --- a/modules/ignitions/ntp/variables.tf +++ b/modules/ignitions/ntp/variables.tf @@ -1,4 +1,4 @@ variable "ntp_servers" { - type = "list" description = "A list of NTP servers to be used for time synchronization on the cluster nodes." + type = list(string) } diff --git a/modules/ignitions/pod-checkpointer/manifests.tf b/modules/ignitions/pod-checkpointer/manifests.tf index 06b6f12f..fb37bd82 100644 --- a/modules/ignitions/pod-checkpointer/manifests.tf +++ b/modules/ignitions/pod-checkpointer/manifests.tf @@ -1,4 +1,4 @@ locals { filesystem = "root" - mode = 0644 + mode = 420 } diff --git a/modules/ignitions/pod-checkpointer/outputs.tf b/modules/ignitions/pod-checkpointer/outputs.tf index 48382a4e..cc99b17a 100644 --- a/modules/ignitions/pod-checkpointer/outputs.tf +++ b/modules/ignitions/pod-checkpointer/outputs.tf @@ -4,6 +4,6 @@ output "systemd_units" { output "files" { value = [ - "${data.ignition_file.pod_checkpointer_yaml.id}", + data.ignition_file.pod_checkpointer_yaml.rendered ] } diff --git a/modules/ignitions/pod-checkpointer/pod-checkpointer-yaml.tf b/modules/ignitions/pod-checkpointer/pod-checkpointer-yaml.tf index a21b4d6d..db28dbb4 100644 --- a/modules/ignitions/pod-checkpointer/pod-checkpointer-yaml.tf +++ b/modules/ignitions/pod-checkpointer/pod-checkpointer-yaml.tf @@ -1,18 +1,18 @@ data "template_file" "pod_checkpointer_yaml" { - template = "${file("${path.module}/resources/kubernetes/addon/pod-checkpointer.yaml")}" + template = file("${path.module}/resources/kubernetes/addon/pod-checkpointer.yaml") - vars { - pod_checkpointer_image = "${var.pod_checkpointer["image_path"]}:${var.pod_checkpointer["image_tag"]}" + vars ={ + pod_checkpointer_image = var.pod_checkpointer["image_path"]}:${var.pod_checkpointer["image_tag"] } } data "ignition_file" "pod_checkpointer_yaml" { - filesystem = "${local.filesystem}" - mode = "${local.mode}" + filesystem = local.filesystem + mode = local.mode path = "${pathexpand(var.addon_path)}/pod-checkpointer.yaml" content { - content = "${data.template_file.pod_checkpointer_yaml.rendered}" + content = data.template_file.pod_checkpointer_yaml.rendered } } diff --git a/modules/ignitions/pod-checkpointer/variables.tf b/modules/ignitions/pod-checkpointer/variables.tf index ca1d04ab..6b3e1d7e 100644 --- a/modules/ignitions/pod-checkpointer/variables.tf +++ b/modules/ignitions/pod-checkpointer/variables.tf @@ -1,16 +1,14 @@ variable "pod_checkpointer" { - type = "map" - + description = "The hyperkube container image path and tag" + type = map(string) default = { image_path = "quay.io/coreos/pod-checkpointer" image_tag = "e22cc0e3714378de92f45326474874eb602ca0ac" } - - description = "The hyperkube container image path and tag" } variable "addon_path" { - type = "string" - default = "/etc/kubernetes/addons" description = "(Optional) The absolute path of the addons to be installed." + type = string + default = "/etc/kubernetes/addons" } diff --git a/modules/ignitions/tx-off/assets.tf b/modules/ignitions/tx-off/assets.tf index 9df18361..153ac806 100644 --- a/modules/ignitions/tx-off/assets.tf +++ b/modules/ignitions/tx-off/assets.tf @@ -1,9 +1,9 @@ data "template_file" "tx_off" { - template = "${file("${path.module}/resources/services/tx-off.service")}" + template = file("${path.module}/resources/services/tx-off.service") } data "ignition_systemd_unit" "tx_off" { name = "tx-off.service" enabled = true - content = "${data.template_file.tx_off.rendered}" + content = data.template_file.tx_off.rendered } diff --git a/modules/ignitions/tx-off/outputs.tf b/modules/ignitions/tx-off/outputs.tf index b82d0ecf..351011a9 100644 --- a/modules/ignitions/tx-off/outputs.tf +++ b/modules/ignitions/tx-off/outputs.tf @@ -1,6 +1,6 @@ output "systemd_units" { value = [ - "${data.ignition_systemd_unit.tx_off.id}", + data.ignition_systemd_unit.tx_off.rendered ] } diff --git a/modules/ignitions/update-ca-certificates/assets.tf b/modules/ignitions/update-ca-certificates/assets.tf index 8f7e1cd8..8146cb58 100644 --- a/modules/ignitions/update-ca-certificates/assets.tf +++ b/modules/ignitions/update-ca-certificates/assets.tf @@ -1,15 +1,13 @@ data "template_file" "update_ca_certificates_dropin" { - template = "${file("${path.module}/resources/dropins/10-always-update-ca-certificates.conf")}" + template = file("${path.module}/resources/dropins/10-always-update-ca-certificates.conf") } data "ignition_systemd_unit" "update_ca_certificates_dropin" { name = "update-ca-certificates.service" enabled = true - dropin = [ - { + dropin { name = "10-always-update-ca-certificates.conf" - content = "${data.template_file.update_ca_certificates_dropin.rendered}" - }, - ] + content = data.template_file.update_ca_certificates_dropin.rendered + } } diff --git a/modules/ignitions/update-ca-certificates/outputs.tf b/modules/ignitions/update-ca-certificates/outputs.tf index 19d03b8b..561702ec 100644 --- a/modules/ignitions/update-ca-certificates/outputs.tf +++ b/modules/ignitions/update-ca-certificates/outputs.tf @@ -1,6 +1,6 @@ output "systemd_units" { value = [ - "${data.ignition_systemd_unit.update_ca_certificates_dropin.id}", + data.ignition_systemd_unit.update_ca_certificates_dropin.rendered ] } diff --git a/modules/tls/certificate-authority/ca.tf b/modules/tls/certificate-authority/ca.tf index 3ccab8d5..2511bfd0 100644 --- a/modules/tls/certificate-authority/ca.tf +++ b/modules/tls/certificate-authority/ca.tf @@ -3,29 +3,25 @@ locals { } resource "tls_private_key" "ca" { - count = "${var.self_signed ? 1 : 0}" + count = var.self_signed ? 1 : 0 - algorithm = "${local.algorithm}" - rsa_bits = "${var.rsa_bits}" + algorithm = local.algorithm + rsa_bits = var.rsa_bits } resource "tls_self_signed_cert" "ca" { - count = "${var.self_signed ? 1 : 0}" + count = var.self_signed ? 1 : 0 - key_algorithm = "${tls_private_key.ca.algorithm}" - private_key_pem = "${tls_private_key.ca.private_key_pem}" + key_algorithm = tls_private_key.ca[count.index].algorithm + private_key_pem = tls_private_key.ca[count.index].private_key_pem subject { - common_name = "${var.cert_config["common_name"]}" - organization = "${var.cert_config["organization"]}" + common_name = var.cert_config["common_name"] + organization = var.cert_config["organization"] } is_ca_certificate = true - validity_period_hours = "${var.cert_config["validity_period_hours"]}" + validity_period_hours = var.cert_config["validity_period_hours"] - allowed_uses = [ - "key_encipherment", - "digital_signature", - "cert_signing", - ] + allowed_uses = var.ca_uses } diff --git a/modules/tls/certificate-authority/main.tf b/modules/tls/certificate-authority/main.tf deleted file mode 100644 index f54063ca..00000000 --- a/modules/tls/certificate-authority/main.tf +++ /dev/null @@ -1,11 +0,0 @@ -provider "local" { - version = "~> 1.1" -} - -provider "template" { - version = "~> 1.0" -} - -provider "tls" { - version = "~> 1.1" -} diff --git a/modules/tls/certificate-authority/outputs.tf b/modules/tls/certificate-authority/outputs.tf index 39175bfb..27345065 100644 --- a/modules/tls/certificate-authority/outputs.tf +++ b/modules/tls/certificate-authority/outputs.tf @@ -1,19 +1,19 @@ output "algorithm" { - value = "${var.self_signed ? join("", tls_private_key.ca.*.algorithm) : ""}" + value = var.self_signed ? join("", tls_private_key.ca.*.algorithm) : "" } output "rsa_bits" { - value = "${var.self_signed ? var.rsa_bits : 0}" + value = var.self_signed ? var.rsa_bits : 0 } output "private_key_pem" { - value = "${var.self_signed ? join("", tls_private_key.ca.*.private_key_pem) : ""}" + value = var.self_signed ? join("", tls_private_key.ca.*.private_key_pem) : "" sensitive = true } output "cert_pem" { - value = "${var.self_signed ? join("", tls_self_signed_cert.ca.*.cert_pem) : file(var.ca_cert_path)}" + value = var.self_signed ? join("", tls_self_signed_cert.ca.*.cert_pem) : file(var.ca_cert_path) sensitive = true } diff --git a/modules/tls/certificate-authority/variables.tf b/modules/tls/certificate-authority/variables.tf index fee9c7da..d954794a 100644 --- a/modules/tls/certificate-authority/variables.tf +++ b/modules/tls/certificate-authority/variables.tf @@ -3,10 +3,9 @@ variable "rsa_bits" { } variable "cert_config" { - type = "map" description = "Certificate configuration" - - default = { + type = map(string) + default = { common_name = "" organization = "" validity_period_hours = "26280" @@ -14,14 +13,24 @@ variable "cert_config" { } variable "ca_cert_path" { - type = "string" description = "external CA certificate" + type = string default = "/dev/null" } +variable "ca_uses" { + type = list(string) + default = [ + "key_encipherment", + "digital_signature", + "cert_signing" + ] +} + variable "self_signed" { description = < Date: Sat, 7 Sep 2019 17:19:44 +0800 Subject: [PATCH 03/11] upgrade etcd to 3.4.0 and bug fix --- examples/elastikube-cluster/main.tf | 2 +- modules/aws/elastikube/variables.tf | 4 +- modules/aws/kube-etcd/dns.tf | 30 ++++++------ modules/aws/kube-etcd/etcd.tf | 9 ++-- modules/aws/kube-etcd/outputs.tf | 5 +- modules/aws/kube-etcd/variables.tf | 4 +- modules/ignitions/etcd/assets.tf | 24 ---------- modules/ignitions/etcd/certs.tf | 28 +++++------ modules/ignitions/etcd/etcd.tf | 36 +++++++++++++++ modules/ignitions/etcd/outputs.tf | 6 ++- .../ignitions/etcd/resources/config/etcd.env | 46 +++++++++++++++++++ .../resources/dropins/40-etcd-cluster.conf | 26 ----------- .../etcd/resources/services/etcd.service | 27 +++++++++++ modules/ignitions/etcd/variables.tf | 12 ++++- .../resources/addon/kube-flannel.yaml | 2 +- 15 files changed, 168 insertions(+), 93 deletions(-) delete mode 100644 modules/ignitions/etcd/assets.tf create mode 100644 modules/ignitions/etcd/etcd.tf create mode 100644 modules/ignitions/etcd/resources/config/etcd.env delete mode 100644 modules/ignitions/etcd/resources/dropins/40-etcd-cluster.conf create mode 100644 modules/ignitions/etcd/resources/services/etcd.service diff --git a/examples/elastikube-cluster/main.tf b/examples/elastikube-cluster/main.tf index 06555ae1..39a55ef3 100644 --- a/examples/elastikube-cluster/main.tf +++ b/examples/elastikube-cluster/main.tf @@ -30,7 +30,7 @@ module "kubernetes" { instance_count = "3" ec2_type = "t3.medium" root_volume_iops = "0" - root_volume_size = "256" + root_volume_size = "100" root_volume_type = "gp2" } diff --git a/modules/aws/elastikube/variables.tf b/modules/aws/elastikube/variables.tf index 5e5c8e06..6fb80ea3 100644 --- a/modules/aws/elastikube/variables.tf +++ b/modules/aws/elastikube/variables.tf @@ -100,9 +100,9 @@ variable "etcd_config" { type = map(string) default = { instance_count = "1" - ec2_type = "t2.medium" + ec2_type = "t3.medium" root_volume_iops = "100" - root_volume_size = "256" + root_volume_size = "100" root_volume_type = "gp2" } } diff --git a/modules/aws/kube-etcd/dns.tf b/modules/aws/kube-etcd/dns.tf index 670e86e5..95d03d6c 100644 --- a/modules/aws/kube-etcd/dns.tf +++ b/modules/aws/kube-etcd/dns.tf @@ -7,22 +7,15 @@ locals { discovery_service = substr(data.aws_route53_zone.etcd.name, 0, length(data.aws_route53_zone.etcd.name) - 1) } -data "template_file" "etcd_names" { - count = var.etcd_config["instance_count"] - template = "ip-${replace(aws_instance.etcd.*.private_ip[count.index], ".", "-")}.${local.discovery_service}" -} - -data "template_file" "etcd_endpoints" { - count = var.etcd_config["instance_count"] - template = format("https://%s:%s", data.template_file.etcd_names.*.rendered[count.index], local.client_port) -} - resource "aws_route53_record" "etcd_discovery" { zone_id = data.aws_route53_zone.etcd.zone_id name = local.discovery_service type = "SRV" ttl = "300" - records = formatlist("0 0 %s %s", local.peer_port, data.template_file.etcd_names.*.rendered) + records = [ + for instance_ip in aws_instance.etcd.*.private_ip: + "0 0 ${local.peer_port} ip-${replace(instance_ip, ".", "-")}.${local.discovery_service}" + ] } resource "aws_route53_record" "etcd_discovery_server_ssl" { @@ -30,7 +23,10 @@ resource "aws_route53_record" "etcd_discovery_server_ssl" { name = "_etcd-server-ssl._tcp.${local.discovery_service}" type = "SRV" ttl = "300" - records = formatlist("0 0 %s %s", local.peer_port, data.template_file.etcd_names.*.rendered) + records = [ + for instance_ip in aws_instance.etcd.*.private_ip: + "0 0 ${local.peer_port} ip-${replace(instance_ip, ".", "-")}.${local.discovery_service}" + ] } resource "aws_route53_record" "etcd_discovery_client_ssl" { @@ -38,14 +34,18 @@ resource "aws_route53_record" "etcd_discovery_client_ssl" { name = "_etcd-client-ssl._tcp.${local.discovery_service}" type = "SRV" ttl = "300" - records = formatlist("0 0 %s %s", local.client_port, data.template_file.etcd_names.*.rendered) + + records = [ + for instance_ip in aws_instance.etcd.*.private_ip: + "0 0 ${local.client_port} ip-${replace(instance_ip, ".", "-")}.${local.discovery_service}" + ] } resource "aws_route53_record" "etcd" { count = var.etcd_config["instance_count"] zone_id = data.aws_route53_zone.etcd.zone_id - name = data.template_file.etcd_names.*.rendered[count.index] + name = "ip-${replace(aws_instance.etcd.*.private_ip[count.index], ".", "-")}.${local.discovery_service}" type = "A" ttl = "300" records = [aws_instance.etcd.*.private_ip[count.index]] -} +} \ No newline at end of file diff --git a/modules/aws/kube-etcd/etcd.tf b/modules/aws/kube-etcd/etcd.tf index 9022151c..34c3e6e4 100644 --- a/modules/aws/kube-etcd/etcd.tf +++ b/modules/aws/kube-etcd/etcd.tf @@ -1,9 +1,10 @@ -data "aws_subnet" "subnet" { - id = var.subnet_ids[0] +data "aws_subnet" "etcd" { + count = var.etcd_config["instance_count"] + id = var.subnet_ids[count.index % length(var.subnet_ids)] } locals { - vpc_id = data.aws_subnet.subnet.vpc_id + vpc_id = data.aws_subnet.etcd[0].vpc_id client_port = 2379 peer_port = 2380 } @@ -46,4 +47,4 @@ resource "aws_instance" "etcd" { "Name", "${var.name}-etcd-${count.index}-vol", "kubernetes.io/cluster/${var.name}", "owned", ), var.extra_tags) -} +} \ No newline at end of file diff --git a/modules/aws/kube-etcd/outputs.tf b/modules/aws/kube-etcd/outputs.tf index c2995894..20cdf36c 100644 --- a/modules/aws/kube-etcd/outputs.tf +++ b/modules/aws/kube-etcd/outputs.tf @@ -1,5 +1,8 @@ output "endpoints" { - value = data.template_file.etcd_endpoints.*.rendered + value = [ + for instance_ip in aws_instance.etcd.*.private_ip: + "https://ip-${replace(instance_ip, ".", "-")}.${local.discovery_service}:${local.client_port}" + ] } output "ca_cert_pem" { diff --git a/modules/aws/kube-etcd/variables.tf b/modules/aws/kube-etcd/variables.tf index e410fb90..12894a67 100644 --- a/modules/aws/kube-etcd/variables.tf +++ b/modules/aws/kube-etcd/variables.tf @@ -69,9 +69,9 @@ variable "etcd_config" { type = map(string) default = { instance_count = "1" - ec2_type = "t2.medium" + ec2_type = "t3.medium" root_volume_iops = "100" - root_volume_size = "256" + root_volume_size = "100" root_volume_type = "gp2" } } diff --git a/modules/ignitions/etcd/assets.tf b/modules/ignitions/etcd/assets.tf deleted file mode 100644 index b8b651a2..00000000 --- a/modules/ignitions/etcd/assets.tf +++ /dev/null @@ -1,24 +0,0 @@ -data "template_file" "etcd" { - template = file("${path.module}/resources/dropins/40-etcd-cluster.conf") - - vars = { - certs_path = var.certs_path - container_image_url = var.container["image_path"] - container_image_tag = var.container["image_tag"] - client_port = var.client_port - peer_port = var.peer_port - cluster_name = var.name - scheme = "https" - discovery_service = var.discovery_service - } -} - -data "ignition_systemd_unit" "etcd" { - name = "etcd-member.service" - enabled = true - - dropin { - name = "40-etcd-cluster.conf" - content = data.template_file.etcd.rendered - } -} diff --git a/modules/ignitions/etcd/certs.tf b/modules/ignitions/etcd/certs.tf index 3be86036..4c9d4f93 100644 --- a/modules/ignitions/etcd/certs.tf +++ b/modules/ignitions/etcd/certs.tf @@ -1,8 +1,8 @@ data "ignition_file" "etcd_ca" { path = "${var.certs_path}/ca.crt" mode = 420 - uid = 232 - gid = 232 + uid = var.etcd_user_id + gid = var.etcd_user_id filesystem = "root" content { @@ -13,8 +13,8 @@ data "ignition_file" "etcd_ca" { data "ignition_file" "etcd_client_key" { path = "${var.certs_path}/client.key" mode = 256 - uid = 232 - gid = 232 + uid = var.etcd_user_id + gid = var.etcd_user_id filesystem = "root" content { @@ -25,8 +25,8 @@ data "ignition_file" "etcd_client_key" { data "ignition_file" "etcd_client_cert" { path = "${var.certs_path}/client.crt" mode = 256 - uid = 232 - gid = 232 + uid = var.etcd_user_id + gid = var.etcd_user_id filesystem = "root" content { @@ -37,8 +37,8 @@ data "ignition_file" "etcd_client_cert" { data "ignition_file" "etcd_server_key" { path = "${var.certs_path}/server.key" mode = 256 - uid = 232 - gid = 232 + uid = var.etcd_user_id + gid = var.etcd_user_id filesystem = "root" content { @@ -49,8 +49,8 @@ data "ignition_file" "etcd_server_key" { data "ignition_file" "etcd_server_cert" { path = "${var.certs_path}/server.crt" mode = 256 - uid = 232 - gid = 232 + uid = var.etcd_user_id + gid = var.etcd_user_id filesystem = "root" content { @@ -61,8 +61,8 @@ data "ignition_file" "etcd_server_cert" { data "ignition_file" "etcd_peer_key" { path = "${var.certs_path}/peer.key" mode = 256 - uid = 232 - gid = 232 + uid = var.etcd_user_id + gid = var.etcd_user_id filesystem = "root" content { @@ -73,8 +73,8 @@ data "ignition_file" "etcd_peer_key" { data "ignition_file" "etcd_peer_cert" { path = "${var.certs_path}/peer.crt" mode = 256 - uid = 232 - gid = 232 + uid = var.etcd_user_id + gid = var.etcd_user_id filesystem = "root" content { diff --git a/modules/ignitions/etcd/etcd.tf b/modules/ignitions/etcd/etcd.tf new file mode 100644 index 00000000..332b679d --- /dev/null +++ b/modules/ignitions/etcd/etcd.tf @@ -0,0 +1,36 @@ +data "template_file" "etcd_env" { + template = file("${path.module}/resources/config/etcd.env") + + vars = { + image_url = var.container["image_path"] + image_tag = var.container["image_tag"] + user_id = var.etcd_user_id + cluster_name = var.name + certs_path = var.certs_path + data_path = var.data_path + discovery_service = var.discovery_service + scheme = "https" + client_port = var.client_port + peer_port = var.peer_port + } +} + +data "ignition_file" "etcd_env" { + filesystem = "root" + path = "/etc/etcd/etcd.env" + mode = 420 + + content { + content = data.template_file.etcd_env.rendered + } +} + +data "template_file" "etcd_service" { + template = file("${path.module}/resources/services/etcd.service") +} + +data "ignition_systemd_unit" "etcd_service" { + name = "etcd.service" + enabled = true + content = data.template_file.etcd_service.rendered +} \ No newline at end of file diff --git a/modules/ignitions/etcd/outputs.tf b/modules/ignitions/etcd/outputs.tf index 5414f99d..4f23840e 100644 --- a/modules/ignitions/etcd/outputs.tf +++ b/modules/ignitions/etcd/outputs.tf @@ -1,11 +1,13 @@ output "systemd_units" { value = [ - data.ignition_systemd_unit.etcd.rendered + data.ignition_systemd_unit.etcd_service.rendered, + #data.ignition_systemd_unit.etcd_data.rendered ] } output "files" { value = [ + data.ignition_file.etcd_env.rendered, data.ignition_file.etcd_ca.rendered, data.ignition_file.etcd_client_cert.rendered, data.ignition_file.etcd_client_key.rendered, @@ -14,4 +16,4 @@ output "files" { data.ignition_file.etcd_peer_cert.rendered, data.ignition_file.etcd_peer_key.rendered ] -} +} \ No newline at end of file diff --git a/modules/ignitions/etcd/resources/config/etcd.env b/modules/ignitions/etcd/resources/config/etcd.env new file mode 100644 index 00000000..e4f6d869 --- /dev/null +++ b/modules/ignitions/etcd/resources/config/etcd.env @@ -0,0 +1,46 @@ +# ETCD SELF DEFINE CONFIGURATION +IMAGE_URL="${image_url}" +IMAGE_TAG="${image_tag}" +CLIENT_PORT="${client_port}" +PEER_PORT="${peer_port}" +SCHEME="${scheme}" +USER_ID="${user_id}" + +# ETCD OFFICIAL CONFIGURATION +ETCD_CERT_FILE="${certs_path}/server.crt" +ETCD_KEY_FILE="${certs_path}/server.key" +ETCD_PEER_CERT_FILE="${certs_path}/peer.crt" +ETCD_PEER_KEY_FILE="${certs_path}/peer.key" +ETCD_PEER_TRUSTED_CA_FILE="${certs_path}/ca.crt" +ETCD_TRUSTED_CA_FILE="${certs_path}/ca.crt" +ETCD_PEER_CLIENT_CERT_AUTH="true" +ETCD_CLIENT_CERT_AUTH="true" +ETCD_LISTEN_CLIENT_URLS="${scheme}://0.0.0.0:${client_port}" +ETCD_LISTEN_PEER_URLS="${scheme}://0.0.0.0:${peer_port}" +ETCD_DATA_DIR="${data_path}" +ETCD_DISCOVERY_SRV="${discovery_service}" +ETCD_INITIAL_CLUSTER_STATE="new" +ETCD_INITIAL_CLUSTER_TOKEN="${cluster_name}" +ETCD_LOGGER="zap" + +# RKT VOLUME CONFIGURATION +RKT_RUN_ARGS="--volume etcd-ssl,kind=host,source=${certs_path} \ + --mount volume=etcd-ssl,target=${certs_path} \ + --volume coreos-systemd-dir,kind=host,source=/run/systemd/system,readOnly=true \ + --mount volume=coreos-systemd-dir,target=/run/systemd/system \ + --volume coreos-notify,kind=host,source=/run/systemd/notify \ + --mount volume=coreos-notify,target=/run/systemd/notify \ + --volume coreos-data-dir,kind=host,source=${data_path},readOnly=false \ + --mount volume=coreos-data-dir,target=/var/lib/etcd \ + --volume coreos-etc-ssl-certs,kind=host,source=/etc/ssl/certs,readOnly=true \ + --mount volume=coreos-etc-ssl-certs,target=/etc/ssl/certs \ + --volume coreos-usr-share-certs,kind=host,source=/usr/share/ca-certificates,readOnly=true \ + --mount volume=coreos-usr-share-certs,target=/usr/share/ca-certificates \ + --volume coreos-etc-hosts,kind=host,source=/etc/hosts,readOnly=true \ + --mount volume=coreos-etc-hosts,target=/etc/hosts \ + --volume coreos-etc-resolv,kind=host,source=/etc/resolv.conf,readOnly=true \ + --mount volume=coreos-etc-resolv,target=/etc/resolv.conf \ + --set-env=NOTIFY_SOCKET=/run/systemd/notify \ + --stage1-from-dir=stage1-fly.aci \ + --inherit-env \ + --trust-keys-from-https" \ No newline at end of file diff --git a/modules/ignitions/etcd/resources/dropins/40-etcd-cluster.conf b/modules/ignitions/etcd/resources/dropins/40-etcd-cluster.conf deleted file mode 100644 index 4a17bfe7..00000000 --- a/modules/ignitions/etcd/resources/dropins/40-etcd-cluster.conf +++ /dev/null @@ -1,26 +0,0 @@ -[Service] -Environment="ETCD_IMAGE=${container_image_url}:${container_image_tag}" -Environment="RKT_RUN_ARGS=--volume etcd-ssl,kind=host,source=${certs_path} \ - --mount volume=etcd-ssl,target=${certs_path}" -ExecStartPre=/usr/bin/sh -c "HOSTNAME=$(curl -s http://169.254.169.254/latest/meta-data/local-hostname | cut -d '.' -f 1); /usr/bin/systemctl set-environment MY_NAME=$HOSTNAME" -ExecStartPre=/usr/bin/sh -c "HOST_IP=$(curl -s http://169.254.169.254/latest/meta-data/local-ipv4); /usr/bin/systemctl set-environment HOST_IP=$HOST_IP" - -ExecStart= -ExecStart=/usr/lib/coreos/etcd-wrapper \ - --name=$${MY_NAME} \ - --discovery-srv=${discovery_service} \ - --data-dir=/var/lib/etcd \ - --initial-cluster-token=${cluster_name} \ - --initial-cluster-state=new \ - --cert-file=${certs_path}/server.crt \ - --key-file=${certs_path}/server.key \ - --peer-cert-file=${certs_path}/peer.crt \ - --peer-key-file=${certs_path}/peer.key \ - --peer-trusted-ca-file=${certs_path}/ca.crt \ - --peer-client-cert-auth=true \ - --client-cert-auth=true \ - --trusted-ca-file=${certs_path}/ca.crt \ - --advertise-client-urls=${scheme}://$${MY_NAME}.${discovery_service}:${client_port} \ - --initial-advertise-peer-urls=${scheme}://$${MY_NAME}.${discovery_service}:${peer_port} \ - --listen-client-urls=${scheme}://0.0.0.0:${client_port} \ - --listen-peer-urls=${scheme}://0.0.0.0:${peer_port} diff --git a/modules/ignitions/etcd/resources/services/etcd.service b/modules/ignitions/etcd/resources/services/etcd.service new file mode 100644 index 00000000..f71d667e --- /dev/null +++ b/modules/ignitions/etcd/resources/services/etcd.service @@ -0,0 +1,27 @@ +[Unit] +Description=etcd service +# Wait for networking +Requires=network-online.target +After=network-online.target + +[Service] +Slice=machine.slice + +EnvironmentFile=/etc/etcd/etcd.env + +ExecStartPre=/usr/bin/sh -c "HOSTNAME=$(curl -s http://169.254.169.254/latest/meta-data/local-hostname | cut -d '.' -f 1); /usr/bin/systemctl set-environment MY_NAME=$HOSTNAME" +ExecStartPre=/usr/bin/sh -c "HOST_IP=$(curl -s http://169.254.169.254/latest/meta-data/local-ipv4); /usr/bin/systemctl set-environment HOST_IP=$HOST_IP" + +ExecStartPre=/bin/mkdir -p /var/lib/etcd +ExecStartPre=/usr/bin/chown $${USER_ID}:$${USER_ID} /var/lib/etcd + +ExecStart=/usr/bin/rkt run $RKT_RUN_ARGS $${IMAGE_URL}:$${IMAGE_TAG} \ + --user=$${ETCD_USER_ID} -- --name=$${MY_NAME} \ + --advertise-client-urls=$${SCHEME}://$${HOST_IP}:$${CLIENT_PORT} \ + --initial-advertise-peer-urls=$${SCHEME}://$${HOST_IP}:$${PEER_PORT} + +Restart=always +RestartSec=10 + +[Install] +WantedBy=multi-user.target \ No newline at end of file diff --git a/modules/ignitions/etcd/variables.tf b/modules/ignitions/etcd/variables.tf index 21c2a032..4dae3aa1 100644 --- a/modules/ignitions/etcd/variables.tf +++ b/modules/ignitions/etcd/variables.tf @@ -2,6 +2,11 @@ variable "name" { type = string } +variable "etcd_user_id" { + type = number + default = 232 +} + variable "discovery_service" { type = string } @@ -33,11 +38,16 @@ variable "certs_config" { } } +variable "data_path" { + type = string + default = "/var/lib/etcd" +} + variable "container" { type = map(string) default = { image_path = "quay.io/coreos/etcd" - image_tag = "v3.3.15" + image_tag = "v3.4.0" } } diff --git a/modules/ignitions/kube-addon-flannel-vxlan/resources/addon/kube-flannel.yaml b/modules/ignitions/kube-addon-flannel-vxlan/resources/addon/kube-flannel.yaml index a64b515d..4a9e8ed3 100644 --- a/modules/ignitions/kube-addon-flannel-vxlan/resources/addon/kube-flannel.yaml +++ b/modules/ignitions/kube-addon-flannel-vxlan/resources/addon/kube-flannel.yaml @@ -210,7 +210,7 @@ spec: path: /run/flannel - name: cni hostPath: - path: /etc/cni/net.d + path: /etc/kubernetes/cni/net.d - name: flannel-cfg configMap: name: kube-flannel-cfg \ No newline at end of file From 4d84892b5f19c9429eaf331a29d9f8c556eb8c9d Mon Sep 17 00:00:00 2001 From: smalltown Date: Mon, 9 Sep 2019 18:42:39 +0800 Subject: [PATCH 04/11] bug fix for ign aws-iam-auth-master and kube-audit --- modules/ignitions/aws-iam-auth-master/webhook-kubeconfig.tf | 2 +- modules/ignitions/kube-audit/policy-yaml.tf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/ignitions/aws-iam-auth-master/webhook-kubeconfig.tf b/modules/ignitions/aws-iam-auth-master/webhook-kubeconfig.tf index 6edcfab0..71a95e56 100644 --- a/modules/ignitions/aws-iam-auth-master/webhook-kubeconfig.tf +++ b/modules/ignitions/aws-iam-auth-master/webhook-kubeconfig.tf @@ -1,5 +1,5 @@ data "template_file" "kubeconfig" { - template = file("${path.module}/resources/kubernetes/webhook/kubeconfig")}" + template = file("${path.module}/resources/kubernetes/webhook/kubeconfig") vars = { webhook_ca = var.webhook_kubeconfig_ca diff --git a/modules/ignitions/kube-audit/policy-yaml.tf b/modules/ignitions/kube-audit/policy-yaml.tf index 3e19d2b2..d9e4ac64 100644 --- a/modules/ignitions/kube-audit/policy-yaml.tf +++ b/modules/ignitions/kube-audit/policy-yaml.tf @@ -1,7 +1,7 @@ data "template_file" "policy_yaml" { template = file("${path.module}/resources/kubernetes/policy.yaml") - vars { + vars = { audit_policy = var.audit_policy } } From 247caa0acb1fa22c79108cf43f903e98850fa954 Mon Sep 17 00:00:00 2001 From: smalltown Date: Wed, 18 Sep 2019 17:10:38 +0800 Subject: [PATCH 05/11] modify for reviewing feedback --- modules/ignitions/etcd/certs.tf | 28 ++++++++++++++-------------- modules/ignitions/etcd/variables.tf | 13 ++++++++++--- 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/modules/ignitions/etcd/certs.tf b/modules/ignitions/etcd/certs.tf index 4c9d4f93..912638e9 100644 --- a/modules/ignitions/etcd/certs.tf +++ b/modules/ignitions/etcd/certs.tf @@ -1,8 +1,8 @@ data "ignition_file" "etcd_ca" { path = "${var.certs_path}/ca.crt" mode = 420 - uid = var.etcd_user_id - gid = var.etcd_user_id + uid = var.cert_file_owner["uid"] + gid = var.cert_file_owner["gid"] filesystem = "root" content { @@ -13,8 +13,8 @@ data "ignition_file" "etcd_ca" { data "ignition_file" "etcd_client_key" { path = "${var.certs_path}/client.key" mode = 256 - uid = var.etcd_user_id - gid = var.etcd_user_id + uid = var.cert_file_owner["uid"] + gid = var.cert_file_owner["gid"] filesystem = "root" content { @@ -25,8 +25,8 @@ data "ignition_file" "etcd_client_key" { data "ignition_file" "etcd_client_cert" { path = "${var.certs_path}/client.crt" mode = 256 - uid = var.etcd_user_id - gid = var.etcd_user_id + uid = var.cert_file_owner["uid"] + gid = var.cert_file_owner["gid"] filesystem = "root" content { @@ -37,8 +37,8 @@ data "ignition_file" "etcd_client_cert" { data "ignition_file" "etcd_server_key" { path = "${var.certs_path}/server.key" mode = 256 - uid = var.etcd_user_id - gid = var.etcd_user_id + uid = var.cert_file_owner["uid"] + gid = var.cert_file_owner["gid"] filesystem = "root" content { @@ -49,8 +49,8 @@ data "ignition_file" "etcd_server_key" { data "ignition_file" "etcd_server_cert" { path = "${var.certs_path}/server.crt" mode = 256 - uid = var.etcd_user_id - gid = var.etcd_user_id + uid = var.cert_file_owner["uid"] + gid = var.cert_file_owner["gid"] filesystem = "root" content { @@ -61,8 +61,8 @@ data "ignition_file" "etcd_server_cert" { data "ignition_file" "etcd_peer_key" { path = "${var.certs_path}/peer.key" mode = 256 - uid = var.etcd_user_id - gid = var.etcd_user_id + uid = var.cert_file_owner["uid"] + gid = var.cert_file_owner["gid"] filesystem = "root" content { @@ -73,8 +73,8 @@ data "ignition_file" "etcd_peer_key" { data "ignition_file" "etcd_peer_cert" { path = "${var.certs_path}/peer.crt" mode = 256 - uid = var.etcd_user_id - gid = var.etcd_user_id + uid = var.cert_file_owner["uid"] + gid = var.cert_file_owner["gid"] filesystem = "root" content { diff --git a/modules/ignitions/etcd/variables.tf b/modules/ignitions/etcd/variables.tf index 4dae3aa1..8c4ea8f7 100644 --- a/modules/ignitions/etcd/variables.tf +++ b/modules/ignitions/etcd/variables.tf @@ -2,9 +2,16 @@ variable "name" { type = string } -variable "etcd_user_id" { - type = number - default = 232 +variable "cert_file_owner" { + type = object({ + uid = number + gid = number + }) + + default = { + uid = 232 + git = 232 + } } variable "discovery_service" { From c29afe918b1204e9a71c6f9c5d4d3203bdbf512c Mon Sep 17 00:00:00 2001 From: smalltown Date: Wed, 18 Sep 2019 17:10:48 +0800 Subject: [PATCH 06/11] coredns bugfix --- modules/aws/elastikube/ign-essential.tf | 1 - .../ignitions/kube-addon-dns/coredns-yaml.tf | 4 ---- .../kubernetes/manifests/coredns.yaml | 2 +- modules/ignitions/kube-addon-dns/variables.tf | 23 ------------------- 4 files changed, 1 insertion(+), 29 deletions(-) diff --git a/modules/aws/elastikube/ign-essential.tf b/modules/aws/elastikube/ign-essential.tf index 6baa5c00..784482db 100644 --- a/modules/aws/elastikube/ign-essential.tf +++ b/modules/aws/elastikube/ign-essential.tf @@ -25,7 +25,6 @@ module "ignition_kube_addon_manager" { module "ignition_kube_addon_dns" { source = "../../ignitions/kube-addon-dns" - reverse_cidrs = var.service_cidr cluster_dns_ip = local.cluster_dns_ip } diff --git a/modules/ignitions/kube-addon-dns/coredns-yaml.tf b/modules/ignitions/kube-addon-dns/coredns-yaml.tf index 401af7ce..8bfee9b8 100644 --- a/modules/ignitions/kube-addon-dns/coredns-yaml.tf +++ b/modules/ignitions/kube-addon-dns/coredns-yaml.tf @@ -3,12 +3,8 @@ data "template_file" "coredns_yaml" { vars = { image = var.image - reverse_cidrs = var.reverse_cidrs cluster_dns_ip = var.cluster_dns_ip cluster_domain = var.cluster_domain - federations = var.federations - subdomains = var.subdomains - upstream_nameserver = var.upstream_nameserver } } diff --git a/modules/ignitions/kube-addon-dns/resources/kubernetes/manifests/coredns.yaml b/modules/ignitions/kube-addon-dns/resources/kubernetes/manifests/coredns.yaml index 25ac6a20..8a65953d 100644 --- a/modules/ignitions/kube-addon-dns/resources/kubernetes/manifests/coredns.yaml +++ b/modules/ignitions/kube-addon-dns/resources/kubernetes/manifests/coredns.yaml @@ -64,7 +64,7 @@ data: errors health ready - kubernetes {{ pillar['dns_domain'] }} in-addr.arpa ip6.arpa { + kubernetes ${cluster_domain} in-addr.arpa ip6.arpa { pods insecure fallthrough in-addr.arpa ip6.arpa ttl 30 diff --git a/modules/ignitions/kube-addon-dns/variables.tf b/modules/ignitions/kube-addon-dns/variables.tf index 9b304d2f..f271dc4f 100644 --- a/modules/ignitions/kube-addon-dns/variables.tf +++ b/modules/ignitions/kube-addon-dns/variables.tf @@ -10,11 +10,6 @@ variable "image" { default = "k8s.gcr.io/coredns:1.6.2" } -variable "reverse_cidrs" { - description = "CoreDNS reverse cidrs" - type = string -} - variable "cluster_dns_ip" { description = "K8S cluster dns ip" type = string @@ -24,22 +19,4 @@ variable "cluster_domain" { description = "K8S cluster domain" type = string default = "cluster.local." -} - -variable "federations" { - description = "federations" - type = string - default = "" -} - -variable "subdomains" { - description = "subdomains" - type = string - default = "" -} - -variable "upstream_nameserver" { - description = "upstream nameserver" - type = string - default = "/etc/resolv.conf" } \ No newline at end of file From 05ebd16a6ec6b16e8720c6a14407dab399cb7ed7 Mon Sep 17 00:00:00 2001 From: smalltown Date: Thu, 19 Sep 2019 11:03:59 +0800 Subject: [PATCH 07/11] variable typo --- modules/ignitions/etcd/variables.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/ignitions/etcd/variables.tf b/modules/ignitions/etcd/variables.tf index 8c4ea8f7..1cd1519c 100644 --- a/modules/ignitions/etcd/variables.tf +++ b/modules/ignitions/etcd/variables.tf @@ -10,7 +10,7 @@ variable "cert_file_owner" { default = { uid = 232 - git = 232 + gid = 232 } } From a0c3fdaddb371c23d406dd418597bb318368a1cd Mon Sep 17 00:00:00 2001 From: smalltown Date: Thu, 19 Sep 2019 11:08:44 +0800 Subject: [PATCH 08/11] fix not exist variable --- modules/ignitions/etcd/etcd.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/ignitions/etcd/etcd.tf b/modules/ignitions/etcd/etcd.tf index 332b679d..50d45f70 100644 --- a/modules/ignitions/etcd/etcd.tf +++ b/modules/ignitions/etcd/etcd.tf @@ -4,7 +4,7 @@ data "template_file" "etcd_env" { vars = { image_url = var.container["image_path"] image_tag = var.container["image_tag"] - user_id = var.etcd_user_id + user_id = var.cert_file_owner["uid"] cluster_name = var.name certs_path = var.certs_path data_path = var.data_path From 143ef022988a6c797c4e1284a7edd21e06a703dd Mon Sep 17 00:00:00 2001 From: smalltown Date: Fri, 27 Sep 2019 13:14:40 +0800 Subject: [PATCH 09/11] support AWS IRSA --- .../aws-iam-auth-master.tf | 41 ----- examples/aws-iam-authenticator/main.tf | 152 ------------------ examples/aws-iam-authenticator/variables.tf | 39 ----- examples/aws-iam/certs.tf | 38 +++++ examples/aws-iam/ign-authenticator.tf | 37 +++++ .../k8s/nginx.yml => aws-iam/k8s/nginx.yaml} | 0 examples/aws-iam/main.tf | 110 +++++++++++++ examples/aws-iam/oidc.tf | 29 ++++ examples/aws-iam/outputs.tf | 23 +++ examples/aws-iam/providers.tf | 32 ++++ .../resources/kubeconfig.iam | 0 examples/aws-iam/variables.tf | 88 ++++++++++ .../eks-cluster/k8s/{nginx.yml => nginx.yaml} | 0 .../k8s/{nginx.yml => nginx.yaml} | 0 examples/elastikube-cluster/main.tf | 2 +- modules/aws/elastikube/master.tf | 7 +- modules/aws/elastikube/outputs.tf | 4 + modules/aws/elastikube/variables.tf | 12 ++ modules/aws/kube-master/ign-control-plane.tf | 3 +- modules/aws/kube-master/outputs.tf | 4 + modules/aws/kube-master/variables.tf | 12 ++ .../kube-control-plane/kube-apiserver-yaml.tf | 3 + .../ignitions/kube-control-plane/outputs.tf | 6 + .../kubernetes/manifests/kube-apiserver.yaml | 1 + .../ignitions/kube-control-plane/secrets.tf | 27 ++++ .../ignitions/kube-control-plane/variables.tf | 12 ++ 26 files changed, 445 insertions(+), 237 deletions(-) delete mode 100644 examples/aws-iam-authenticator/aws-iam-auth-master.tf delete mode 100644 examples/aws-iam-authenticator/main.tf delete mode 100644 examples/aws-iam-authenticator/variables.tf create mode 100644 examples/aws-iam/certs.tf create mode 100644 examples/aws-iam/ign-authenticator.tf rename examples/{aws-iam-authenticator/k8s/nginx.yml => aws-iam/k8s/nginx.yaml} (100%) create mode 100644 examples/aws-iam/main.tf create mode 100644 examples/aws-iam/oidc.tf create mode 100644 examples/aws-iam/outputs.tf create mode 100644 examples/aws-iam/providers.tf rename examples/{aws-iam-authenticator => aws-iam}/resources/kubeconfig.iam (100%) create mode 100644 examples/aws-iam/variables.tf rename examples/eks-cluster/k8s/{nginx.yml => nginx.yaml} (100%) rename examples/elastikube-cluster/k8s/{nginx.yml => nginx.yaml} (100%) diff --git a/examples/aws-iam-authenticator/aws-iam-auth-master.tf b/examples/aws-iam-authenticator/aws-iam-auth-master.tf deleted file mode 100644 index d01d5a83..00000000 --- a/examples/aws-iam-authenticator/aws-iam-auth-master.tf +++ /dev/null @@ -1,41 +0,0 @@ -module "ignition_aws_iam_authenticator" { - source = "../../modules/ignitions/aws-iam-auth-master" - - webhook_kubeconfig_ca = "${module.kubernetes.certificate_authority}" - webhook_kubeconfig_path = "${var.auth_webhook_path}" -} - -data "aws_route53_zone" "private" { - name = "${local.hostzone}." - private_zone = true -} - -data "aws_s3_bucket" "kubernetes" { - bucket = "${local.cluster_name}-${md5(data.aws_route53_zone.private.zone_id)}" -} - -data "template_file" "kubeconfig_iam" { - - template = "${file("${path.module}/resources/kubeconfig.iam")}" - - vars { - api_server_endpoint = "${module.kubernetes.endpoint}" - cluster_name = "${local.cluster_name}" - cluster_ca = "${module.kubernetes.certificate_authority}" - } -} - -resource "aws_s3_bucket_object" "kubeconfig_iam" { - bucket = "${data.aws_s3_bucket.kubernetes.id}" - key = "kubeconfig.iam" - content = "${data.template_file.kubeconfig_iam.rendered}" - acl = "private" - - server_side_encryption = "AES256" - content_type = "text/plain" - - tags = "${merge(map( - "Name", "kubeconfig.iam", - "kubernetes.io/cluster/${local.cluster_name}", "owned", - ), var.extra_tags)}" -} diff --git a/examples/aws-iam-authenticator/main.tf b/examples/aws-iam-authenticator/main.tf deleted file mode 100644 index 775dfd1f..00000000 --- a/examples/aws-iam-authenticator/main.tf +++ /dev/null @@ -1,152 +0,0 @@ -locals { - project = "elastikube" - phase = "auth" - cluster_name = "${local.phase}-${local.project}" - hostzone = "${local.cluster_name}.cluster" - kubernetes_version = "v1.13.4" -} - -# --------------------------------------------------------------------------------------------------------------------- -# SSH -# --------------------------------------------------------------------------------------------------------------------- - -provider "aws" { - version = "1.60.0" - region = "${var.aws_region}" -} - -# --------------------------------------------------------------------------------------------------------------------- -# Network -# --------------------------------------------------------------------------------------------------------------------- - -module "network" { - source = "../../modules/aws/network" - aws_region = "${var.aws_region}" - bastion_key_name = "${var.key_pair_name}" - project = "${local.project}" - phase = "${local.phase}" - extra_tags = "${var.extra_tags}" -} - -# --------------------------------------------------------------------------------------------------------------------- -# ElastiKube -# --------------------------------------------------------------------------------------------------------------------- - -module "kubernetes" { - source = "../../modules/aws/elastikube" - - name = "${local.cluster_name}" - aws_region = "${var.aws_region}" - kubernetes_version = "${local.kubernetes_version}" - service_cidr = "${var.service_cidr}" - cluster_cidr = "${var.cluster_cidr}" - - etcd_config = { - instance_count = "3" - ec2_type = "t3.medium" - root_volume_iops = "0" - root_volume_size = "256" - root_volume_type = "gp2" - } - - master_config = { - instance_count = "2" - ec2_type = "t3.medium" - root_volume_iops = "0" - root_volume_size = "256" - root_volume_type = "gp2" - } - - extra_ignition_file_ids = "${module.ignition_aws_iam_authenticator.files}" - extra_ignition_systemd_unit_ids = "${module.ignition_aws_iam_authenticator.systemd_units}" - - hostzone = "${local.project}.cluster" - endpoint_public_access = "${var.endpoint_public_access}" - private_subnet_ids = ["${module.network.private_subnet_ids}"] - public_subnet_ids = ["${module.network.public_subnet_ids}"] - ssh_key = "${var.key_pair_name}" - reboot_strategy = "off" - - auth_webhook_path = "${var.auth_webhook_path}" - - extra_tags = "${merge(map( - "Phase", "${local.phase}", - "Project", "${local.project}", - ), var.extra_tags)}" -} - -# --------------------------------------------------------------------------------------------------------------------- -# Worker Node (On Demand Instance) -# --------------------------------------------------------------------------------------------------------------------- - -module "worker_on_demand" { - source = "../../modules/aws/kube-worker" - - cluster_name = "${local.cluster_name}" - aws_region = "${var.aws_region}" - kubernetes_version = "${local.kubernetes_version}" - kube_service_cidr = "${var.service_cidr}" - - security_group_ids = ["${module.kubernetes.worker_sg_ids}"] - subnet_ids = ["${module.network.private_subnet_ids}"] - - worker_config = { - name = "on_demand" - instance_count = "2" - ec2_type_1 = "t3.medium" - ec2_type_2 = "t2.medium" - root_volume_iops = "0" - root_volume_size = "40" - root_volume_type = "gp2" - - on_demand_base_capacity = 0 - on_demand_percentage_above_base_capacity = 100 - spot_instance_pools = 1 - } - - s3_bucket = "${module.kubernetes.s3_bucket}" - ssh_key = "${var.key_pair_name}" - - extra_tags = "${merge(map( - "Phase", "${var.phase}", - "Project", "${var.project}", - ), var.extra_tags)}" -} - -# --------------------------------------------------------------------------------------------------------------------- -# Worker Node (On Spot Instance) -# --------------------------------------------------------------------------------------------------------------------- - -module "worker_spot" { - source = "../../modules/aws/kube-worker" - - cluster_name = "${local.cluster_name}" - aws_region = "${var.aws_region}" - kubernetes_version = "${local.kubernetes_version}" - kube_service_cidr = "${var.service_cidr}" - - security_group_ids = ["${module.kubernetes.worker_sg_ids}"] - subnet_ids = ["${module.network.private_subnet_ids}"] - - worker_config = { - name = "spot" - instance_count = "2" - ec2_type_1 = "m5.large" - ec2_type_2 = "m4.large" - root_volume_iops = "0" - root_volume_size = "40" - root_volume_type = "gp2" - - on_demand_base_capacity = 0 - on_demand_percentage_above_base_capacity = 0 - spot_instance_pools = 1 - } - - s3_bucket = "${module.kubernetes.s3_bucket}" - ssh_key = "${var.key_pair_name}" - - extra_tags = "${merge(map( - "Phase", "${local.phase}", - "Project", "${local.project}", - ), var.extra_tags)}" -} diff --git a/examples/aws-iam-authenticator/variables.tf b/examples/aws-iam-authenticator/variables.tf deleted file mode 100644 index 41d21b01..00000000 --- a/examples/aws-iam-authenticator/variables.tf +++ /dev/null @@ -1,39 +0,0 @@ -variable "aws_region" { - type = "string" - default = "ap-southeast-1" - description = "(Optional) The AWS region" -} - -variable "service_cidr" { - type = "string" - default = "172.16.0.0/13" - description = "(Optional) The Kubernetes service CIDR." -} - -variable "cluster_cidr" { - type = "string" - default = "172.24.0.0/13" - description = "(Optional) The Kubernetes cluster CIDR." -} - -variable "key_pair_name" { - type = "string" - description = "The ssh key name for all instance, e.g. bastion, master, etcd, worker" -} - -variable "endpoint_public_access" { - default = false - description = "(Optional) kubernetes apiserver endpoint" -} - -variable "extra_tags" { - type = "map" - default = {} - description = "Extra AWS tags to be applied to created resources." -} - -variable "auth_webhook_path" { - type = "string" - default = "/etc/kubernetes/aws-iam-authenticator" - description = "(Optional) A path for using customize machine to authenticate to a Kubernetes cluster." -} diff --git a/examples/aws-iam/certs.tf b/examples/aws-iam/certs.tf new file mode 100644 index 00000000..60578c33 --- /dev/null +++ b/examples/aws-iam/certs.tf @@ -0,0 +1,38 @@ +module "pod_identity_webhook_root_ca" { + source = "../../modules/tls/certificate-authority" + + cert_config = { + common_name = local.cluster_name + organization = local.cluster_name + validity_period_hours = var.certs_validity_period_hours + } + + rsa_bits = 2048 + self_signed = true +} + +module "pod_identity_webhook_cert" { + source = "../../modules/tls/certificate" + + ca_config = { + algorithm = module.pod_identity_webhook_root_ca.algorithm + key_pem = module.pod_identity_webhook_root_ca.private_key_pem + cert_pem = module.pod_identity_webhook_root_ca.cert_pem + } + + cert_config = { + common_name = "pod-identity-webhook" + organization = local.cluster_name + validity_period_hours = var.certs_validity_period_hours + } + + cert_hostnames = ["${var.pod_identity_webhook_service_name}.${var.pod_identity_webhook_service_namespace}.svc"] + + cert_uses = [ + "key_encipherment", + "digital_signature", + "server_auth", + ] + + self_signed = true +} \ No newline at end of file diff --git a/examples/aws-iam/ign-authenticator.tf b/examples/aws-iam/ign-authenticator.tf new file mode 100644 index 00000000..b3195e0b --- /dev/null +++ b/examples/aws-iam/ign-authenticator.tf @@ -0,0 +1,37 @@ +module "ignition_aws_iam_authenticator" { + source = "../../modules/ignitions/aws-iam-auth-master" + + webhook_kubeconfig_ca = module.kubernetes.certificate_authority + webhook_kubeconfig_path = var.auth_webhook_path +} + +data "aws_s3_bucket" "kubernetes" { + bucket = module.kubernetes.s3_bucket +} + +data "template_file" "kubeconfig_iam" { + + template = file("${path.module}/resources/kubeconfig.iam") + + vars = { + api_server_endpoint = module.kubernetes.endpoint + cluster_name = local.cluster_name + cluster_ca = module.kubernetes.certificate_authority + } +} + +resource "aws_s3_bucket_object" "kubeconfig_iam" { + bucket = data.aws_s3_bucket.kubernetes.id + + key = "kubeconfig.iam" + content = data.template_file.kubeconfig_iam.rendered + acl = "private" + + server_side_encryption = "AES256" + content_type = "text/plain" + + tags = merge(map( + "Name", "kubeconfig.iam", + "kubernetes.io/cluster/${local.cluster_name}", "owned", + ), var.extra_tags) +} diff --git a/examples/aws-iam-authenticator/k8s/nginx.yml b/examples/aws-iam/k8s/nginx.yaml similarity index 100% rename from examples/aws-iam-authenticator/k8s/nginx.yml rename to examples/aws-iam/k8s/nginx.yaml diff --git a/examples/aws-iam/main.tf b/examples/aws-iam/main.tf new file mode 100644 index 00000000..95efe998 --- /dev/null +++ b/examples/aws-iam/main.tf @@ -0,0 +1,110 @@ +locals { + cluster_name = "${var.phase}-${var.project}" +} + + + +# --------------------------------------------------------------------------------------------------------------------- +# Network +# --------------------------------------------------------------------------------------------------------------------- + +module "network" { + source = "../../modules/aws/network" + bastion_key_name = var.key_pair_name + project = var.project + phase = var.phase + extra_tags = var.extra_tags +} + +# --------------------------------------------------------------------------------------------------------------------- +# ElastiKube +# --------------------------------------------------------------------------------------------------------------------- + +module "kubernetes" { + source = "../../modules/aws/elastikube" + + name = local.cluster_name + kubernetes_version = var.kubernetes_version + service_cidr = var.service_cidr + cluster_cidr = var.cluster_cidr + + etcd_config = { + instance_count = "1" + ec2_type = "t3.medium" + root_volume_iops = "0" + root_volume_size = "100" + root_volume_type = "gp2" + } + + master_config = { + instance_count = "1" + ec2_type_1 = "t3.medium" + ec2_type_2 = "t2.medium" + root_volume_iops = "100" + root_volume_size = "256" + root_volume_type = "gp2" + + on_demand_base_capacity = 0 + on_demand_percentage_above_base_capacity = 100 + spot_instance_pools = 1 + } + + oidc_issuer_confg = { + issuer = "https://s3-${var.aws_region}.amazonaws.com/${aws_s3_bucket.oidc.id}" + api_audiences = var.oidc_api_audiences + } + + extra_ignition_file_ids = "${module.ignition_aws_iam_authenticator.files}" + extra_ignition_systemd_unit_ids = "${module.ignition_aws_iam_authenticator.systemd_units}" + + hostzone = "${var.project}.cluster" + endpoint_public_access = var.endpoint_public_access + private_subnet_ids = module.network.private_subnet_ids + public_subnet_ids = module.network.public_subnet_ids + ssh_key = var.key_pair_name + reboot_strategy = "off" + auth_webhook_path = var.auth_webhook_path + + + extra_tags = merge(map( + "Phase", var.phase, + "Project", var.project, + ), var.extra_tags) +} + +# --------------------------------------------------------------------------------------------------------------------- +# Worker Node (On Spot Instance) +# --------------------------------------------------------------------------------------------------------------------- + +module "worker_spot" { + source = "../../modules/aws/kube-worker" + + cluster_name = local.cluster_name + kubernetes_version = var.kubernetes_version + kube_service_cidr = var.service_cidr + + security_group_ids = module.kubernetes.worker_sg_ids + subnet_ids = module.network.private_subnet_ids + + worker_config = { + name = "spot" + instance_count = "1" + ec2_type_1 = "m5.large" + ec2_type_2 = "m4.large" + root_volume_iops = "0" + root_volume_size = "40" + root_volume_type = "gp2" + + on_demand_base_capacity = 0 + on_demand_percentage_above_base_capacity = 0 + spot_instance_pools = 1 + } + + s3_bucket = module.kubernetes.s3_bucket + ssh_key = var.key_pair_name + + extra_tags = merge(map( + "Phase", var.phase, + "Project", var.project, + ), var.extra_tags) +} diff --git a/examples/aws-iam/oidc.tf b/examples/aws-iam/oidc.tf new file mode 100644 index 00000000..12c3628e --- /dev/null +++ b/examples/aws-iam/oidc.tf @@ -0,0 +1,29 @@ +resource "aws_s3_bucket" "oidc" { + bucket = "${local.cluster_name}-oidc-${md5("${local.cluster_name}-oidc")}" + acl = "public-read" + + tags = merge(map( + "Name", "${local.cluster_name}-oidc-${md5("${local.cluster_name}-oidc")}", + "Phase", var.phase, + "Project", var.project, + ), var.extra_tags) +} + +resource "null_resource" "oidc_thumbprint" { + provisioner "local-exec" { + command = "openssl s_client -connect s3-${var.aws_region}.amazonaws.com:443 -servername s3-${var.aws_region}.amazonaws.com -showcerts < /dev/null 2>/dev/null | openssl x509 -in /dev/stdin -sha1 -noout -fingerprint | cut -d '=' -f 2 | tr -d ':' > ${path.module}/.terraform/oidc_thumbprint" + } +} + +data "local_file" "oidc_thumbprint" { + filename = "${path.module}/.terraform/oidc_thumbprint" + depends_on = [null_resource.oidc_thumbprint] +} + +resource "aws_iam_openid_connect_provider" "irsa" { + url = "https://s3-${var.aws_region}.amazonaws.com/${aws_s3_bucket.oidc.id}" + + client_id_list = [ var.oidc_api_audiences ] + + thumbprint_list = [ chomp(data.local_file.oidc_thumbprint.content) ] +} \ No newline at end of file diff --git a/examples/aws-iam/outputs.tf b/examples/aws-iam/outputs.tf new file mode 100644 index 00000000..aac73ded --- /dev/null +++ b/examples/aws-iam/outputs.tf @@ -0,0 +1,23 @@ +output "bastion_public_ip" { + value = module.network.bastion_public_ip +} + +output "ignition_s3_bucket" { + value = module.kubernetes.s3_bucket +} + +output "oidc_s3_bucket" { + value = aws_s3_bucket.oidc.id +} + +output "oidc_issuer_pub" { + value = module.kubernetes.oidc_issuer_pubkey +} + +output "tls_crt" { + value = module.pod_identity_webhook_cert.cert_pem +} + +output "tls_key" { + value = module.pod_identity_webhook_cert.private_key_pem +} \ No newline at end of file diff --git a/examples/aws-iam/providers.tf b/examples/aws-iam/providers.tf new file mode 100644 index 00000000..e5d8b8dc --- /dev/null +++ b/examples/aws-iam/providers.tf @@ -0,0 +1,32 @@ +terraform { + required_version = ">= 0.12.0" +} + +provider "aws" { + region = var.aws_region + version = "2.26.0" +} + +provider "external" { + version = "1.2.0" +} + +provider "ignition" { + version = "1.1.0" +} + +provider "null" { + version = "2.1.2" +} + +provider "random" { + version = "2.2.0" +} + +provider "template" { + version = "2.1.2" +} + +provider "tls" { + version = "2.1.0" +} \ No newline at end of file diff --git a/examples/aws-iam-authenticator/resources/kubeconfig.iam b/examples/aws-iam/resources/kubeconfig.iam similarity index 100% rename from examples/aws-iam-authenticator/resources/kubeconfig.iam rename to examples/aws-iam/resources/kubeconfig.iam diff --git a/examples/aws-iam/variables.tf b/examples/aws-iam/variables.tf new file mode 100644 index 00000000..4f75e582 --- /dev/null +++ b/examples/aws-iam/variables.tf @@ -0,0 +1,88 @@ +variable "aws_region" { + description = "(Optional) The AWS region" + type = string + default = "us-west-2" +} + +variable "auth_webhook_path" { + description = "(Optional) A path for using customize machine to authenticate to a Kubernetes cluster." + type = string + default = "/etc/kubernetes/aws-iam-authenticator" +} + +variable "certs_validity_period_hours" { + description = < Date: Wed, 27 Nov 2019 10:41:23 +0800 Subject: [PATCH 10/11] add workaround method for ignition --- README.md | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index bf6a7849..915bd5b7 100644 --- a/README.md +++ b/README.md @@ -76,10 +76,10 @@ minutes... ~$ kubectl get node NAME STATUS ROLES AGE VERSION -ip-10-0-48-247.ec2.internal Ready spot 2m v1.12.7 -ip-10-0-66-127.ec2.internal Ready spot 2m v1.12.7 -ip-10-0-71-121.ec2.internal Ready on-demand 22s v1.12.7 -ip-10-0-86-182.ec2.internal Ready on-demand 2m v1.12.7 +ip-10-0-48-247.ec2.internal Ready spot 2m v1.14.6 +ip-10-0-66-127.ec2.internal Ready spot 2m v1.14.6 +ip-10-0-71-121.ec2.internal Ready on-demand 22s v1.14.6 +ip-10-0-86-182.ec2.internal Ready on-demand 2m v1.14.6 ``` ### ElastiKube (Self-Hosted) @@ -120,12 +120,12 @@ minutes... ~$ kubectl get node NAME STATUS ROLES AGE VERSION -ip-10-0-48-247.ec2.internal Ready master 9m v1.13.4 -ip-10-0-48-117.ec2.internal Ready master 9m v1.13.4 -ip-10-0-66-127.ec2.internal Ready on-demand 5m v1.13.4 -ip-10-0-66-127.ec2.internal Ready on-demand 6m v1.13.4 -ip-10-0-71-121.ec2.internal Ready spot 3m v1.13.4 -ip-10-0-86-182.ec2.internal Ready spot 4m v1.13.4 +ip-10-0-48-247.ec2.internal Ready master 9m v1.14.6 +ip-10-0-48-117.ec2.internal Ready master 9m v1.14.6 +ip-10-0-66-127.ec2.internal Ready on-demand 5m v1.14.6 +ip-10-0-66-127.ec2.internal Ready on-demand 6m v1.14.6 +ip-10-0-71-121.ec2.internal Ready spot 3m v1.14.6 +ip-10-0-86-182.ec2.internal Ready spot 4m v1.14.6 ``` ## What’s Going On? @@ -148,6 +148,20 @@ Create a AWS auto-scaling group with CoreOS container linux and leverage ignitio Due to using AWS launch template, hence, it's up to user to choose spot or on demand instance type by changing the variable, refer [**aws/eks-worker**](VARIABLES.md#aws/eks-worker) and [**aws/kube-worker**](VARIABLES.md#aws/kube-worker) for the detail variable inputs +## Known Issues + +### Ignition Provider Issue +This module leverage provider ignition to provision instance (etcd, master and worker node),after upgrading Terraform 0.12,there is issue about the ignition provider, althrough community already merge the [PR](https://github.com/terraform-providers/terraform-provider-ignition/pull/56) into master branch, but don't know why not bump a new version yes, hence, there is something to do for workaround this issue (The following steps are running in MacOS, it needs to make some change for running in other platform) + +Build the ignition provider from official GitHub master branch + +``` +~$ cd $GOPATH/src/github.com/terraform-providers/terraform-provider-ignition +$ make build + +~$ mkdir -p ~/.terraform.d/plugins/darwin_amd64 +~$ cp $GOPATH/bin/terraform-provider-ignition ~/.terraform.d/plugins/darwin_amd64/terraform-provider-ignition_v1.1.0_x4 +``` ## Contributing From 0663e2d1dc37571a4e0dd2dc38c23016baeaaefd Mon Sep 17 00:00:00 2001 From: smalltown Date: Wed, 27 Nov 2019 10:43:35 +0800 Subject: [PATCH 11/11] fix typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 915bd5b7..a96fcc11 100644 --- a/README.md +++ b/README.md @@ -151,7 +151,7 @@ Due to using AWS launch template, hence, it's up to user to choose spot or on de ## Known Issues ### Ignition Provider Issue -This module leverage provider ignition to provision instance (etcd, master and worker node),after upgrading Terraform 0.12,there is issue about the ignition provider, althrough community already merge the [PR](https://github.com/terraform-providers/terraform-provider-ignition/pull/56) into master branch, but don't know why not bump a new version yes, hence, there is something to do for workaround this issue (The following steps are running in MacOS, it needs to make some change for running in other platform) +This module leverage provider ignition to provision instance (etcd, master and worker node),after upgrading Terraform 0.12,there is issue about the ignition provider, althrough community already merge the [**PR**](https://github.com/terraform-providers/terraform-provider-ignition/pull/56) into master branch, but don't know why not bump a new version yet, hence, there is something need to do for workaround this issue (The following steps are running in MacOS, it needs to make some change for running in other platform) Build the ignition provider from official GitHub master branch