Install NGINX Controller on RHEL 8 (experimental)

This guide explains how to prepare your RHEL 8 system to install NGINX Controller and the NGINX Controller Agent.

Preparing the NGINX Controller Host

To install NGINX Controller on RHEL 8, you must complete the following steps to allow iptables-based routing for Kubernetes. Failure to complete these steps may cause the installation to hang.

Update System Packages

  1. Before completing any other steps, update the packages on your system:

    sudo yum -y upgrade
    

Install and Configure Docker

Docker isn’t available on RedHat 8 by default, so you’ll need to add a Docker repository and install the required packages:

  1. Add the Docker repo:

    sudo yum config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
    
  2. Install the Docker packages:

    sudo yum install docker-ce-3:19.03.15-3.el8 docker-ce-cli-1:19.03.15-3.el8 containerd.io-1.3.9-3.1.el8
    
  3. Set up the Docker daemon:

    sudo mkdir -p /etc/docker
    
    sudo vi /etc/docker/daemon.json
    

    Paste the following JSON snippet into daemon.json:

    {
        "exec-opts": ["native.cgroupdriver=systemd"],
        "log-driver": "json-file",
        "log-opts": {
            "max-size": "10m",
            "max-file": "2"
        },
        "storage-driver": "overlay2"
    }
    
  4. Run the following commands to set up the Docker service:

    sudo systemctl start docker.service
    
    sudo systemctl status docker.service
       
    sudo systemctl enable docker.service
    

Install Required Packages and Kernel Modules

Take the following steps to install the required packages and kernel modules.

  1. Install the traffic control utility:

    sudo yum install iproute-tc
    
  2. Run the following commands to ensure the required kernel modules are loaded at startup:

    cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
    overlay
    br_netfilter
    iptable_nat
    EOF
    
  3. To load the required kernel modules immediately, run the following commands:

    sudo modprobe overlay
    sudo modprobe br_netfilter
    sudo modprobe iptable_nat
    
  4. Run the following commands exactly as shown to configure the network:

    cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
    net.bridge.bridge-nf-call-iptables = 1
    net.ipv4.ip_forward = 1
    net.bridge.bridge-nf-call-ip6tables = 1
    EOF
    
  5. Restart the system configuration:

    sudo sysctl --system
    

Last Steps

Take the following steps to finish preparing the RHEL 8 control plane host for NGINX Controller:

  1. When installing Docker on RHEL 8, the FORWARD rules in the iptables are reset and need to be corrected. To do this, run the following command:

    sudo iptables -P FORWARD ACCEPT
    
  2. Finally, turn off swap:

    sudo swapoff -a
    
  3. Complete the steps in the NGINX Controller Installation guide to install NGINX Controller.

Preparing the Data Plane Host

  1. For the NGINX Controller Agent to work on RHEL 8, you need to install the following package on each data plane host:

    sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
    sudo dnf install -y xerces-c
    
  2. Complete the steps in the NGINX Controller Agent Installation guide to [install the NGINX Controller Agent]/nginx-controller/admin-guides/install/install-nginx-controller-agent/.

Troubleshooting

You may encounter the following error when installing or updating NGINX Controller on RHEL 8:

Status code: 403 for https://cdn.redhat.com/content/dist/rhel8/8/x86_64/appstream/os/repodata/repomd.xml

In this case, update your subscription manager on each RHEL 8 host as follows:

sudo subscription-manager refresh