From 547e2192fd209ad07ceeaa3688f02c0acf16cc9e Mon Sep 17 00:00:00 2001 From: Slavik Panasovets Date: Thu, 29 Jun 2023 23:49:53 +0000 Subject: [PATCH] Add /96 suffix to static addresses for IPv6 external forwarding rules --- pkg/loadbalancers/forwarding_rules_ipv6.go | 9 +++++++++ pkg/loadbalancers/l4netlbipv6.go | 4 ++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/pkg/loadbalancers/forwarding_rules_ipv6.go b/pkg/loadbalancers/forwarding_rules_ipv6.go index 0f1e2ebe6b..5b95181ebe 100644 --- a/pkg/loadbalancers/forwarding_rules_ipv6.go +++ b/pkg/loadbalancers/forwarding_rules_ipv6.go @@ -37,6 +37,7 @@ import ( const ( IPVersionIPv6 = "IPV6" + prefix96range = "/96" ) func (l4 *L4) ensureIPv6ForwardingRule(bsLink string, options gce.ILBOptions, existingIPv6FwdRule *composite.ForwardingRule, ipv6AddressToUse string) (*composite.ForwardingRule, error) { @@ -210,6 +211,14 @@ func (l4netlb *L4NetLB) buildExpectedIPv6ForwardingRule(bsLink, ipv6AddressToUse return nil, fmt.Errorf("failed to compute description for forwarding rule %s, err: %w", frName, err) } + // ipv6AddressToUse will be returned from address manager without /96 prefix. + // for creating external IPv6 forwarding rule, address has to be specified with /96 prefix, or API will return error. + // This applies only to IPv6 External Forwarding rules, + // there is no such requirement for internal IPv6 forwarding rules. + if ipv6AddressToUse != "" && !strings.HasSuffix(ipv6AddressToUse, prefix96range) { + ipv6AddressToUse += prefix96range + } + svcPorts := l4netlb.Service.Spec.Ports portRange, protocol := utils.MinMaxPortRangeAndProtocol(svcPorts) fr := &composite.ForwardingRule{ diff --git a/pkg/loadbalancers/l4netlbipv6.go b/pkg/loadbalancers/l4netlbipv6.go index 3308556647..6a25c427b5 100644 --- a/pkg/loadbalancers/l4netlbipv6.go +++ b/pkg/loadbalancers/l4netlbipv6.go @@ -110,9 +110,9 @@ func (l4netlb *L4NetLB) ensureIPv6NodesFirewall(ipAddress string, nodeNames []st portRanges := utils.GetServicePortRanges(svcPorts) protocol := utils.GetProtocol(svcPorts) - klog.V(2).Infof("Ensuring IPv6 nodes firewall %s for L4 ILB Service %s/%s, ipAddress: %s, protocol: %s, len(nodeNames): %v, portRanges: %v", firewallName, l4netlb.Service.Namespace, l4netlb.Service.Name, ipAddress, protocol, len(nodeNames), portRanges) + klog.V(2).Infof("Ensuring IPv6 nodes firewall %s for L4 NetLB Service %s/%s, ipAddress: %s, protocol: %s, len(nodeNames): %v, portRanges: %v", firewallName, l4netlb.Service.Namespace, l4netlb.Service.Name, ipAddress, protocol, len(nodeNames), portRanges) defer func() { - klog.V(2).Infof("Finished ensuring IPv6 nodes firewall %s for L4 ILB Service %s/%s, time taken: %v", l4netlb.Service.Namespace, l4netlb.Service.Name, firewallName, time.Since(start)) + klog.V(2).Infof("Finished ensuring IPv6 nodes firewall %s for L4 NetLB Service %s/%s, time taken: %v", l4netlb.Service.Namespace, l4netlb.Service.Name, firewallName, time.Since(start)) }() // ensure firewalls