# Use a Custom CNI

The **Container Network Interface (CNI)** defines how network plugins integrate with container runtimes. While SKS clusters
come with Calico or Cilium by default, you may choose to use a custom CNI plugin or configuration.

To ensure compatibility with your SKS cluster, please review the following requirements for custom CNI usage:

1. **Install the CNI Plugin on All Nodes**: Ensure the CNI plugin is installed across all cluster nodes.
  Remove any `nodeSelector` constraints, and set broad tolerations so it can be scheduled on any node.
2. **Network Interface Configuration**: Set up the CNI plugin to use the correct network interface for outgoing traffic.
3. **Pod CIDR Range**: The Pod CIDR range should be set to `192.168.0.0/16`.
4. **IPAM Management**: Your custom CNI plugin should not manage Pod CIDR ranges. SKS handles IP Address Management (IPAM) automatically.
5. **Kubernetes API Server Connection**:
   - Set `KUBERNETES_SERVICE_HOST` and `KUBERNETES_SERVICE_PORT` to point to your SKS API server. These values are typically:
     - **Host**: `<cluster-id>.sks-<zone-name>.exo.io`
     - **Port**: `443`
   - You can locate these values in the **Generate Kubeconfig** section of the SKS console.
6. **Service Proxy Conflicts**: If your CNI plugin includes a Service Proxy, disable the default `kube-proxy` (details below).
7. **DNS Configuration**: Ensure the DNS suffix is set to `cluster.local` if your CNI plugin requires DNS settings.

Following these guidelines will help ensure your custom CNI works seamlessly within your SKS environment.
