mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-24 20:24:09 +00:00
Merge pull request #94834 from liggitt/pod-location-ipv6
Fix resource location for ipv6 pods
This commit is contained in:
commit
6c4bae3d9b
@ -18,6 +18,7 @@ package storage
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"net/url"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
@ -251,7 +252,7 @@ func TestCreateSetsFields(t *testing.T) {
|
|||||||
|
|
||||||
func TestResourceLocation(t *testing.T) {
|
func TestResourceLocation(t *testing.T) {
|
||||||
expectedIP := "1.2.3.4"
|
expectedIP := "1.2.3.4"
|
||||||
expectedIP6 := "2001:db8::"
|
expectedIP6 := "fd00:10:244:0:2::6b"
|
||||||
testCases := []struct {
|
testCases := []struct {
|
||||||
pod api.Pod
|
pod api.Pod
|
||||||
query string
|
query string
|
||||||
@ -286,6 +287,19 @@ func TestResourceLocation(t *testing.T) {
|
|||||||
query: "foo",
|
query: "foo",
|
||||||
location: expectedIP,
|
location: expectedIP,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
pod: api.Pod{
|
||||||
|
ObjectMeta: metav1.ObjectMeta{Name: "foo"},
|
||||||
|
Spec: api.PodSpec{
|
||||||
|
Containers: []api.Container{
|
||||||
|
{Name: "ctr"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Status: api.PodStatus{PodIPs: []api.PodIP{{IP: expectedIP6}}},
|
||||||
|
},
|
||||||
|
query: "foo",
|
||||||
|
location: "[" + expectedIP6 + "]",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
pod: api.Pod{
|
pod: api.Pod{
|
||||||
ObjectMeta: metav1.ObjectMeta{Name: "foo"},
|
ObjectMeta: metav1.ObjectMeta{Name: "foo"},
|
||||||
@ -354,6 +368,20 @@ func TestResourceLocation(t *testing.T) {
|
|||||||
query: "foo",
|
query: "foo",
|
||||||
location: expectedIP + ":9376",
|
location: expectedIP + ":9376",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
pod: api.Pod{
|
||||||
|
ObjectMeta: metav1.ObjectMeta{Name: "foo"},
|
||||||
|
Spec: api.PodSpec{
|
||||||
|
Containers: []api.Container{
|
||||||
|
{Name: "ctr1", Ports: []api.ContainerPort{{ContainerPort: 9376}}},
|
||||||
|
{Name: "ctr2", Ports: []api.ContainerPort{{ContainerPort: 1234}}},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Status: api.PodStatus{PodIPs: []api.PodIP{{IP: expectedIP6}, {IP: expectedIP}}},
|
||||||
|
},
|
||||||
|
query: "foo",
|
||||||
|
location: "[" + expectedIP6 + "]:9376",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx := genericapirequest.NewDefaultContext()
|
ctx := genericapirequest.NewDefaultContext()
|
||||||
@ -379,6 +407,10 @@ func TestResourceLocation(t *testing.T) {
|
|||||||
if location.Host != tc.location {
|
if location.Host != tc.location {
|
||||||
t.Errorf("Expected %v, but got %v", tc.location, location.Host)
|
t.Errorf("Expected %v, but got %v", tc.location, location.Host)
|
||||||
}
|
}
|
||||||
|
if _, err := url.Parse(location.String()); err != nil {
|
||||||
|
t.Errorf("could not parse returned location %s: %v", location.String(), err)
|
||||||
|
}
|
||||||
|
|
||||||
server.Terminate(t)
|
server.Terminate(t)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -26,7 +26,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
"k8s.io/apimachinery/pkg/api/errors"
|
"k8s.io/apimachinery/pkg/api/errors"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/fields"
|
"k8s.io/apimachinery/pkg/fields"
|
||||||
@ -317,7 +317,13 @@ func ResourceLocation(ctx context.Context, getter ResourceGetter, rt http.RoundT
|
|||||||
Scheme: scheme,
|
Scheme: scheme,
|
||||||
}
|
}
|
||||||
if port == "" {
|
if port == "" {
|
||||||
loc.Host = podIP
|
// when using an ipv6 IP as a hostname in a URL, it must be wrapped in [...]
|
||||||
|
// net.JoinHostPort does this for you.
|
||||||
|
if strings.Contains(podIP, ":") {
|
||||||
|
loc.Host = "[" + podIP + "]"
|
||||||
|
} else {
|
||||||
|
loc.Host = podIP
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
loc.Host = net.JoinHostPort(podIP, port)
|
loc.Host = net.JoinHostPort(podIP, port)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user