The RKE2 documentation is there, but, well, it is not quite as detailed as I have seen in other areas. This is a quick tip for customizing your Nginx Ingress controllers when using RKE2
Using Nginx Ingress in RKE2
By default, an RKE2 cluster deploys the nginx-ingress Helm chart. That’s great, except that you may need to customize that chart. This is where the
HelmChartConfig resource is used.
HelmChartConfig custom resource definitions (CRDs) to allow you to set configuration options for their default Helm deployments. This is pretty useful, and seemed straightforward, except I had a hard time figuring out HOW to set the options.
Always easier than I expect
The RKE2 documentation points you to the nginx-ingress chart, but it took me a bit to realize that the connection was as simple as setting the
valuesContent value in the
HelmChartConfig spec to whatever values I wanted to pass in to Nginx.
apiVersion: helm.cattle.io/v1 kind: HelmChartConfig metadata: name: rke2-ingress-nginx namespace: kube-system spec: valuesContent: |- controller: config: use-forwarded-headers: "true" proxy-buffer-size: "256k" proxy-buffer-number: "4" large-client-header-buffers: "4 16k" metrics: enabled: true serviceMonitor: enabled: true additionalLabels: cluster: nonproduction
The above sets some configuration values in the controller AND enables metrics collection using the
ServiceMonitor object. For Nginx, valid values for
valuesContent are the same as values in the chart’s values.yaml file.
Works with other charts
RKE2 provides additional charts that can be deployed and customized with similar methods. There are charts which are deployed by default, and they provide instructions on disabling them. However, the same
HelmChartConfig method above can be used to customize the chart installs as well.