Skip to content

Commit

Permalink
Merge pull request #163 from vultr/ipv6
Browse files Browse the repository at this point in the history
ipv6 support for vlb
  • Loading branch information
happytreees committed Mar 6, 2023
2 parents 6b853ff + 955d385 commit 3c9bbed
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 12 deletions.
4 changes: 4 additions & 0 deletions vultr/instances.go
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,10 @@ func (i *instances) nodeAddresses(instance *govultr.Instance) ([]v1.NodeAddress,
v1.NodeAddress{Type: v1.NodeExternalIP, Address: instance.MainIP}, // public IP
)

if instance.V6MainIP != "" {
addresses = append(addresses, v1.NodeAddress{Type: v1.NodeExternalIP, Address: instance.V6MainIP}) // IPv6
}

return addresses, nil
}

Expand Down
5 changes: 5 additions & 0 deletions vultr/instancesv2.go
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,11 @@ func (i *instancesv2) nodeAddresses(instance *govultr.Instance) ([]v1.NodeAddres
v1.NodeAddress{Type: v1.NodeInternalIP, Address: instance.InternalIP}, // private IP
v1.NodeAddress{Type: v1.NodeExternalIP, Address: instance.MainIP}, // public IP
)

if instance.V6MainIP != "" {
addresses = append(addresses, v1.NodeAddress{Type: v1.NodeExternalIP, Address: instance.V6MainIP}) // IPv6
}

return addresses, nil
}

Expand Down
52 changes: 40 additions & 12 deletions vultr/loadbalancers.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,13 +105,17 @@ func (l *loadbalancers) GetLoadBalancer(ctx context.Context, clusterName string,
return nil, false, err
}

enabledIPv6 := checkEnabledIPv6(service)
var ingress []v1.LoadBalancerIngress

ingress = append(ingress, v1.LoadBalancerIngress{Hostname: lb.Label, IP: lb.IPV4})

if enabledIPv6 {
ingress = append(ingress, v1.LoadBalancerIngress{Hostname: lb.Label, IP: lb.IPV6})
}

return &v1.LoadBalancerStatus{
Ingress: []v1.LoadBalancerIngress{
{
IP: lb.IPV4,
Hostname: lb.Label,
},
},
Ingress: ingress,
}, true, nil
}

Expand Down Expand Up @@ -148,13 +152,17 @@ func (l *loadbalancers) EnsureLoadBalancer(ctx context.Context, clusterName stri
return nil, fmt.Errorf("load-balancer is not yet active - current status: %s", lb2.Status)
}

enabledIPv6 := checkEnabledIPv6(service)
var ingress []v1.LoadBalancerIngress

ingress = append(ingress, v1.LoadBalancerIngress{Hostname: lb2.Label, IP: lb2.IPV4})

if enabledIPv6 {
ingress = append(ingress, v1.LoadBalancerIngress{Hostname: lb2.Label, IP: lb2.IPV6})
}

return &v1.LoadBalancerStatus{
Ingress: []v1.LoadBalancerIngress{
{
IP: lb2.IPV4,
Hostname: lb2.Label,
},
},
Ingress: ingress,
}, nil
}

Expand Down Expand Up @@ -849,3 +857,23 @@ func getBackendProtocol(service *v1.Service) string {
return ""
}
}

// checkEnabledIPv6 checks whether or not IPv6 is requested on the resource
func checkEnabledIPv6(service *v1.Service) bool {
if family := service.Spec.IPFamilies; len(family) >= 1 {
for _, fam := range family {
if fam == "IPv6" {
return true
}
}
}

if service.Spec.IPFamilyPolicy != nil {
policy := *service.Spec.IPFamilyPolicy
if policy == v1.IPFamilyPolicyPreferDualStack || policy == v1.IPFamilyPolicyRequireDualStack {
return true
}
}

return false
}

0 comments on commit 3c9bbed

Please sign in to comment.