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
06c779c5
Commit
06c779c5
authored
Mar 31, 2022
by
Roberto Bonafiglia
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixed loadbalancer in case of IPv6 addresses
Signed-off-by:
Roberto Bonafiglia
<
roberto.bonafiglia@suse.com
>
parent
b6697414
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
22 additions
and
14 deletions
+22
-14
config.go
pkg/agent/config/config.go
+2
-1
loadbalancer.go
pkg/agent/loadbalancer/loadbalancer.go
+6
-2
loadbalancer_test.go
pkg/agent/loadbalancer/loadbalancer_test.go
+2
-2
apiproxy.go
pkg/agent/proxy/apiproxy.go
+5
-5
run.go
pkg/agent/run.go
+2
-1
cluster.go
pkg/cluster/cluster.go
+3
-1
etcdproxy.go
pkg/etcd/etcdproxy.go
+2
-2
No files found.
pkg/agent/config/config.go
View file @
06c779c5
...
@@ -308,7 +308,8 @@ func get(ctx context.Context, envInfo *cmds.Agent, proxy proxy.Proxy) (*config.N
...
@@ -308,7 +308,8 @@ func get(ctx context.Context, envInfo *cmds.Agent, proxy proxy.Proxy) (*config.N
// If the supervisor and externally-facing apiserver are not on the same port, tell the proxy where to find the apiserver.
// If the supervisor and externally-facing apiserver are not on the same port, tell the proxy where to find the apiserver.
if
controlConfig
.
SupervisorPort
!=
controlConfig
.
HTTPSPort
{
if
controlConfig
.
SupervisorPort
!=
controlConfig
.
HTTPSPort
{
if
err
:=
proxy
.
SetAPIServerPort
(
ctx
,
controlConfig
.
HTTPSPort
);
err
!=
nil
{
_
,
isIPv6
,
_
:=
util
.
GetFirstString
([]
string
{
envInfo
.
NodeIP
.
String
()})
if
err
:=
proxy
.
SetAPIServerPort
(
ctx
,
controlConfig
.
HTTPSPort
,
isIPv6
);
err
!=
nil
{
return
nil
,
errors
.
Wrapf
(
err
,
"failed to setup access to API Server port %d on at %s"
,
controlConfig
.
HTTPSPort
,
proxy
.
SupervisorURL
())
return
nil
,
errors
.
Wrapf
(
err
,
"failed to setup access to API Server port %d on at %s"
,
controlConfig
.
HTTPSPort
,
proxy
.
SupervisorURL
())
}
}
}
}
...
...
pkg/agent/loadbalancer/loadbalancer.go
View file @
06c779c5
...
@@ -40,9 +40,13 @@ var (
...
@@ -40,9 +40,13 @@ var (
ETCDServerServiceName
=
version
.
Program
+
"-etcd-server-load-balancer"
ETCDServerServiceName
=
version
.
Program
+
"-etcd-server-load-balancer"
)
)
func
New
(
ctx
context
.
Context
,
dataDir
,
serviceName
,
serverURL
string
,
lbServerPort
int
)
(
_lb
*
LoadBalancer
,
_err
error
)
{
func
New
(
ctx
context
.
Context
,
dataDir
,
serviceName
,
serverURL
string
,
lbServerPort
int
,
isIPv6
bool
)
(
_lb
*
LoadBalancer
,
_err
error
)
{
config
:=
net
.
ListenConfig
{
Control
:
reusePort
}
config
:=
net
.
ListenConfig
{
Control
:
reusePort
}
listener
,
err
:=
config
.
Listen
(
ctx
,
"tcp"
,
"127.0.0.1:"
+
strconv
.
Itoa
(
lbServerPort
))
localhostAddress
:=
"127.0.0.1"
if
isIPv6
{
localhostAddress
=
"[::1]"
}
listener
,
err
:=
config
.
Listen
(
ctx
,
"tcp"
,
localhostAddress
+
":"
+
strconv
.
Itoa
(
lbServerPort
))
defer
func
()
{
defer
func
()
{
if
_err
!=
nil
{
if
_err
!=
nil
{
logrus
.
Warnf
(
"Error starting load balancer: %s"
,
_err
)
logrus
.
Warnf
(
"Error starting load balancer: %s"
,
_err
)
...
...
pkg/agent/loadbalancer/loadbalancer_test.go
View file @
06c779c5
...
@@ -106,7 +106,7 @@ func Test_UnitFailOver(t *testing.T) {
...
@@ -106,7 +106,7 @@ func Test_UnitFailOver(t *testing.T) {
DataDir
:
tmpDir
,
DataDir
:
tmpDir
,
}
}
lb
,
err
:=
New
(
context
.
TODO
(),
cfg
.
DataDir
,
SupervisorServiceName
,
cfg
.
ServerURL
,
RandomPort
)
lb
,
err
:=
New
(
context
.
TODO
(),
cfg
.
DataDir
,
SupervisorServiceName
,
cfg
.
ServerURL
,
RandomPort
,
false
)
if
err
!=
nil
{
if
err
!=
nil
{
assertEqual
(
t
,
err
,
nil
)
assertEqual
(
t
,
err
,
nil
)
}
}
...
@@ -157,7 +157,7 @@ func Test_UnitFailFast(t *testing.T) {
...
@@ -157,7 +157,7 @@ func Test_UnitFailFast(t *testing.T) {
DataDir
:
tmpDir
,
DataDir
:
tmpDir
,
}
}
lb
,
err
:=
New
(
context
.
TODO
(),
cfg
.
DataDir
,
SupervisorServiceName
,
cfg
.
ServerURL
,
RandomPort
)
lb
,
err
:=
New
(
context
.
TODO
(),
cfg
.
DataDir
,
SupervisorServiceName
,
cfg
.
ServerURL
,
RandomPort
,
false
)
if
err
!=
nil
{
if
err
!=
nil
{
assertEqual
(
t
,
err
,
nil
)
assertEqual
(
t
,
err
,
nil
)
}
}
...
...
pkg/agent/proxy/apiproxy.go
View file @
06c779c5
...
@@ -14,7 +14,7 @@ import (
...
@@ -14,7 +14,7 @@ import (
type
Proxy
interface
{
type
Proxy
interface
{
Update
(
addresses
[]
string
)
Update
(
addresses
[]
string
)
SetAPIServerPort
(
ctx
context
.
Context
,
port
int
)
error
SetAPIServerPort
(
ctx
context
.
Context
,
port
int
,
isIPv6
bool
)
error
SetSupervisorDefault
(
address
string
)
SetSupervisorDefault
(
address
string
)
SupervisorURL
()
string
SupervisorURL
()
string
SupervisorAddresses
()
[]
string
SupervisorAddresses
()
[]
string
...
@@ -29,7 +29,7 @@ type Proxy interface {
...
@@ -29,7 +29,7 @@ type Proxy interface {
// NOTE: This is a proxy in the API sense - it returns either actual server URLs, or the URL of the
// NOTE: This is a proxy in the API sense - it returns either actual server URLs, or the URL of the
// local load-balancer. It is not actually responsible for proxying requests at the network level;
// local load-balancer. It is not actually responsible for proxying requests at the network level;
// this is handled by the load-balancers that the proxy optionally steers connections towards.
// this is handled by the load-balancers that the proxy optionally steers connections towards.
func
NewSupervisorProxy
(
ctx
context
.
Context
,
lbEnabled
bool
,
dataDir
,
supervisorURL
string
,
lbServerPort
int
)
(
Proxy
,
error
)
{
func
NewSupervisorProxy
(
ctx
context
.
Context
,
lbEnabled
bool
,
dataDir
,
supervisorURL
string
,
lbServerPort
int
,
isIPv6
bool
)
(
Proxy
,
error
)
{
p
:=
proxy
{
p
:=
proxy
{
lbEnabled
:
lbEnabled
,
lbEnabled
:
lbEnabled
,
dataDir
:
dataDir
,
dataDir
:
dataDir
,
...
@@ -40,7 +40,7 @@ func NewSupervisorProxy(ctx context.Context, lbEnabled bool, dataDir, supervisor
...
@@ -40,7 +40,7 @@ func NewSupervisorProxy(ctx context.Context, lbEnabled bool, dataDir, supervisor
}
}
if
lbEnabled
{
if
lbEnabled
{
lb
,
err
:=
loadbalancer
.
New
(
ctx
,
dataDir
,
loadbalancer
.
SupervisorServiceName
,
supervisorURL
,
p
.
lbServerPort
)
lb
,
err
:=
loadbalancer
.
New
(
ctx
,
dataDir
,
loadbalancer
.
SupervisorServiceName
,
supervisorURL
,
p
.
lbServerPort
,
isIPv6
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
...
@@ -110,7 +110,7 @@ func (p *proxy) setSupervisorPort(addresses []string) []string {
...
@@ -110,7 +110,7 @@ func (p *proxy) setSupervisorPort(addresses []string) []string {
// load-balancing is enabled, another load-balancer is started on a port one below the supervisor
// load-balancing is enabled, another load-balancer is started on a port one below the supervisor
// load-balancer, and the address of this load-balancer is returned instead of the actual apiserver
// load-balancer, and the address of this load-balancer is returned instead of the actual apiserver
// addresses.
// addresses.
func
(
p
*
proxy
)
SetAPIServerPort
(
ctx
context
.
Context
,
port
int
)
error
{
func
(
p
*
proxy
)
SetAPIServerPort
(
ctx
context
.
Context
,
port
int
,
isIPv6
bool
)
error
{
u
,
err
:=
url
.
Parse
(
p
.
initialSupervisorURL
)
u
,
err
:=
url
.
Parse
(
p
.
initialSupervisorURL
)
if
err
!=
nil
{
if
err
!=
nil
{
return
errors
.
Wrapf
(
err
,
"failed to parse server URL %s"
,
p
.
initialSupervisorURL
)
return
errors
.
Wrapf
(
err
,
"failed to parse server URL %s"
,
p
.
initialSupervisorURL
)
...
@@ -125,7 +125,7 @@ func (p *proxy) SetAPIServerPort(ctx context.Context, port int) error {
...
@@ -125,7 +125,7 @@ func (p *proxy) SetAPIServerPort(ctx context.Context, port int) error {
if
lbServerPort
!=
0
{
if
lbServerPort
!=
0
{
lbServerPort
=
lbServerPort
-
1
lbServerPort
=
lbServerPort
-
1
}
}
lb
,
err
:=
loadbalancer
.
New
(
ctx
,
p
.
dataDir
,
loadbalancer
.
APIServerServiceName
,
p
.
apiServerURL
,
lbServerPort
)
lb
,
err
:=
loadbalancer
.
New
(
ctx
,
p
.
dataDir
,
loadbalancer
.
APIServerServiceName
,
p
.
apiServerURL
,
lbServerPort
,
isIPv6
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
...
...
pkg/agent/run.go
View file @
06c779c5
...
@@ -239,8 +239,9 @@ func createProxyAndValidateToken(ctx context.Context, cfg *cmds.Agent) (proxy.Pr
...
@@ -239,8 +239,9 @@ func createProxyAndValidateToken(ctx context.Context, cfg *cmds.Agent) (proxy.Pr
if
err
:=
os
.
MkdirAll
(
agentDir
,
0700
);
err
!=
nil
{
if
err
:=
os
.
MkdirAll
(
agentDir
,
0700
);
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
_
,
isIPv6
,
_
:=
util
.
GetFirstString
([]
string
{
cfg
.
NodeIP
.
String
()})
proxy
,
err
:=
proxy
.
NewSupervisorProxy
(
ctx
,
!
cfg
.
DisableLoadBalancer
,
agentDir
,
cfg
.
ServerURL
,
cfg
.
LBServerPort
)
proxy
,
err
:=
proxy
.
NewSupervisorProxy
(
ctx
,
!
cfg
.
DisableLoadBalancer
,
agentDir
,
cfg
.
ServerURL
,
cfg
.
LBServerPort
,
isIPv6
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
...
...
pkg/cluster/cluster.go
View file @
06c779c5
...
@@ -10,6 +10,7 @@ import (
...
@@ -10,6 +10,7 @@ import (
"github.com/k3s-io/k3s/pkg/cluster/managed"
"github.com/k3s-io/k3s/pkg/cluster/managed"
"github.com/k3s-io/k3s/pkg/daemons/config"
"github.com/k3s-io/k3s/pkg/daemons/config"
"github.com/k3s-io/k3s/pkg/etcd"
"github.com/k3s-io/k3s/pkg/etcd"
"github.com/k3s-io/k3s/pkg/util"
"github.com/k3s-io/kine/pkg/endpoint"
"github.com/k3s-io/kine/pkg/endpoint"
"github.com/pkg/errors"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
"github.com/sirupsen/logrus"
...
@@ -52,7 +53,8 @@ func (c *Cluster) Start(ctx context.Context) (<-chan struct{}, error) {
...
@@ -52,7 +53,8 @@ func (c *Cluster) Start(ctx context.Context) (<-chan struct{}, error) {
clientURL
.
Host
=
clientURL
.
Hostname
()
+
":2379"
clientURL
.
Host
=
clientURL
.
Hostname
()
+
":2379"
clientURLs
=
append
(
clientURLs
,
clientURL
.
String
())
clientURLs
=
append
(
clientURLs
,
clientURL
.
String
())
}
}
etcdProxy
,
err
:=
etcd
.
NewETCDProxy
(
ctx
,
true
,
c
.
config
.
DataDir
,
clientURLs
[
0
])
IPv6OnlyService
,
_
:=
util
.
IsIPv6OnlyCIDRs
(
c
.
config
.
ServiceIPRanges
)
etcdProxy
,
err
:=
etcd
.
NewETCDProxy
(
ctx
,
true
,
c
.
config
.
DataDir
,
clientURLs
[
0
],
IPv6OnlyService
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
...
...
pkg/etcd/etcdproxy.go
View file @
06c779c5
...
@@ -17,7 +17,7 @@ type Proxy interface {
...
@@ -17,7 +17,7 @@ type Proxy interface {
// NewETCDProxy initializes a new proxy structure that contain a load balancer
// NewETCDProxy initializes a new proxy structure that contain a load balancer
// which listens on port 2379 and proxy between etcd cluster members
// which listens on port 2379 and proxy between etcd cluster members
func
NewETCDProxy
(
ctx
context
.
Context
,
enabled
bool
,
dataDir
,
etcdURL
string
)
(
Proxy
,
error
)
{
func
NewETCDProxy
(
ctx
context
.
Context
,
enabled
bool
,
dataDir
,
etcdURL
string
,
isIPv6
bool
)
(
Proxy
,
error
)
{
u
,
err
:=
url
.
Parse
(
etcdURL
)
u
,
err
:=
url
.
Parse
(
etcdURL
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
errors
.
Wrap
(
err
,
"failed to parse etcd client URL"
)
return
nil
,
errors
.
Wrap
(
err
,
"failed to parse etcd client URL"
)
...
@@ -30,7 +30,7 @@ func NewETCDProxy(ctx context.Context, enabled bool, dataDir, etcdURL string) (P
...
@@ -30,7 +30,7 @@ func NewETCDProxy(ctx context.Context, enabled bool, dataDir, etcdURL string) (P
}
}
if
enabled
{
if
enabled
{
lb
,
err
:=
loadbalancer
.
New
(
ctx
,
dataDir
,
loadbalancer
.
ETCDServerServiceName
,
etcdURL
,
2379
)
lb
,
err
:=
loadbalancer
.
New
(
ctx
,
dataDir
,
loadbalancer
.
ETCDServerServiceName
,
etcdURL
,
2379
,
isIPv6
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
...
...
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