Install Calico Enterprise using the nftables data plane
This guide shows you how to install Calico Enterprise using the nftables data plane.
nftables is a unified packet filtering and classification framework in the Linux kernel. It was designed to be the successor to the iptables module.
To use nftables, your Kubernetes installation must be configured to use kube-proxy in nftables mode.
In Kubernetes versions 1.33 and later, nftables mode is the default.
For versions 1.31 and 1.32, you can specify nftables in the KubeProxyConfiguration resource.
Before you begin
Required
-
A Linux host that meets the following requirements:
- x86-64, arm64, ppc64le, or s390x processor
- 2CPU
- 2GB RAM
- 10GB free disk space
- Linux kernel version 5.13 or later with
nft>= 1.0.1
-
Calico Enterprise can manage
caliandtunlinterfaces on the hostIf NetworkManager is present on the host, see Configure NetworkManager.
How to
Create a single-host Kubernetes cluster with the nftables kube-proxy enabled.
This procedure includes steps to explicitly configure nftables mode in kube-proxy, which is required for Kubernetes 1.31 and 1.32. If you're using Kubernetes 1.33 or later, you can create a cluster with kubeadm using the default settings.
-
Follow the Kubernetes instructions to install kubeadm
noteAfter installing kubeadm, do not power down or restart the host. Instead, continue directly to the next step.
-
As a regular user with sudo privileges, open a terminal on the host that you installed kubeadm on.
-
Create a kubeadm configuration file that enables the nftables kube-proxy mode.
cat > config.yaml <<EOF
apiVersion: kubeadm.k8s.io/v1beta4
kind: InitConfiguration
---
kind: ClusterConfiguration
apiVersion: kubeadm.k8s.io/v1beta4
kubernetesVersion: v1.31.0
proxy: {}
networking:
podSubnet: "192.168.0.0/16"
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: nftables
EOFnoteIf 192.168.0.0/16 is already in use within your network you must select a different pod network CIDR, replacing 192.168.0.0/16 in the above configuration.
-
Initialize the control plane using the following command.
sudo kubeadm init --config=config.yaml -
Execute the following commands to configure kubectl (also returned by
kubeadm init).mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Install Calico Enterprise in nftables data plane mode
Prerequisites
- Your Kubernetes cluster has kube-proxy set to nftables mode.
You can check this in the kube-proxy configuration:
kubectl -n kube-system get configmap kube-proxy -o yaml | grep "mode:"Expected outputmode: "nftables"
Procedure
-
Install the Tigera Operator and custom resource definitions.
kubectl create -f https://downloads.tigera.io/ee/v3.22.1/manifests/operator-crds.yaml
kubectl create -f https://downloads.tigera.io/ee/v3.22.1/manifests/tigera-operator.yamlnoteDue to the large size of the CRD bundle,
kubectl applymight exceed request limits. Instead, usekubectl createorkubectl replace. -
Download, edit, and create the
custom-resources.yamlfile.-
Download the default
custom-resources.yamlfile:curl -O -L https://downloads.tigera.io/ee/v3.22.1/manifests/custom-resources.yaml -
Enable nftables mode by setting
spec.linuxDataplanetonftablesin theInstallationresource:Snippet from custom-resources.yaml with nftables mode enabledoperator.tigera.io/v1.Installation
apiVersion: operator.tigera.io/v1
kind: Installation
metadata:
name: default
spec:
# Install Calico Enterprise
variant: TigeraSecureEnterprise
# List of image pull secrets to use when installing images from a container registry.
# If specified, secrets must be created in the `tigera-operator` namespace.
imagePullSecrets:
- name: tigera-pull-secret
# Optionally, a custom registry to use for pulling images.
# registry: <my-registry>
linuxDataplane: NftablesIf you have other customizations for your installation, you can add them now. For more information about configuration options , see the installation reference.
-
To install Calico Enterprise, create the modified
custom-resources.yamlfile:kubectl create -f custom-resources.yamlnoteBefore creating this manifest, read its contents and make sure its settings are correct for your environment. For example, you may need to change the default IP pool CIDR to match your pod network CIDR.
-
-
Confirm that all of the pods are running with the following command.
watch kubectl get pods -n calico-systemWait until each pod has the
STATUSofRunning.noteThe Tigera Operator installs resources in the
calico-systemnamespace. Other install methods may use thekube-systemnamespace instead. -
Remove the taints on the control plane so that you can schedule pods on it.
kubectl taint nodes --all node-role.kubernetes.io/control-plane-It should return the following.
node/<your-hostname> untainted -
Confirm that you now have a node in your cluster with the following command.
kubectl get nodes -o wideIt should return something like the following.
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
<your-hostname> Ready master 52m v1.12.2 10.128.0.28 <none> Ubuntu 18.04.1 LTS 4.15.0-1023-gcp docker://18.6.1
Congratulations! You now have a single-host Kubernetes cluster with Calico Enterprise in nftables mode.
Next steps
Required
Recommended tutorials