Configure dual stack
Big picture
Configure Calico Cloud IP address allocation to use dual stack for workload communications.
Value
In addition to IPv4, IPv6 is increasingly desirable for Workload communication. Calico Cloud supports:
-
IPv4 only (default)
Each workload gets an IPv4 address, and can communicate over IPv4.
-
Dual stack
Each workload gets an IPv4 and an IPv6 address, and can communicate over IPv4 or IPv6.
Before you begin
Unsupported
- IPv6 only
- AKS
- AWS/kOps
- EKS
- GKE
- RKE
- RKE2
Calico Cloud requirements
- Calico Cloud IPAM
- OpenShift
- Requires 4.8 for IPv6/IPv4 dual-stack and IPv6 single stack support
- Requires 3.11 and later using Calico Cloud 3.4 and later for IPv6 support
Kubernetes version requirements
- For dual stack, 1.20 and later
- For one IP stack at a time (IPv4 or IPv6), any Kubernetes version
Kubernetes IPv6 host requirements
- An IPv6 address that is reachable from the other hosts
- The sysctl setting,
net.ipv6.conf.all.forwarding
, is set to1
. This ensures both Kubernetes service traffic and Calico Cloud traffic is forwarded appropriately. - A default IPv6 route
Kubernetes IPv4 host requirements
- An IPv4 address that is reachable from the other hosts
- The sysctl setting,
net.ipv4.conf.all.forwarding
, is set to1
. This ensures both Kubernetes service traffic and Calico Cloud traffic is forwarded appropriately. - A default IPv4 route
How to
note
The following task is only for new clusters.
Enable dual stack
- Set up a new cluster following the Kubernetes prerequisites and enablement steps.
To configure dual-stack cluster using the operator, edit your default Installation at install time to include both an IPv4 and IPv6 pool. For example:
apiVersion: operator.tigera.io/v1
kind: Installation
metadata:
name: default
spec:
# Configures Calico networking.
calicoNetwork:
# Note: The ipPools section cannot be modified post-install.
ipPools:
- blockSize: 26
cidr: 10.48.0.0/21
encapsulation: IPIP
natOutgoing: Enabled
nodeSelector: all()
- blockSize: 122
cidr: 2001::00/64
encapsulation: None
natOutgoing: Enabled
nodeSelector: all()