mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-10 12:32:03 +00:00
Merge pull request #23090 from tgraf/ipv6
Automatic merge from submit-queue Add IPv6 address support for pods - does NOT include services This allows a container to have an IPv6 address only and extracts the address via nsenter and iproute2 or the docker client directly. An IPv6 address is now correctly reported when describing a pod. @thockin @kubernetes/sig-network <!-- Reviewable:start --> --- This change is [<img src="http://reviewable.k8s.io/review_button.svg" height="35" align="absmiddle" alt="Reviewable"/>](http://reviewable.k8s.io/reviews/kubernetes/kubernetes/23090) <!-- Reviewable:end -->
This commit is contained in:
commit
bb3f5b1768
@ -66,6 +66,16 @@ func TestPackSubsets(t *testing.T) {
|
|||||||
Addresses: []api.EndpointAddress{{IP: "1.2.3.4"}},
|
Addresses: []api.EndpointAddress{{IP: "1.2.3.4"}},
|
||||||
Ports: []api.EndpointPort{{Port: 111}},
|
Ports: []api.EndpointPort{{Port: 111}},
|
||||||
}},
|
}},
|
||||||
|
}, {
|
||||||
|
name: "one set, one ip, one port (IPv6)",
|
||||||
|
given: []api.EndpointSubset{{
|
||||||
|
Addresses: []api.EndpointAddress{{IP: "beef::1:2:3:4"}},
|
||||||
|
Ports: []api.EndpointPort{{Port: 111}},
|
||||||
|
}},
|
||||||
|
expect: []api.EndpointSubset{{
|
||||||
|
Addresses: []api.EndpointAddress{{IP: "beef::1:2:3:4"}},
|
||||||
|
Ports: []api.EndpointPort{{Port: 111}},
|
||||||
|
}},
|
||||||
}, {
|
}, {
|
||||||
name: "one set, one notReady ip, one port",
|
name: "one set, one notReady ip, one port",
|
||||||
given: []api.EndpointSubset{{
|
given: []api.EndpointSubset{{
|
||||||
@ -169,6 +179,16 @@ func TestPackSubsets(t *testing.T) {
|
|||||||
Addresses: []api.EndpointAddress{{IP: "1.2.3.4"}},
|
Addresses: []api.EndpointAddress{{IP: "1.2.3.4"}},
|
||||||
Ports: []api.EndpointPort{{Port: 111}},
|
Ports: []api.EndpointPort{{Port: 111}},
|
||||||
}},
|
}},
|
||||||
|
}, {
|
||||||
|
name: "one set, dup ips, one port (IPv6)",
|
||||||
|
given: []api.EndpointSubset{{
|
||||||
|
Addresses: []api.EndpointAddress{{IP: "beef::1"}, {IP: "beef::1"}},
|
||||||
|
Ports: []api.EndpointPort{{Port: 111}},
|
||||||
|
}},
|
||||||
|
expect: []api.EndpointSubset{{
|
||||||
|
Addresses: []api.EndpointAddress{{IP: "beef::1"}},
|
||||||
|
Ports: []api.EndpointPort{{Port: 111}},
|
||||||
|
}},
|
||||||
}, {
|
}, {
|
||||||
name: "one set, dup ips with target-refs, one port",
|
name: "one set, dup ips with target-refs, one port",
|
||||||
given: []api.EndpointSubset{{
|
given: []api.EndpointSubset{{
|
||||||
|
@ -324,6 +324,11 @@ func (dm *DockerManager) determineContainerIP(podNamespace, podName string, cont
|
|||||||
|
|
||||||
if container.NetworkSettings != nil {
|
if container.NetworkSettings != nil {
|
||||||
result = container.NetworkSettings.IPAddress
|
result = container.NetworkSettings.IPAddress
|
||||||
|
|
||||||
|
// Fall back to IPv6 address if no IPv4 address is present
|
||||||
|
if result == "" {
|
||||||
|
result = container.NetworkSettings.GlobalIPv6Address
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if dm.networkPlugin.Name() != network.DefaultPluginName {
|
if dm.networkPlugin.Name() != network.DefaultPluginName {
|
||||||
@ -1171,6 +1176,15 @@ func (dm *DockerManager) GetContainerIP(containerID, interfaceName string) (stri
|
|||||||
args := []string{"-t", fmt.Sprintf("%d", containerPid), "-n", "--", "bash", "-c", extractIPCmd}
|
args := []string{"-t", fmt.Sprintf("%d", containerPid), "-n", "--", "bash", "-c", extractIPCmd}
|
||||||
command := exec.Command("nsenter", args...)
|
command := exec.Command("nsenter", args...)
|
||||||
out, err := command.CombinedOutput()
|
out, err := command.CombinedOutput()
|
||||||
|
|
||||||
|
// Fall back to IPv6 address if no IPv4 address is present
|
||||||
|
if err == nil && string(out) == "" {
|
||||||
|
extractIPCmd = fmt.Sprintf("ip -6 addr show %s scope global | grep inet6 | awk -F\" \" '{print $2}'", interfaceName)
|
||||||
|
args = []string{"-t", fmt.Sprintf("%d", containerPid), "-n", "--", "bash", "-c", extractIPCmd}
|
||||||
|
command = exec.Command("nsenter", args...)
|
||||||
|
out, err = command.CombinedOutput()
|
||||||
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user