我正在尝试使用 Terraform 部署 Kubernetes 集群。为了在我的集群上安装 nginx,我在 .tf 文件中写入了以下内容:
resource "helm_release" "ingress" {
name = "ingress"
chart = "stable/nginx-ingress"
namespace = "kube-system"
set {
name = "controller.replicaCount"
value = "1"
}
depends_on = [azurerm_kubernetes_cluster.k8s]
}
一切正常,nginx 已部署,但我想在部署上安装配置映射。我很确定在 Terraform 创建 nginx 部署之前我无法做到这一点,所以我想知道之后是否可以做到这一点。 configmap 也是使用 Terraform 创建的:
resource "kubernetes_config_map" "nginx" {
metadata {
name = "my-name"
namespace = "kube-system"
}
data = {
"my-field" = "${file("${path.module}/C:/my_configmap.yaml")}"
}
}
ingress-nginx
Helm 图表支持使用 controller.config
Helm 值将自定义数据传递到控制器的 ConfigMap,如下1:
# values.yml
controller:
config:
hsts: true
hsts-preload: true
# main.tf
resource "helm_release" "ingress" {
name = "ingress-nginx"
repository = "https://kubernetes.github.io/ingress-nginx"
chart = "ingress-nginx"
version = "4.10.x"
namespace = "default"
values = [
"${file("${path.module}/values.yml")}"
]
}
这样,ConfigMap 将如下所示:
# kubectl get cm/ingress-nginx-controller -o yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: ingress-nginx-controller
namespace: default
annotations:
meta.helm.sh/release-name: ingress-nginx
meta.helm.sh/release-namespace: default
labels:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
app.kubernetes.io/version: 1.10.1
helm.sh/chart: ingress-nginx-4.10.1
data:
allow-snippet-annotations: "false"
hsts: "true"
hsts-preload: "true"
Nginx Pod 将具有以下配置:
# /etc/nginx/nginx.conf
# ... truncated ...
http {
# ... truncated ...
init_by_lua_block {
# ... truncated ...
lua_ingress.set_config({
hsts = true,
hsts_preload = true,
# ... truncated ...
})
}
}