:_mod-docs-content-type: ASSEMBLY
[id="configuring-ipsec-ovn"]
= Configuring IPsec encryption
include::_attributes/common-attributes.adoc[]
:context: configuring-ipsec-ovn

toc::[]

By enabling IPsec, you can encrypt both internal pod-to-pod cluster traffic between nodes and external traffic between pods and IPsec endpoints external to your cluster. All pod-to-pod network traffic between nodes on the OVN-Kubernetes cluster network is encrypted with IPsec in _Transport mode_.

IPsec is disabled by default. You can enable IPsec either during or after installing the cluster. For information about cluster installation, see xref:../../installing/overview/index.adoc#ocp-installation-overview[{product-title} installation overview].

[NOTE]
====
Upgrading your cluster to {product-title} {product-version} when the `libreswan` and `NetworkManager-libreswan` packages have different {product-title} versions causes two consecutive compute node reboot operations. For the first reboot, the Cluster Network Operator (CNO) applies the IPsec configuration to compute nodes. For the second reboot, the Machine Config Operator (MCO) applies the latest machine configs to the cluster.

To combine the CNO and MCO updates into a single node reboot, complete the following tasks:

* Before upgrading your cluster, set the `paused` parameter to `true` in the `MachineConfigPools` custom resource (CR) that groups compute nodes.
* After you upgrade your cluster, set the parameter to `false`.

For more information, see xref:../../updating/updating_a_cluster/control-plane-only-update.adoc#control-plane-only-update[Performing a Control Plane Only update].
====

The following support limitations exist for IPsec on a {product-title} cluster:

* On {ibm-cloud-name}, IPsec supports only network address translation-traversal (NAT-T). Encapsulating Security Payload (ESP) is not supported on this platform.
* If your cluster uses link:https://www.redhat.com/en/topics/containers/what-are-hosted-control-planes[{hcp}] for Red{nbsp}Hat {product-title}, IPsec is not supported for IPsec encryption of either pod-to-pod or traffic to external hosts.
* Using ESP hardware offloading on any network interface is not supported if one or more of those interfaces is attached to Open vSwitch (OVS). Enabling IPsec for your cluster triggers the use of IPsec with interfaces attached to OVS. By default, {product-title} disables ESP hardware offloading on any interfaces attached to OVS.
* If you enabled IPsec for network interfaces that are not attached to OVS, a cluster administrator must manually disable ESP hardware offloading on each interface that is not attached to OVS.

The following list outlines key tasks in the IPsec documentation:

* Enable and disable IPsec after cluster installation.
* Configure IPsec encryption for traffic between the cluster and external hosts.
* Verify that IPsec encrypts traffic between pods on different nodes.

// Modes of operation
include::modules/nw-own-ipsec-modes.adoc[leveloffset=+1]

// Uses xrefs, so must be located here
[id="prerequisites_{context}"]
== Prerequisites

For IPsec support for encrypting traffic to external hosts, ensure that you meet the following prerequisites:

* Set `routingViaHost=true` in the `ovnKubernetesConfig.gatewayConfig` specification of the OVN-Kubernetes network plugin.
* Install the NMState Operator. This Operator is required for specifying the IPsec configuration. For more information, see xref:../../networking/networking_operators/k8s-nmstate-about-the-k8s-nmstate-operator.adoc#k8s-nmstate-about-the-k8s-nmstate-operator[Kubernetes NMState Operator].
+
--
[NOTE]
====
The NMState Operator is supported on {gcp-first} only for configuring IPsec.
====
--
* The Butane tool (`butane`) is installed. To install Butane, see xref:../../installing/install_config/installing-customizing.adoc#installation-special-config-butane-install_installing-customizing[Installing Butane].

These prerequisites are required to add certificates into the host NSS database and to configure IPsec to communicate with external hosts.

include::modules/nw-own-ipsec-required-ports.adoc[leveloffset=+1]

[id="pod-to-pod-ipsec_{context}"]
== IPsec encryption for pod-to-pod traffic

For IPsec encryption of pod-to-pod traffic, the following sections describe which specific pod-to-pod traffic is encrypted, what kind of encryption protocol is used, and how X.509 certificates are handled. These sections do not apply to IPsec encryption between the cluster and external hosts, which you must configure manually for your specific external network infrastructure.

// Types of network traffic flows encrypted by pod-to-pod IPsec
include::modules/nw-ovn-ipsec-traffic.adoc[leveloffset=+2]

// Encryption protocol and IPsec mode
include::modules/nw-ovn-ipsec-encryption.adoc[leveloffset=+2]

// Security certificate generation and rotation
include::modules/nw-ovn-ipsec-certificates.adoc[leveloffset=+2]

// IPsec encryption for external traffic
include::modules/nw-ovn-ipsec-external.adoc[leveloffset=+1]

// Enabling IPsec encryption
include::modules/nw-ovn-ipsec-enable.adoc[leveloffset=+1]

// Configuring IPsec encryption for external traffic
include::modules/nw-ovn-ipsec-north-south-enable.adoc[leveloffset=+1]

[role="_additional-resources"]
[id="additional-resources_{context}"]
== Additional resources

* link:https://nmstate.io/devel/yaml_api.html#ipsec-encryption[IPsec Encryption]

// Disabling IPsec encryption for an external IPsec endpoint
include::modules/nw-ovn-ipsec-north-south-disable.adoc[leveloffset=+1]

// Disabling IPsec encryption
include::modules/nw-ovn-ipsec-disable.adoc[leveloffset=+1]

[role="_additional-resources"]
== Additional resources

* link:https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html/configuring_and_managing_networking/setting-up-an-ipsec-vpn[Configuring a VPN with IPsec] in {op-system-base-full} 10
* xref:../../installing/install_config/installing-customizing.adoc#installation-special-config-butane-install_installing-customizing[Installing Butane]
* xref:../../networking/ovn_kubernetes_network_provider/about-ovn-kubernetes.adoc#about-ovn-kubernetes[About the OVN-Kubernetes Container Network Interface (CNI) network plugin]
* xref:../../networking/advanced_networking/changing-cluster-network-mtu.adoc#changing-cluster-network-mtu[Changing the MTU for the cluster network]
* xref:../../rest_api/operator_apis/network-operator-openshift-io-v1.adoc#network-operator-openshift-io-v1[Network [operator.openshift.io/v1\]]API
