From b9bef14a0baff7d781836b8fbc936247dec9d60f Mon Sep 17 00:00:00 2001 From: Dalton Hubble Date: Fri, 5 Apr 2019 00:23:29 -0700 Subject: [PATCH] Add enable_aggregation option (defaults to false) * Add an `enable_aggregation` variable to enable the kube-apiserver aggregation layer for adding extension apiservers to clusters * Aggregation is **disabled** by default. Typhoon recommends you not enable aggregation. Consider whether less invasive ways to achieve your goals are possible and whether those goals are well-founded * Enabling aggregation and extension apiservers increases the attack surface of a cluster and makes extensions a part of the control plane. Admins must scrutinize and trust any extension apiserver used. * Passing a v1.14 CNCF conformance test requires aggregation be enabled. Having an option for aggregation keeps compliance, but retains the stricter security posture on default clusters --- assets.tf | 18 +++- .../manifests/kube-apiserver-secret.yaml | 4 + resources/manifests/kube-apiserver.yaml | 2 +- tls-aggregation.tf | 96 +++++++++++++++++++ variables.tf | 6 ++ 5 files changed, 124 insertions(+), 2 deletions(-) create mode 100644 tls-aggregation.tf diff --git a/assets.tf b/assets.tf index 38d7442..a1310e8 100644 --- a/assets.tf +++ b/assets.tf @@ -38,7 +38,7 @@ resource "template_dir" "manifests" { apiserver_port = "${var.apiserver_port}" ca_cert = "${base64encode(var.ca_certificate == "" ? join(" ", tls_self_signed_cert.kube-ca.*.cert_pem) : var.ca_certificate)}" - ca_key = "${base64encode(var.ca_private_key == "" ? join(" ", tls_private_key.kube-ca.*.private_key_pem) : var.ca_private_key)}" + ca_key = "${base64encode(var.ca_private_key == "" ? join(" ", tls_private_key.kube-ca.*.private_key_pem) : var.ca_private_key)}" server = "${format("https://%s:%s", element(var.api_servers, 0), var.apiserver_port)}" apiserver_key = "${base64encode(tls_private_key.apiserver.private_key_pem)}" apiserver_cert = "${base64encode(tls_locally_signed_cert.apiserver.cert_pem)}" @@ -48,9 +48,25 @@ resource "template_dir" "manifests" { etcd_ca_cert = "${base64encode(tls_self_signed_cert.etcd-ca.cert_pem)}" etcd_client_cert = "${base64encode(tls_locally_signed_cert.client.cert_pem)}" etcd_client_key = "${base64encode(tls_private_key.client.private_key_pem)}" + + aggregation_flags = "${var.enable_aggregation == "true" ? indent(8, local.aggregation_flags) : ""}" + aggregation_ca_cert = "${var.enable_aggregation == "true" ? base64encode(join(" ", tls_self_signed_cert.aggregation-ca.*.cert_pem)) : ""}" + aggregation_client_cert = "${var.enable_aggregation == "true" ? base64encode(join(" ", tls_locally_signed_cert.aggregation-client.*.cert_pem)) : ""}" + aggregation_client_key = "${var.enable_aggregation == "true" ? base64encode(join(" ", tls_private_key.aggregation-client.*.private_key_pem)) : ""}" } } +locals { + aggregation_flags = <