fix host port handling for ipv6 (#16723)

This commit is contained in:
valodzka 2023-04-21 05:53:20 +03:00 committed by GitHub
parent 1e3531b978
commit 379497a484
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 32 additions and 8 deletions

3
.changelog/16723.txt Normal file
View File

@ -0,0 +1,3 @@
```release-note:bug
client: Fix address for ports in IPv6 networks
```

View File

@ -1042,7 +1042,7 @@ func (b *Builder) SetWorkloadToken(token string, inject bool) *Builder {
// addPort keys and values for other tasks to an env var map
func addPort(m map[string]string, taskName, ip, portLabel string, port int) {
key := fmt.Sprintf("%s%s_%s", AddrPrefix, taskName, portLabel)
m[key] = fmt.Sprintf("%s:%d", ip, port)
m[key] = net.JoinHostPort(ip, strconv.Itoa(port))
key = fmt.Sprintf("%s%s_%s", IpPrefix, taskName, portLabel)
m[key] = ip
key = fmt.Sprintf("%s%s_%s", PortPrefix, taskName, portLabel)
@ -1063,8 +1063,9 @@ func addGroupPort(m map[string]string, port structs.Port) {
func addPorts(m map[string]string, ports structs.AllocatedPorts) {
for _, p := range ports {
m[AddrPrefix+p.Label] = fmt.Sprintf("%s:%d", p.HostIP, p.Value)
m[HostAddrPrefix+p.Label] = fmt.Sprintf("%s:%d", p.HostIP, p.Value)
port := strconv.Itoa(p.Value)
m[AddrPrefix+p.Label] = net.JoinHostPort(p.HostIP, port)
m[HostAddrPrefix+p.Label] = net.JoinHostPort(p.HostIP, port)
m[IpPrefix+p.Label] = p.HostIP
m[HostIpPrefix+p.Label] = p.HostIP
if p.To > 0 {
@ -1077,6 +1078,6 @@ func addPorts(m map[string]string, ports structs.AllocatedPorts) {
m[AllocPortPrefix+p.Label] = val
}
m[HostPortPrefix+p.Label] = strconv.Itoa(p.Value)
m[HostPortPrefix+p.Label] = port
}
}

View File

@ -192,6 +192,18 @@ func TestEnvironment_AsList(t *testing.T) {
},
},
}
a.AllocatedResources.Tasks["mail"] = &structs.AllocatedTaskResources{
Networks: []*structs.NetworkResource{
{
Device: "eth0",
IP: "fd12:3456:789a:1::1",
MBits: 50,
ReservedPorts: []structs.Port{
{Label: "ipv6", Value: 2222},
},
},
},
}
a.Namespace = "not-default"
task := a.Job.TaskGroups[0].Tasks[0]
task.Env = map[string]string{
@ -220,6 +232,9 @@ func TestEnvironment_AsList(t *testing.T) {
"NOMAD_IP_ssh_ssh=192.168.0.100",
"NOMAD_PORT_ssh_other=1234",
"NOMAD_PORT_ssh_ssh=22",
"NOMAD_ADDR_mail_ipv6=[fd12:3456:789a:1::1]:2222",
"NOMAD_IP_mail_ipv6=fd12:3456:789a:1::1",
"NOMAD_PORT_mail_ipv6=2222",
"NOMAD_CPU_LIMIT=500",
"NOMAD_CPU_CORES=0,5-7",
"NOMAD_DC=dc1",

View File

@ -15,6 +15,7 @@ import (
"net/url"
"os"
"reflect"
"strconv"
"strings"
"sync"
"syscall"
@ -158,7 +159,7 @@ func TestHTTP_AgentJoin(t *testing.T) {
httpTest(t, nil, func(s *TestAgent) {
// Determine the join address
member := s.Agent.Server().LocalMember()
addr := fmt.Sprintf("%s:%d", member.Addr, member.Port)
addr := net.JoinHostPort(member.Addr.String(), strconv.Itoa(int(member.Port)))
// Make the HTTP request
req, err := http.NewRequest("PUT",

View File

@ -6,6 +6,8 @@ package nomad
import (
"errors"
"fmt"
"net"
"strconv"
"strings"
"time"
@ -530,7 +532,7 @@ func groupConnectUpstreamsValidate(group string, services []*structs.Service) er
for _, service := range services {
if service.Connect.HasSidecar() && service.Connect.SidecarService.Proxy != nil {
for _, up := range service.Connect.SidecarService.Proxy.Upstreams {
listener := fmt.Sprintf("%s:%d", up.LocalBindAddress, up.LocalBindPort)
listener := net.JoinHostPort(up.LocalBindAddress, strconv.Itoa(up.LocalBindPort))
if s, exists := listeners[listener]; exists {
return fmt.Errorf(
"Consul Connect services %q and %q in group %q using same address for upstreams (%s)",

View File

@ -5,8 +5,10 @@ package structs
import (
"fmt"
"net"
"reflect"
"sort"
"strconv"
"strings"
"github.com/hashicorp/nomad/helper/flatmap"
@ -1369,11 +1371,11 @@ func connectGatewayProxyEnvoyBindAddrsDiff(prev, next map[string]*ConsulGatewayB
nextMap := make(map[string]string, len(next))
for k, v := range prev {
prevMap[k] = fmt.Sprintf("%s:%d", v.Address, v.Port)
prevMap[k] = net.JoinHostPort(v.Address, strconv.Itoa(v.Port))
}
for k, v := range next {
nextMap[k] = fmt.Sprintf("%s:%d", v.Address, v.Port)
nextMap[k] = net.JoinHostPort(v.Address, strconv.Itoa(v.Port))
}
oldPrimitiveFlat := flatmap.Flatten(prevMap, nil, false)