diff --git a/pkg/controller/installation/validation.go b/pkg/controller/installation/validation.go index dbc65f3a37..32ea79f8ac 100644 --- a/pkg/controller/installation/validation.go +++ b/pkg/controller/installation/validation.go @@ -209,7 +209,9 @@ func validateCustomResource(instance *operatorv1.Installation) error { } if v6pool.Encapsulation != operatorv1.EncapsulationNone { - return fmt.Errorf("Encapsulation is not supported by IPv6 pools, but it is set for %s", v6pool.CIDR) + if instance.Spec.CalicoNetwork.LinuxDataplane == nil || *instance.Spec.CalicoNetwork.LinuxDataplane != operatorv1.LinuxDataplaneVPP { + return fmt.Errorf("Encapsulation is not supported by IPv6 pools, but it is set for %s", v6pool.CIDR) + } } if bpfDataplane { diff --git a/pkg/render/node.go b/pkg/render/node.go index 9ebb6d0a97..440c49cc3e 100644 --- a/pkg/render/node.go +++ b/pkg/render/node.go @@ -1228,6 +1228,21 @@ func (c *nodeComponent) nodeEnvVars() []corev1.EnvVar { if v6pool := GetIPv6Pool(c.cfg.Installation.CalicoNetwork.IPPools); v6pool != nil { nodeEnv = append(nodeEnv, corev1.EnvVar{Name: "CALICO_IPV6POOL_CIDR", Value: v6pool.CIDR}) + switch v6pool.Encapsulation { + case operatorv1.EncapsulationIPIPCrossSubnet: + nodeEnv = append(nodeEnv, corev1.EnvVar{Name: "CALICO_IPV6POOL_IPIP", Value: "CrossSubnet"}) + case operatorv1.EncapsulationIPIP: + nodeEnv = append(nodeEnv, corev1.EnvVar{Name: "CALICO_IPV6POOL_IPIP", Value: "Always"}) + case operatorv1.EncapsulationVXLAN: + nodeEnv = append(nodeEnv, corev1.EnvVar{Name: "CALICO_IPV6POOL_VXLAN", Value: "Always"}) + case operatorv1.EncapsulationVXLANCrossSubnet: + nodeEnv = append(nodeEnv, corev1.EnvVar{Name: "CALICO_IPV6POOL_VXLAN", Value: "CrossSubnet"}) + case operatorv1.EncapsulationNone: + nodeEnv = append(nodeEnv, corev1.EnvVar{Name: "CALICO_IPV6POOL_IPIP", Value: "Never"}) + default: + nodeEnv = append(nodeEnv, corev1.EnvVar{Name: "CALICO_IPV6POOL_IPIP", Value: "Always"}) + } + if v6pool.BlockSize != nil { nodeEnv = append(nodeEnv, corev1.EnvVar{Name: "CALICO_IPV6POOL_BLOCK_SIZE", Value: fmt.Sprintf("%d", *v6pool.BlockSize)}) }