Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
67f44611
Commit
67f44611
authored
Oct 12, 2017
by
m1093782566
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix CI error for session affinity
parent
cea1af38
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
37 additions
and
17 deletions
+37
-17
networking_utils.go
test/e2e/framework/networking_utils.go
+16
-5
networking.go
test/e2e/network/networking.go
+21
-12
No files found.
test/e2e/framework/networking_utils.go
View file @
67f44611
...
@@ -220,11 +220,16 @@ func (config *NetworkingTestConfig) DialFromContainer(protocol, containerIP, tar
...
@@ -220,11 +220,16 @@ func (config *NetworkingTestConfig) DialFromContainer(protocol, containerIP, tar
Failf
(
"Failed to find expected endpoints:
\n
Tries %d
\n
Command %v
\n
retrieved %v
\n
expected %v
\n
"
,
maxTries
,
cmd
,
eps
,
expectedEps
)
Failf
(
"Failed to find expected endpoints:
\n
Tries %d
\n
Command %v
\n
retrieved %v
\n
expected %v
\n
"
,
maxTries
,
cmd
,
eps
,
expectedEps
)
}
}
func
(
config
*
NetworkingTestConfig
)
GetEndpointsFromTestContainer
(
protocol
,
targetIP
string
,
targetPort
,
maxTries
,
minT
ries
int
)
(
sets
.
String
,
error
)
{
func
(
config
*
NetworkingTestConfig
)
GetEndpointsFromTestContainer
(
protocol
,
targetIP
string
,
targetPort
,
t
ries
int
)
(
sets
.
String
,
error
)
{
return
config
.
GetEndpointsFromContainer
(
protocol
,
config
.
TestContainerPod
.
Status
.
PodIP
,
targetIP
,
TestContainerHttpPort
,
targetPort
,
maxTries
,
minT
ries
)
return
config
.
GetEndpointsFromContainer
(
protocol
,
config
.
TestContainerPod
.
Status
.
PodIP
,
targetIP
,
TestContainerHttpPort
,
targetPort
,
t
ries
)
}
}
func
(
config
*
NetworkingTestConfig
)
GetEndpointsFromContainer
(
protocol
,
containerIP
,
targetIP
string
,
containerHttpPort
,
targetPort
,
maxTries
,
minTries
int
)
(
sets
.
String
,
error
)
{
// GetEndpointsFromContainer executes a curl via kubectl exec in a test container,
// which might then translate to a tcp or udp request based on the protocol argument
// in the url.
// - tries is the maximum number of curl attempts. If this many attempts pass and
// we don't see any endpoints, the test fails.
func
(
config
*
NetworkingTestConfig
)
GetEndpointsFromContainer
(
protocol
,
containerIP
,
targetIP
string
,
containerHttpPort
,
targetPort
,
tries
int
)
(
sets
.
String
,
error
)
{
cmd
:=
fmt
.
Sprintf
(
"curl -q -s 'http://%s:%d/dial?request=hostName&protocol=%s&host=%s&port=%d&tries=1'"
,
cmd
:=
fmt
.
Sprintf
(
"curl -q -s 'http://%s:%d/dial?request=hostName&protocol=%s&host=%s&port=%d&tries=1'"
,
containerIP
,
containerIP
,
containerHttpPort
,
containerHttpPort
,
...
@@ -234,7 +239,7 @@ func (config *NetworkingTestConfig) GetEndpointsFromContainer(protocol, containe
...
@@ -234,7 +239,7 @@ func (config *NetworkingTestConfig) GetEndpointsFromContainer(protocol, containe
eps
:=
sets
.
NewString
()
eps
:=
sets
.
NewString
()
for
i
:=
0
;
i
<
maxT
ries
;
i
++
{
for
i
:=
0
;
i
<
t
ries
;
i
++
{
stdout
,
stderr
,
err
:=
config
.
f
.
ExecShellInPodWithFullOutput
(
config
.
HostTestContainerPod
.
Name
,
cmd
)
stdout
,
stderr
,
err
:=
config
.
f
.
ExecShellInPodWithFullOutput
(
config
.
HostTestContainerPod
.
Name
,
cmd
)
if
err
!=
nil
{
if
err
!=
nil
{
// A failure to kubectl exec counts as a try, not a hard fail.
// A failure to kubectl exec counts as a try, not a hard fail.
...
@@ -242,6 +247,7 @@ func (config *NetworkingTestConfig) GetEndpointsFromContainer(protocol, containe
...
@@ -242,6 +247,7 @@ func (config *NetworkingTestConfig) GetEndpointsFromContainer(protocol, containe
// we confirm unreachability.
// we confirm unreachability.
Logf
(
"Failed to execute %q: %v, stdout: %q, stderr: %q"
,
cmd
,
err
,
stdout
,
stderr
)
Logf
(
"Failed to execute %q: %v, stdout: %q, stderr: %q"
,
cmd
,
err
,
stdout
,
stderr
)
}
else
{
}
else
{
Logf
(
"maxTries: %d, in try: %d, stdout: %v, stderr: %v"
,
tries
,
i
,
stdout
,
stderr
)
var
output
map
[
string
][]
string
var
output
map
[
string
][]
string
if
err
:=
json
.
Unmarshal
([]
byte
(
stdout
),
&
output
);
err
!=
nil
{
if
err
:=
json
.
Unmarshal
([]
byte
(
stdout
),
&
output
);
err
!=
nil
{
Logf
(
"WARNING: Failed to unmarshal curl response. Cmd %v run in %v, output: %s, err: %v"
,
Logf
(
"WARNING: Failed to unmarshal curl response. Cmd %v run in %v, output: %s, err: %v"
,
...
@@ -255,10 +261,15 @@ func (config *NetworkingTestConfig) GetEndpointsFromContainer(protocol, containe
...
@@ -255,10 +261,15 @@ func (config *NetworkingTestConfig) GetEndpointsFromContainer(protocol, containe
eps
.
Insert
(
trimmed
)
eps
.
Insert
(
trimmed
)
}
}
}
}
// Return immediately when we successfully fetch endpoints
if
len
(
eps
)
>
0
{
return
eps
,
nil
return
eps
,
nil
}
}
// TODO: get rid of this delay #36281
time
.
Sleep
(
hitEndpointRetryDelay
)
}
}
}
return
nil
,
fmt
.
Errorf
(
"
Failed to get endpoints:
\n
Tries %d
\n
Command %v
\n
"
,
minT
ries
,
cmd
)
return
nil
,
fmt
.
Errorf
(
"
error getting endpoints:
\n
Tries %d
\n
Command %v
\n
"
,
t
ries
,
cmd
)
}
}
// DialFromNode executes a tcp or udp request based on protocol via kubectl exec
// DialFromNode executes a tcp or udp request based on protocol via kubectl exec
...
...
test/e2e/network/networking.go
View file @
67f44611
...
@@ -19,7 +19,6 @@ package network
...
@@ -19,7 +19,6 @@ package network
import
(
import
(
"fmt"
"fmt"
"net/http"
"net/http"
"time"
"k8s.io/api/core/v1"
"k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/util/sets"
"k8s.io/apimachinery/pkg/util/sets"
...
@@ -208,15 +207,21 @@ var _ = SIGDescribe("Networking", func() {
...
@@ -208,15 +207,21 @@ var _ = SIGDescribe("Networking", func() {
updateSessionAffinity
:=
func
(
svc
*
v1
.
Service
)
{
updateSessionAffinity
:=
func
(
svc
*
v1
.
Service
)
{
svc
.
Spec
.
SessionAffinity
=
v1
.
ServiceAffinityClientIP
svc
.
Spec
.
SessionAffinity
=
v1
.
ServiceAffinityClientIP
}
}
framework
.
UpdateService
(
f
.
ClientSet
,
config
.
NodePortService
.
Namespace
,
config
.
NodePortService
.
Name
,
updateSessionAffinity
)
_
,
err
:=
framework
.
UpdateService
(
f
.
ClientSet
,
config
.
NodePortService
.
Namespace
,
config
.
NodePortService
.
Name
,
updateSessionAffinity
)
firstEndpoints
,
err
:=
config
.
GetEndpointsFromTestContainer
(
"http"
,
config
.
ClusterIP
,
framework
.
ClusterHttpPort
,
config
.
MaxTries
,
0
)
if
err
!=
nil
{
if
err
!=
nil
{
framework
.
Failf
(
"
Unable to get endpoints from test containers
: %v"
,
err
)
framework
.
Failf
(
"
Failed to update service session affinity, error
: %v"
,
err
)
}
}
// Fetch first endpoints when visiting service
firstEndpoints
,
err
:=
config
.
GetEndpointsFromTestContainer
(
"http"
,
config
.
ClusterIP
,
framework
.
ClusterHttpPort
,
config
.
MaxTries
)
if
err
!=
nil
{
framework
.
Failf
(
"Unable to get endpoints from test container: %v"
,
err
)
}
// Check if first endpoints are equal to endpoints which are fetched later
for
i
:=
0
;
i
<
framework
.
SessionAffinityChecks
;
i
++
{
for
i
:=
0
;
i
<
framework
.
SessionAffinityChecks
;
i
++
{
eps
,
err
:=
config
.
GetEndpointsFromTestContainer
(
"http"
,
config
.
ClusterIP
,
framework
.
ClusterHttpPort
,
config
.
MaxTries
,
0
)
eps
,
err
:=
config
.
GetEndpointsFromTestContainer
(
"http"
,
config
.
ClusterIP
,
framework
.
ClusterHttpPort
,
config
.
MaxTries
)
if
err
!=
nil
{
if
err
!=
nil
{
framework
.
Failf
(
"Unable to get endpoints from test container
s
: %v"
,
err
)
framework
.
Failf
(
"Unable to get endpoints from test container: %v"
,
err
)
}
}
if
!
eps
.
Equal
(
firstEndpoints
)
{
if
!
eps
.
Equal
(
firstEndpoints
)
{
framework
.
Failf
(
"Expect endpoints: %v, got: %v"
,
firstEndpoints
,
eps
)
framework
.
Failf
(
"Expect endpoints: %v, got: %v"
,
firstEndpoints
,
eps
)
...
@@ -225,19 +230,24 @@ var _ = SIGDescribe("Networking", func() {
...
@@ -225,19 +230,24 @@ var _ = SIGDescribe("Networking", func() {
})
})
It
(
"should function for client IP based session affinity: udp"
,
func
()
{
It
(
"should function for client IP based session affinity: udp"
,
func
()
{
startTime
:=
time
.
Now
()
config
:=
framework
.
NewNetworkingTestConfig
(
f
)
config
:=
framework
.
NewNetworkingTestConfig
(
f
)
By
(
fmt
.
Sprintf
(
"dialing(udp) %v --> %v:%v (config.clusterIP)"
,
config
.
TestContainerPod
.
Name
,
config
.
ClusterIP
,
framework
.
Cluster
Htt
pPort
))
By
(
fmt
.
Sprintf
(
"dialing(udp) %v --> %v:%v (config.clusterIP)"
,
config
.
TestContainerPod
.
Name
,
config
.
ClusterIP
,
framework
.
Cluster
Ud
pPort
))
updateSessionAffinity
:=
func
(
svc
*
v1
.
Service
)
{
updateSessionAffinity
:=
func
(
svc
*
v1
.
Service
)
{
svc
.
Spec
.
SessionAffinity
=
v1
.
ServiceAffinityClientIP
svc
.
Spec
.
SessionAffinity
=
v1
.
ServiceAffinityClientIP
}
}
framework
.
UpdateService
(
f
.
ClientSet
,
config
.
NodePortService
.
Namespace
,
config
.
NodePortService
.
Name
,
updateSessionAffinity
)
_
,
err
:=
framework
.
UpdateService
(
f
.
ClientSet
,
config
.
NodePortService
.
Namespace
,
config
.
NodePortService
.
Name
,
updateSessionAffinity
)
firstEndpoints
,
err
:=
config
.
GetEndpointsFromTestContainer
(
"udp"
,
config
.
ClusterIP
,
framework
.
ClusterUdpPort
,
config
.
MaxTries
,
0
)
if
err
!=
nil
{
framework
.
Failf
(
"Failed to update service session affinity, error: %v"
,
err
)
}
// Fetch first endpoints when visiting service
firstEndpoints
,
err
:=
config
.
GetEndpointsFromTestContainer
(
"udp"
,
config
.
ClusterIP
,
framework
.
ClusterUdpPort
,
config
.
MaxTries
)
if
err
!=
nil
{
if
err
!=
nil
{
framework
.
Failf
(
"Unable to get endpoints from test containers: %v"
,
err
)
framework
.
Failf
(
"Unable to get endpoints from test containers: %v"
,
err
)
}
}
// Check if first endpoints are equal to endpoints which are fetched later
for
i
:=
0
;
i
<
framework
.
SessionAffinityChecks
;
i
++
{
for
i
:=
0
;
i
<
framework
.
SessionAffinityChecks
;
i
++
{
eps
,
err
:=
config
.
GetEndpointsFromTestContainer
(
"
http"
,
config
.
ClusterIP
,
framework
.
ClusterUdpPort
,
config
.
MaxTries
,
0
)
eps
,
err
:=
config
.
GetEndpointsFromTestContainer
(
"
udp"
,
config
.
ClusterIP
,
framework
.
ClusterUdpPort
,
config
.
MaxTries
)
if
err
!=
nil
{
if
err
!=
nil
{
framework
.
Failf
(
"Unable to get endpoints from test containers: %v"
,
err
)
framework
.
Failf
(
"Unable to get endpoints from test containers: %v"
,
err
)
}
}
...
@@ -245,7 +255,6 @@ var _ = SIGDescribe("Networking", func() {
...
@@ -245,7 +255,6 @@ var _ = SIGDescribe("Networking", func() {
framework
.
Failf
(
"Expect endpoints: %v, got: %v"
,
firstEndpoints
,
eps
)
framework
.
Failf
(
"Expect endpoints: %v, got: %v"
,
firstEndpoints
,
eps
)
}
}
}
}
framework
.
Failf
(
"test session affinity, cost time: %v"
,
time
.
Now
()
.
Sub
(
startTime
))
})
})
})
})
})
})
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment