You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- Remove temporary branch ref from utility module source
- Disable DNS-01 when ACM mode is active (incompatible)
- Fix inconsistent conditional types in modified_instance
- Update README with dual-mode TLS architecture and examples
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
If ACM domains exist + no ACK controller → ACM mode (NLB terminates TLS)
54
+
If no ACM domains → cert-manager mode (Gateway terminates TLS)
55
+
```
56
+
57
+
### Path 1: cert-manager Mode (No ACM ARNs)
58
+
59
+
```
60
+
Client (TLS) → NLB:443 (TCP passthrough)
61
+
→ [PP2 header][TLS encrypted data]
62
+
→ Gateway:443 (HTTPS listener + ProxyProtocol)
63
+
→ Gateway terminates TLS with cert-manager K8s secret
64
+
→ HTTPRoute matching, proxies to upstream
65
+
```
66
+
67
+
NLB annotations: no `ssl-cert`, no `ssl-ports`. Gateway has per-domain HTTPS listeners with TLS termination.
68
+
69
+
### Path 2: ACK Path (ACM ARNs + ACK Controller)
70
+
71
+
Same as cert-manager mode, but the ACK ACM controller creates ACM certificates and exports them to K8s TLS secrets. The Gateway terminates TLS using those secrets.
72
+
73
+
```
74
+
Client (TLS) → NLB:443 (TCP passthrough)
75
+
→ [PP2 header][TLS encrypted data]
76
+
→ Gateway:443 (HTTPS listener + ProxyProtocol)
77
+
→ Gateway terminates TLS with ACK-exported K8s secret
→ Gateway reads PP2, matches HTTPRoute by Host header
90
+
→ Proxies to upstream
91
+
```
92
+
93
+
NLB annotations include `ssl-cert` (ACM ARNs) and `ssl-ports: 443`. Gateway has a single HTTP listener on port 443 with no hostname restriction — routing is handled entirely by HTTPRoute `hostnames` fields.
94
+
95
+
**Key differences in ACM mode:**
96
+
- No TLS certificates created or managed (no bootstrap, no cert-manager, no ACK CRDs)
97
+
- DNS-01 is automatically disabled (incompatible with NLB TLS termination)
98
+
- Single Gateway listener instead of per-domain listeners
99
+
- All HTTPRoutes reference the single `"https"` listener
| K8s secret in `certificate_reference`| User-managed | HTTPS, wildcard (`*.domain`) | User |
49
112
50
113
### HTTP-01 (Default)
51
114
@@ -60,6 +123,8 @@ When `use_dns01: true`, the module:
60
123
3. Sets `certificate_reference` on all domains, causing the utility module to create wildcard listeners (`*.domain`)
61
124
4. Disables the utility module's HTTP-01 ClusterIssuer and bootstrap cert creation (no domains left without `certificate_reference`)
62
125
126
+
**Note**: DNS-01 is automatically disabled when ACM mode is active (incompatible with NLB TLS termination).
127
+
63
128
**Prerequisite**: The ClusterIssuer (default: `gts-production`) must already exist in the cluster with a DNS-01 solver configured.
64
129
65
130
```json
@@ -77,14 +142,9 @@ When `use_dns01: true`, the module:
77
142
}
78
143
```
79
144
80
-
This creates:
81
-
- Wildcard listener: `*.api.example.com`
82
-
- Certificate: `*.api.example.com` + `api.example.com` via `gts-production`
83
-
- Base domain also gets a wildcard listener and DNS-01 cert
84
-
85
-
### ACM Certificates
145
+
### ACM Certificates (with ACK Controller)
86
146
87
-
Use an ACM ARN as `certificate_reference`. The module creates an ACK Certificate CRD that provisions the cert and exports it to a K8s TLS secret.
147
+
Use an ACM ARN as `certificate_reference` with the ACK ACM controller deployed. The module creates an ACK Certificate CRD that provisions the cert and exports it to a K8s TLS secret.
88
148
89
149
```json
90
150
{
@@ -102,29 +162,28 @@ Use an ACM ARN as `certificate_reference`. The module creates an ACK Certificate
102
162
103
163
**Prerequisite**: The `ack_acm_controller` must be deployed (optional input).
104
164
105
-
### Mixed Mode
165
+
### ACM Certificates (NLB Termination — No ACK Controller)
106
166
107
-
ACM and DNS-01 can coexist. ACM domains keep their ACM flow; domains without `certificate_reference` use DNS-01 when `use_dns01: true`.
167
+
Use an ACM ARN as `certificate_reference` without the ACK controller. The NLB terminates TLS using the free ACM certificate directly.
**No ACK controller needed.** The ACM cert is attached directly to the NLB via `aws-load-balancer-ssl-cert` annotation. The Gateway receives plaintext HTTP on port 443.
184
+
185
+
**Limitation**: When any domain uses ACM without ACK, ALL traffic goes through NLB TLS termination. No mixing of ACM and cert-manager on the same instance.
186
+
128
187
---
129
188
130
189
## Configuration
@@ -182,6 +241,37 @@ ACM and DNS-01 can coexist. ACM domains keep their ACM flow; domains without `ce
|`gateway_api_crd_details`|`@outputs/gateway_api_crd`| Yes | Gateway API CRD installation |
211
301
|`prometheus_details`|`@outputs/prometheus`| No | Prometheus for PodMonitor |
212
-
|`ack_acm_controller_details`|`@outputs/ack_acm_controller`| No | ACK ACM controller (required for ACM ARN domains)|
302
+
|`ack_acm_controller_details`|`@outputs/ack_acm_controller`| No | ACK ACM controller — when provided, ACM certs are exported to K8s secrets via ACK CRDs (Gateway terminates TLS). When absent and ACM ARNs are used, NLB terminates TLS directly.|
213
303
214
304
---
215
305
@@ -222,9 +312,20 @@ ACM and DNS-01 can coexist. ACM domains keep their ACM flow; domains without `ce
Always enabled. The module configures `NginxProxy` CRD with `rewriteClientIP` in ProxyProtocol mode to correctly extract client IPs from NLB.
328
+
Always enabled in all modes. The module configures `NginxProxy` CRD with `rewriteClientIP` in ProxyProtocol mode to correctly extract client IPs from NLB.
0 commit comments