I have been using the nginx-ingress helm chart in my clusters for quite some time now. I like having only one load balancer to handle any of the apps running on my cluster. This way I can route traffic through my nginx proxy and link it over the stable/cert-mgr helm chart to auto configure SSL Let’s Encrypt certs for my deployments.
However, when going down the rabbit hole to migrate my website from WordPress to Ghost, I went to upload/import the exported json file as part of the migration process and I was given the following error:
413: Request Entity Too Large
Turns out the error was due to my default configuration of nginx. I knew the solution if I had nginx running on a VM (I just modify the /etc/nginx/nginx.conf and restart the service), but I wasn’t quite sure how to handle it from a helm chart, especially since I want the change to persist in the event of a pod/deployment failure or re-deployment.
I went to the chart docs and still couldn’t find the obvious answer, but I did find customized configmap.yaml files with hints of the answer.
TL;DR: There are a few solutions.
- I make my own values.yaml file so I can override the defaults for the nginx helm chart. I need to add in proxy-body-size: 256m under
config:
my chart adds an annotation to my deployed configmap, which would then set theclient-max-body
limit to whatever I specified. By default it is 1m and in my example I’m going to increase it to256m
.
You can see the full default values file here, but the beginning of my customize values override.yaml is below:
## nginx configuration
## Ref: https://github.com/kubernetes/ingress/blob/master/controllers/nginx/configuration.md
##
controller:
name: controller
image:
repository: quay.io/kubernetes-ingress-controller/nginx-ingress-controller
tag: "0.22.0"
pullPolicy: IfNotPresent
config:
proxy-body-size: 256m
# Will add custom header to Nginx https://github.com/kubernetes/ingress-nginx/tree/master/docs/examples/customization/custom-headers
headers: {}
# Required for use with CNI based kubernetes installations (such as ones set up by kubeadm),
# since CNI and hostport don't mix yet. Can be deprecated once https://github.com/kubernetes/kubernetes/issues/23920
# is merged
hostNetwork: false
Note, I left all other settings the same so, in theory, I could use the -f
flag in my pipeline when I setup nginx-ingress via the stable helm chart and use my custom values.yaml, but there are other options.
- Since
proxy-body-size
is the only change I’m making, I could also use--set
withcontroller.config.proxy-body-size=256m
, which would work just the same. Now, I may keep a values file in my dotcom/iac repo folder just in case I want to make future config updates in which--set
doesn’t make sense. - The 3rd options is to apply this setting to specific Ingress objects by applying the following annotation:
nginx.ingress.kubernetes.io/proxy-body-size: 256m
The answer may be different depending on your needs and your use of the nginx ingress helm chart, but at the very least, I hope this helps someone with a more obvious answer than my 30+ open tabs suggested.