Merge pull request #98884 from fedepaol/hostnetworkudp

Network Tests: bind host network udp listeners to hostIPs
This commit is contained in:
Kubernetes Prow Robot 2021-03-11 00:18:24 -08:00 committed by GitHub
commit 91a7be0c2f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 36 additions and 10 deletions

View File

@ -27,7 +27,7 @@ dependencies:
# then after merge and successful postsubmit image push / promotion, bump this
- name: "agnhost: dependents"
version: "2.28"
version: "2.29"
refPaths:
- path: test/utils/image/manifest.go
match: configs\[Agnhost\] = Config{promoterE2eRegistry, "agnhost", "\d+\.\d+"}

View File

@ -540,6 +540,18 @@ func (config *NetworkingTestConfig) executeCurlCmd(cmd string, expected string)
}
func (config *NetworkingTestConfig) createNetShellPodSpec(podName, hostname string) *v1.Pod {
netexecArgs := []string{
"netexec",
fmt.Sprintf("--http-port=%d", EndpointHTTPPort),
fmt.Sprintf("--udp-port=%d", EndpointUDPPort),
}
// In case of hostnetwork endpoints, we want to bind the udp listener to specific ip addresses.
// In order to cover legacy AND dualstack, we pass both the host ip and the two pod ips. Agnhost
// removes duplicates and so this will listen on both addresses (or on the single existing one).
if config.EndpointsHostNetwork {
netexecArgs = append(netexecArgs, "--udp-listen-addresses=$(HOST_IP),$(POD_IPS)")
}
probe := &v1.Probe{
InitialDelaySeconds: 10,
TimeoutSeconds: 30,
@ -568,11 +580,7 @@ func (config *NetworkingTestConfig) createNetShellPodSpec(podName, hostname stri
Name: "webserver",
Image: NetexecImageName,
ImagePullPolicy: v1.PullIfNotPresent,
Args: []string{
"netexec",
fmt.Sprintf("--http-port=%d", EndpointHTTPPort),
fmt.Sprintf("--udp-port=%d", EndpointUDPPort),
},
Args: netexecArgs,
Ports: []v1.ContainerPort{
{
Name: "http",
@ -602,6 +610,27 @@ func (config *NetworkingTestConfig) createNetShellPodSpec(podName, hostname stri
Protocol: v1.ProtocolSCTP,
})
}
if config.EndpointsHostNetwork {
pod.Spec.Containers[0].Env = []v1.EnvVar{
{
Name: "HOST_IP",
ValueFrom: &v1.EnvVarSource{
FieldRef: &v1.ObjectFieldSelector{
FieldPath: "status.hostIP",
},
},
},
{
Name: "POD_IPS",
ValueFrom: &v1.EnvVarSource{
FieldRef: &v1.ObjectFieldSelector{
FieldPath: "status.podIPs",
},
},
},
}
}
return pod
}

View File

@ -468,10 +468,7 @@ var _ = common.SIGDescribe("Networking", func() {
}
})
// skip because pods can not reach the endpoint in the same host if using UDP and hostNetwork
// xref: #95565
ginkgo.It("should function for pod-Service(hostNetwork): udp", func() {
e2eskipper.Skipf("skip because pods can not reach the endpoint in the same host if using UDP and hostNetwork #95565")
config := e2enetwork.NewNetworkingTestConfig(f, e2enetwork.EndpointsUseHostNetwork)
ginkgo.By(fmt.Sprintf("dialing(udp) %v --> %v:%v (config.clusterIP)", config.TestContainerPod.Name, config.ClusterIP, e2enetwork.ClusterUDPPort))
err := config.DialFromTestContainer("udp", config.ClusterIP, e2enetwork.ClusterUDPPort, config.MaxTries, 0, config.EndpointHostnames())

View File

@ -216,7 +216,7 @@ const (
func initImageConfigs() (map[int]Config, map[int]Config) {
configs := map[int]Config{}
configs[Agnhost] = Config{promoterE2eRegistry, "agnhost", "2.28"}
configs[Agnhost] = Config{promoterE2eRegistry, "agnhost", "2.29"}
configs[AgnhostPrivate] = Config{PrivateRegistry, "agnhost", "2.6"}
configs[AuthenticatedAlpine] = Config{gcAuthenticatedRegistry, "alpine", "3.7"}
configs[AuthenticatedWindowsNanoServer] = Config{gcAuthenticatedRegistry, "windows-nanoserver", "v1"}