Ingress¶
The spec.ingress block controls how the hostnames declared in spec.domains are served. The operator translates these settings into global.ingress.* and the external URL scheme (global.hosts.https) in the emitted HelmRelease values.
The operator does not install an ingress controller or cert-manager
spec.ingress only configures the chart-side values. You must have a compatible ingress controller (e.g. ingress-nginx, Contour, Traefik) and, if you enable cert-manager integration, a cert-manager instance already running in the cluster.
Fields¶
| Field | Type | Default | Description |
|---|---|---|---|
spec.ingress.class |
string | cluster default | Ingress class name (global.ingress.class). Leave empty to use the cluster's default ingress class. |
spec.ingress.tls |
*bool |
true (chart default) |
Controls TLS termination and whether the external URL is https. Set to false for HTTP-only deployments (e.g. dev/test behind a terminating proxy). |
spec.ingress.configureCertManager |
*bool |
chart default | Whether the chart wires cert-manager to issue certificates for the GitLab ingresses (global.ingress.configureCertmanager). Requires cert-manager in the cluster. |
spec.ingress.annotations |
map[string]string |
— | Annotations added to every GitLab ingress resource (global.ingress.annotations). |
How spec.domains and spec.ingress relate¶
spec.domains sets the hostnames; spec.ingress controls how they are served. The operator composes the two: it places the domain values into global.hosts.* and applies the ingress settings from spec.ingress.
spec.domains.gitlab → global.hosts.gitlab.name
spec.domains.registry → global.hosts.registry.name
spec.domains.kas → global.hosts.kas.name
spec.domains.pages → global.hosts.pages.name
spec.ingress.tls → global.ingress.tls.enabled
global.hosts.https (controls http/https in external_url)
spec.ingress.class → global.ingress.class
spec.ingress.configureCertManager → global.ingress.configureCertmanager
spec.ingress.annotations → global.ingress.annotations
Examples¶
HTTPS with cert-manager¶
spec:
domains:
gitlab: git.example.com
registry: registry.example.com
ingress:
class: nginx
tls: true
configureCertManager: true
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
The chart issues a Certificate via cert-manager for each domain. cert-manager and a ClusterIssuer (or Issuer) must be present in the cluster before applying this configuration.
HTTPS with externally-managed TLS (no cert-manager)¶
Use this when you manage TLS certificates outside the chart (e.g. wildcard cert via External Secrets, or termination at a load balancer).
You must create the TLS Secrets expected by the chart manually, or use the chart's global.ingress.tls.secretName override via spec.helm.values.
Custom ingress class with additional annotations¶
spec:
domains:
gitlab: git.internal.example.com
ingress:
class: traefik
tls: true
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: websecure
traefik.ingress.kubernetes.io/router.tls: "true"
Plain HTTP (development or behind a TLS-terminating proxy)¶
Setting tls: false causes the operator to set global.ingress.tls.enabled: false and global.hosts.https: false, so the chart renders all internal URLs and the external_url with the http:// scheme.
Troubleshooting¶
Ingress resource not created / 404
: Verify that an ingress controller matching spec.ingress.class is installed and running. The chart creates ingress resources but they are only picked up by a controller whose class matches.
cert-manager certificate stays Pending
: Check that a ClusterIssuer (or Issuer) matching the annotation value exists in the cluster. Inspect the Certificate and CertificateRequest resources in the GitLab namespace for events.
External URL is http:// when you expected https://
: Verify spec.ingress.tls is true (or omitted, since true is the chart default). If you pass global.hosts.https: false through spec.helm.values, that overrides the operator's setting.