From e24fa4d0df081c273608659967335156fc2128d0 Mon Sep 17 00:00:00 2001 From: Antonio Ojea Date: Sun, 7 Jul 2019 10:58:14 +0200 Subject: [PATCH] Add dual stack support --- pkg/cluster/config/default.go | 6 ++++++ pkg/cluster/config/types.go | 2 ++ pkg/cluster/config/v1alpha3/default.go | 6 ++++++ pkg/cluster/config/v1alpha3/types.go | 2 ++ pkg/cluster/config/validate.go | 16 ++++++++++++---- 5 files changed, 28 insertions(+), 4 deletions(-) diff --git a/pkg/cluster/config/default.go b/pkg/cluster/config/default.go index c8c557d742..168e33ef57 100644 --- a/pkg/cluster/config/default.go +++ b/pkg/cluster/config/default.go @@ -58,6 +58,9 @@ func SetDefaults_Cluster(obj *Cluster) { if obj.Networking.IPFamily == "ipv6" { obj.Networking.PodSubnet = "fd00:10:244::/64" } + if obj.Networking.IPFamily == "ipv4-ipv6" { + obj.Networking.PodSubnet = "10.244.0.0/16,fd00:10:244::/64" + } } // default the service CIDR using the kubeadm default // https://github.com/kubernetes/kubernetes/blob/746404f82a28e55e0b76ffa7e40306fb88eb3317/cmd/kubeadm/app/apis/kubeadm/v1beta2/defaults.go#L32 @@ -67,6 +70,9 @@ func SetDefaults_Cluster(obj *Cluster) { if obj.Networking.IPFamily == "ipv6" { obj.Networking.ServiceSubnet = "fd00:10:96::/112" } + if obj.Networking.IPFamily == "ipv4-ipv6" { + obj.Networking.ServiceSubnet = "10.96.0.0/12,fd00:10:96::/112" + } } } diff --git a/pkg/cluster/config/types.go b/pkg/cluster/config/types.go index 482f54ac6c..54072ca966 100644 --- a/pkg/cluster/config/types.go +++ b/pkg/cluster/config/types.go @@ -121,4 +121,6 @@ const ( IPv4Family ClusterIPFamily = "ipv4" // IPv6Family sets ClusterIPFamily to ipv6 IPv6Family ClusterIPFamily = "ipv6" + // DualStackFamily sets ClusterIPFamily to ipv4-ipv6 + DualStackFamily ClusterIPFamily = "ipv4-ipv6" ) diff --git a/pkg/cluster/config/v1alpha3/default.go b/pkg/cluster/config/v1alpha3/default.go index 2c284e28b0..6e9aa6da27 100644 --- a/pkg/cluster/config/v1alpha3/default.go +++ b/pkg/cluster/config/v1alpha3/default.go @@ -58,6 +58,9 @@ func SetDefaults_Cluster(obj *Cluster) { if obj.Networking.IPFamily == "ipv6" { obj.Networking.PodSubnet = "fd00:10:244::/64" } + if obj.Networking.IPFamily == "ipv4-ipv6" { + obj.Networking.PodSubnet = "10.244.0.0/16,fd00:10:244::/64" + } } // default the service CIDR using the kubeadm default // https://github.com/kubernetes/kubernetes/blob/746404f82a28e55e0b76ffa7e40306fb88eb3317/cmd/kubeadm/app/apis/kubeadm/v1beta2/defaults.go#L32 @@ -67,6 +70,9 @@ func SetDefaults_Cluster(obj *Cluster) { if obj.Networking.IPFamily == "ipv6" { obj.Networking.ServiceSubnet = "fd00:10:96::/112" } + if obj.Networking.IPFamily == "ipv4-ipv6" { + obj.Networking.ServiceSubnet = "10.96.0.0/12,fd00:10:96::/112" + } } } diff --git a/pkg/cluster/config/v1alpha3/types.go b/pkg/cluster/config/v1alpha3/types.go index c0f3d8304a..7fd2e0800b 100644 --- a/pkg/cluster/config/v1alpha3/types.go +++ b/pkg/cluster/config/v1alpha3/types.go @@ -121,4 +121,6 @@ const ( IPv4Family ClusterIPFamily = "ipv4" // IPv6Family sets ClusterIPFamily to ipv6 IPv6Family ClusterIPFamily = "ipv6" + // DualStackFamily sets ClusterIPFamily to ipv4-ipv6 + DualStackFamily ClusterIPFamily = "ipv4-ipv6" ) diff --git a/pkg/cluster/config/validate.go b/pkg/cluster/config/validate.go index 7528299512..28e9a29c0a 100644 --- a/pkg/cluster/config/validate.go +++ b/pkg/cluster/config/validate.go @@ -18,6 +18,7 @@ package config import ( "net" + "strings" "github.com/pkg/errors" @@ -39,12 +40,19 @@ func (c *Cluster) Validate() error { } // podSubnet should be a valid CIDR - if _, _, err := net.ParseCIDR(c.Networking.PodSubnet); err != nil { - errs = append(errs, errors.Wrapf(err, "invalid podSubnet")) + cidrs := strings.Split(c.Networking.PodSubnet, ",") + for _, cidr := range cidrs { + if _, _, err := net.ParseCIDR(cidr); err != nil { + errs = append(errs, errors.Wrapf(err, "invalid podSubnet")) + } } + // serviceSubnet should be a valid CIDR - if _, _, err := net.ParseCIDR(c.Networking.ServiceSubnet); err != nil { - errs = append(errs, errors.Wrapf(err, "invalid serviceSubnet")) + cidrs = strings.Split(c.Networking.ServiceSubnet, ",") + for _, cidr := range cidrs { + if _, _, err := net.ParseCIDR(cidr); err != nil { + errs = append(errs, errors.Wrapf(err, "invalid serviceSubnet")) + } } // validate nodes