mirror of
https://github.com/kubernetes/client-go.git
synced 2025-07-01 01:12:01 +00:00
Merge pull request #70931 from m1kola/port-forward-consistency
Fixes inconsistent behaviour in portforward Kubernetes-commit: 162b79d2ec402d895e3738c240986590932508f4
This commit is contained in:
commit
ae78dce898
@ -23,6 +23,7 @@ import (
|
|||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
@ -122,10 +123,14 @@ func parseAddresses(addressesToParse []string) ([]listenAddress, error) {
|
|||||||
parsed := make(map[string]listenAddress)
|
parsed := make(map[string]listenAddress)
|
||||||
for _, address := range addressesToParse {
|
for _, address := range addressesToParse {
|
||||||
if address == "localhost" {
|
if address == "localhost" {
|
||||||
|
if _, exists := parsed["127.0.0.1"]; !exists {
|
||||||
ip := listenAddress{address: "127.0.0.1", protocol: "tcp4", failureMode: "all"}
|
ip := listenAddress{address: "127.0.0.1", protocol: "tcp4", failureMode: "all"}
|
||||||
parsed[ip.address] = ip
|
parsed[ip.address] = ip
|
||||||
ip = listenAddress{address: "::1", protocol: "tcp6", failureMode: "all"}
|
}
|
||||||
|
if _, exists := parsed["::1"]; !exists {
|
||||||
|
ip := listenAddress{address: "::1", protocol: "tcp6", failureMode: "all"}
|
||||||
parsed[ip.address] = ip
|
parsed[ip.address] = ip
|
||||||
|
}
|
||||||
} else if net.ParseIP(address).To4() != nil {
|
} else if net.ParseIP(address).To4() != nil {
|
||||||
parsed[address] = listenAddress{address: address, protocol: "tcp4", failureMode: "any"}
|
parsed[address] = listenAddress{address: address, protocol: "tcp4", failureMode: "any"}
|
||||||
} else if net.ParseIP(address) != nil {
|
} else if net.ParseIP(address) != nil {
|
||||||
@ -140,6 +145,9 @@ func parseAddresses(addressesToParse []string) ([]listenAddress, error) {
|
|||||||
addresses[id] = v
|
addresses[id] = v
|
||||||
id++
|
id++
|
||||||
}
|
}
|
||||||
|
// Sort addresses before returning to get a stable order
|
||||||
|
sort.Slice(addresses, func(i, j int) bool { return addresses[i].address < addresses[j].address })
|
||||||
|
|
||||||
return addresses, nil
|
return addresses, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -83,6 +83,62 @@ func TestParsePortsAndNew(t *testing.T) {
|
|||||||
{protocol: "tcp6", address: "::1", failureMode: "all"},
|
{protocol: "tcp6", address: "::1", failureMode: "all"},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
input: []string{"5000:5000"},
|
||||||
|
addresses: []string{"localhost", "::1"},
|
||||||
|
expectedPorts: []ForwardedPort{
|
||||||
|
{5000, 5000},
|
||||||
|
},
|
||||||
|
expectedAddresses: []listenAddress{
|
||||||
|
{protocol: "tcp4", address: "127.0.0.1", failureMode: "all"},
|
||||||
|
{protocol: "tcp6", address: "::1", failureMode: "any"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
input: []string{"5000:5000"},
|
||||||
|
addresses: []string{"localhost", "127.0.0.1", "::1"},
|
||||||
|
expectedPorts: []ForwardedPort{
|
||||||
|
{5000, 5000},
|
||||||
|
},
|
||||||
|
expectedAddresses: []listenAddress{
|
||||||
|
{protocol: "tcp4", address: "127.0.0.1", failureMode: "any"},
|
||||||
|
{protocol: "tcp6", address: "::1", failureMode: "any"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
input: []string{"5000:5000"},
|
||||||
|
addresses: []string{"localhost", "127.0.0.1", "10.10.10.1"},
|
||||||
|
expectedPorts: []ForwardedPort{
|
||||||
|
{5000, 5000},
|
||||||
|
},
|
||||||
|
expectedAddresses: []listenAddress{
|
||||||
|
{protocol: "tcp4", address: "127.0.0.1", failureMode: "any"},
|
||||||
|
{protocol: "tcp6", address: "::1", failureMode: "all"},
|
||||||
|
{protocol: "tcp4", address: "10.10.10.1", failureMode: "any"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
input: []string{"5000:5000"},
|
||||||
|
addresses: []string{"127.0.0.1", "::1", "localhost"},
|
||||||
|
expectedPorts: []ForwardedPort{
|
||||||
|
{5000, 5000},
|
||||||
|
},
|
||||||
|
expectedAddresses: []listenAddress{
|
||||||
|
{protocol: "tcp4", address: "127.0.0.1", failureMode: "any"},
|
||||||
|
{protocol: "tcp6", address: "::1", failureMode: "any"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
input: []string{"5000:5000"},
|
||||||
|
addresses: []string{"10.0.0.1", "127.0.0.1"},
|
||||||
|
expectedPorts: []ForwardedPort{
|
||||||
|
{5000, 5000},
|
||||||
|
},
|
||||||
|
expectedAddresses: []listenAddress{
|
||||||
|
{protocol: "tcp4", address: "10.0.0.1", failureMode: "any"},
|
||||||
|
{protocol: "tcp4", address: "127.0.0.1", failureMode: "any"},
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
input: []string{"5000", "5000:5000", "8888:5000", "5000:8888", ":5000", "0:5000"},
|
input: []string{"5000", "5000:5000", "8888:5000", "5000:8888", ":5000", "0:5000"},
|
||||||
addresses: []string{"127.0.0.1", "::1"},
|
addresses: []string{"127.0.0.1", "::1"},
|
||||||
|
Loading…
Reference in New Issue
Block a user