The pool is now rendered from packages/apps/tenant/templates/cilium-lb-pool.yaml instead of packages/extra/ingress/templates/cilium-lb-pool.yaml. Cilium LB IPAM forbids overlapping CIDRs across pools regardless of serviceSelector, so both the ingress-loadBalancer path and the upcoming per-tenant Gateway in #2470 cannot each own their own pool on the same publishing.externalIPs range. The tenant chart is the natural per-tenant owner — it already creates the Namespace, the cozystack-values Secret, and the HelmReleases for both ingress and gateway. The new pool uses a namespace-only serviceSelector (io.kubernetes.service.namespace: <ns>), which matches any LoadBalancer Service in the tenant namespace. The metadata.name changed from <trim>-ingress to <trim>-exposure to reflect that the pool is not ingress-specific. Only the ingress-loadBalancer signal is wired in this commit (_cluster.expose-mode=loadBalancer plus .Values.ingress=true on the publishing tenant). The gateway branch is added in #2470 on top of this commit — it rebases, drops its own packages/extra/gateway/templates/cilium-lb-pool.yaml, and adds an OR branch for .Values.gateway in the tenant template. Pool-rendering unit tests moved from packages/extra/ingress/tests/ to packages/apps/tenant/tests/. The ingress chart tests keep the Service-level asserts. packages/apps/tenant/Makefile gains a test target so hack/helm-unit-tests.sh picks up the new suite. Assisted-By: Claude <noreply@anthropic.com> Signed-off-by: Aleksei Sviridkin <f@lex.la> |
||
|---|---|---|
| .. | ||
| charts | ||
| logos | ||
| templates | ||
| tests | ||
| .helmignore | ||
| Chart.yaml | ||
| config.json | ||
| Makefile | ||
| README.md | ||
| values.schema.json | ||
| values.yaml | ||
Ingress-NGINX Controller
Parameters
Common parameters
| Name | Description | Type | Value |
|---|---|---|---|
replicas |
Number of ingress-nginx replicas. | int |
2 |
whitelist |
List of client networks. | []string |
[] |
cloudflareProxy |
Restoring original visitor IPs when Cloudflare proxied is enabled. | bool |
false |
resources |
Explicit CPU and memory configuration for each ingress-nginx replica. When omitted, the preset defined in resourcesPreset is applied. |
object |
{} |
resources.cpu |
CPU available to each replica. | quantity |
"" |
resources.memory |
Memory (RAM) available to each replica. | quantity |
"" |
resourcesPreset |
Default sizing preset used when resources is omitted. |
string |
micro |
Exposure mode
The ingress Service type is driven by the cluster-wide publishing.exposure value in the platform chart, not by any key in this package. Two modes exist:
externalIPs(default) has three rendered shapes:- Release namespace matches
publishing.ingressNameANDpublishing.externalIPsis non-empty → Service isClusterIPwithService.spec.externalIPsset from that list andexternalTrafficPolicy: Cluster. - Release namespace matches
publishing.ingressNamebutpublishing.externalIPsis empty → Service falls back totype: LoadBalancerwithexternalTrafficPolicy: Local. - Release namespace does not match
publishing.ingressName(non-root tenants) → Service istype: LoadBalancerwithexternalTrafficPolicy: Local.Service.spec.externalIPsis deprecated upstream in Kubernetes v1.36 (KEP-5707); plan migration before v1.40.
- Release namespace matches
loadBalancer— Service istype: LoadBalancerwithexternalTrafficPolicy: Local, and aCiliumLoadBalancerIPPoolmakes the addresses inpublishing.externalIPsallocatable via Cilium LB IPAM. Requirespublishing.externalIPsto contain at least one non-empty address (render fails otherwise) and assumes the addresses are already routed to a cluster node (floating IP / upstream router). See the inline comment onpublishing.exposurein the platform chart for full caveats, including the note that switching the value on a running cluster causes the ingress Service to be recreated.
This setting only migrates ingress-nginx away from Service.spec.externalIPs. Other cozystack components that use the same deprecated field (e.g. the vpn app) must be migrated separately before Kubernetes v1.40 flips the AllowServiceExternalIPs feature gate off.