@@ -109,6 +109,11 @@ resource "helm_release" "nginx_ingress" {
109109 value = " true"
110110 }
111111
112+ set {
113+ name = " controller.enableCustomResources"
114+ value = " true"
115+ }
116+
112117 # Wait for the LoadBalancer to be ready
113118 wait = true
114119 timeout = 600
@@ -142,6 +147,43 @@ resource "kubernetes_manifest" "ingress_class" {
142147 depends_on = [helm_release . nginx_ingress ]
143148}
144149
150+ # ClusterRole extension for cert-manager and Ingress status
151+ resource "kubernetes_cluster_role" "nginx_ingress_extension" {
152+ metadata {
153+ name = " nginx-ingress-cert-manager-extension"
154+ }
155+
156+ rule {
157+ api_groups = [" cert-manager.io" ]
158+ resources = [" certificates" , " certificaterequests" ]
159+ verbs = [" get" , " list" , " watch" ]
160+ }
161+
162+ rule {
163+ api_groups = [" networking.k8s.io" ]
164+ resources = [" ingresses/status" ]
165+ verbs = [" update" ]
166+ }
167+ }
168+
169+ resource "kubernetes_cluster_role_binding" "nginx_ingress_extension" {
170+ metadata {
171+ name = " nginx-ingress-cert-manager-extension-binding"
172+ }
173+
174+ role_ref {
175+ api_group = " rbac.authorization.k8s.io"
176+ kind = " ClusterRole"
177+ name = kubernetes_cluster_role. nginx_ingress_extension . metadata [0 ]. name
178+ }
179+
180+ subject {
181+ kind = " ServiceAccount"
182+ name = " ${ var . release_name } -nginx-ingress"
183+ namespace = var. namespace
184+ }
185+ }
186+
145187# Explicit cleanup on destroy - removes IngressClass first, then namespace
146188resource "null_resource" "namespace_cleanup" {
147189 count = var. install_nginx_ingress ? 1 : 0
0 commit comments