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.
RKE2 uses 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.