Install ingress-nginx

DEPRECATION NOTICE: starting from March 2026, the ingress-nginx controller will be officially discontinued and users need to move away.

The present guide is kept for reference but we recommend to move to a more modern ingress controller such as Traefik.

More information about the deprecation of ingress-nginx can be found in the ingress-nginx deprecation notice.

Install on a generic Kubernetes cluster

Install the ingress-nginx controller namespace:

helm upgrade --install ingress-nginx ingress-nginx \
--repo https://kubernetes.github.io/ingress-nginx \
--namespace ingress-nginx --create-namespace \
--version 4.12.0 \
--set controller.config.allow-snippet-annotations=true \
--set controller.config.annotations-risk-level=Critical

Wait for the ingress-nginx controller:

kubectl wait --namespace ingress-nginx \
--for=condition=ready pod \
--selector=app.kubernetes.io/component=controller \
--timeout=90s

Verify the newly created pod under the ingress-nginx namespace:

kubectl get pods --namespace=ingress-nginx

More information can be found in the ingress-nginx deploy docs.

Install on KinD cluster

Create a KinD cluster with the necessary port mappings and node labels for reaching the ingress-nginx controller from your local machine:

cat <<EOF | kind create cluster --config=-
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  kubeadmConfigPatches:
  - |
    kind: InitConfiguration
    nodeRegistration:
      kubeletExtraArgs:
        node-labels: "ingress-ready=true"
  extraPortMappings:
  - containerPort: 80
    hostPort: 80
    protocol: TCP
  - containerPort: 443
    hostPort: 443
    protocol: TCP
EOF

Install the specific flavor of the ingress-nginx controller for KinD (controller-v1.12.0 is the specific version we were using for testing, you can check any newer version on the official ingress-nginx repository):

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.12.0/deploy/static/provider/kind/deploy.yaml

Allow using snippet annotations in the ingress-nginx controller configuration, which is required for older versions of the Alfresco charts to work properly (in the newer versions of the charts, this is not required anymore as we moved to avoid using controller-specific annotations):

kubectl -n ingress-nginx patch cm ingress-nginx-controller \
  -p '{"data": {"annotations-risk-level":"Critical","allow-snippet-annotations":"true"}}'

Warning: Enable this option only if you TRUST users with permission to create Ingress objects, as this may allow a user to add restricted configurations to the final nginx.conf file.

Configure file uploads limitations

The alfresco-repository & alfresco-share Helm charts this chart depends on, come with settings to limit the maximum size of file uploads and the maximum duration of a request. These settings are configured using default ingress annotations. They can be overriden from the umbrella chart (alfresco-content-services) by setting the following values:

alfresco-repository::
  ingress:
    annotations:
      nginx.ingress.kubernetes.io/proxy-body-size: 100m
      nginx.ingress.kubernetes.io/proxy-read-timeout: 600
share:
  ingress:
    annotations:
      nginx.ingress.kubernetes.io/proxy-body-size: 100m
      nginx.ingress.kubernetes.io/proxy-read-timeout: 600

Above values would limit the uploads to 100 MB files or 10 minutes long uploads in bith Alfresco repository API & Share UI.