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
1230d7b7
Commit
1230d7b7
authored
Dec 10, 2020
by
Erik Wilson
Committed by
Brad Davidson
Dec 15, 2020
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix HA server initialization
Signed-off-by:
Erik Wilson
<
Erik.E.Wilson@gmail.com
>
parent
8e4d3e64
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
54 additions
and
30 deletions
+54
-30
router.go
pkg/server/router.go
+36
-14
server.go
pkg/server/server.go
+18
-16
No files found.
pkg/server/router.go
View file @
1230d7b7
...
@@ -26,18 +26,13 @@ const (
...
@@ -26,18 +26,13 @@ const (
staticURL
=
"/static/"
staticURL
=
"/static/"
)
)
func
router
(
serverConfig
*
config
.
Control
,
tunnel
http
.
Handler
,
secretClient
coreclient
.
SecretClient
)
(
http
.
Handler
,
error
)
{
func
router
(
serverConfig
*
config
.
Control
)
http
.
Handler
{
ca
,
err
:=
ioutil
.
ReadFile
(
serverConfig
.
Runtime
.
ServerCA
)
if
err
!=
nil
{
return
nil
,
err
}
prefix
:=
"/v1-"
+
version
.
Program
prefix
:=
"/v1-"
+
version
.
Program
authed
:=
mux
.
NewRouter
()
authed
:=
mux
.
NewRouter
()
authed
.
Use
(
authMiddleware
(
serverConfig
,
version
.
Program
+
":agent"
))
authed
.
Use
(
authMiddleware
(
serverConfig
,
version
.
Program
+
":agent"
))
authed
.
NotFoundHandler
=
serverConfig
.
Runtime
.
Handler
authed
.
NotFoundHandler
=
serverConfig
.
Runtime
.
Handler
authed
.
Path
(
prefix
+
"/serving-kubelet.crt"
)
.
Handler
(
servingKubeletCert
(
serverConfig
,
serverConfig
.
Runtime
.
ServingKubeletKey
,
se
cretClient
))
authed
.
Path
(
prefix
+
"/serving-kubelet.crt"
)
.
Handler
(
servingKubeletCert
(
serverConfig
,
serverConfig
.
Runtime
.
ServingKubeletKey
,
se
rverConfig
.
Runtime
))
authed
.
Path
(
prefix
+
"/client-kubelet.crt"
)
.
Handler
(
clientKubeletCert
(
serverConfig
,
serverConfig
.
Runtime
.
ClientKubeletKey
,
se
cretClient
))
authed
.
Path
(
prefix
+
"/client-kubelet.crt"
)
.
Handler
(
clientKubeletCert
(
serverConfig
,
serverConfig
.
Runtime
.
ClientKubeletKey
,
se
rverConfig
.
Runtime
))
authed
.
Path
(
prefix
+
"/client-kube-proxy.crt"
)
.
Handler
(
fileHandler
(
serverConfig
.
Runtime
.
ClientKubeProxyCert
,
serverConfig
.
Runtime
.
ClientKubeProxyKey
))
authed
.
Path
(
prefix
+
"/client-kube-proxy.crt"
)
.
Handler
(
fileHandler
(
serverConfig
.
Runtime
.
ClientKubeProxyCert
,
serverConfig
.
Runtime
.
ClientKubeProxyKey
))
authed
.
Path
(
prefix
+
"/client-"
+
version
.
Program
+
"-controller.crt"
)
.
Handler
(
fileHandler
(
serverConfig
.
Runtime
.
ClientK3sControllerCert
,
serverConfig
.
Runtime
.
ClientK3sControllerKey
))
authed
.
Path
(
prefix
+
"/client-"
+
version
.
Program
+
"-controller.crt"
)
.
Handler
(
fileHandler
(
serverConfig
.
Runtime
.
ClientK3sControllerCert
,
serverConfig
.
Runtime
.
ClientK3sControllerKey
))
authed
.
Path
(
prefix
+
"/client-ca.crt"
)
.
Handler
(
fileHandler
(
serverConfig
.
Runtime
.
ClientCA
))
authed
.
Path
(
prefix
+
"/client-ca.crt"
)
.
Handler
(
fileHandler
(
serverConfig
.
Runtime
.
ClientCA
))
...
@@ -46,7 +41,7 @@ func router(serverConfig *config.Control, tunnel http.Handler, secretClient core
...
@@ -46,7 +41,7 @@ func router(serverConfig *config.Control, tunnel http.Handler, secretClient core
nodeAuthed
:=
mux
.
NewRouter
()
nodeAuthed
:=
mux
.
NewRouter
()
nodeAuthed
.
Use
(
authMiddleware
(
serverConfig
,
"system:nodes"
))
nodeAuthed
.
Use
(
authMiddleware
(
serverConfig
,
"system:nodes"
))
nodeAuthed
.
Path
(
prefix
+
"/connect"
)
.
Handler
(
t
unnel
)
nodeAuthed
.
Path
(
prefix
+
"/connect"
)
.
Handler
(
serverConfig
.
Runtime
.
T
unnel
)
nodeAuthed
.
NotFoundHandler
=
authed
nodeAuthed
.
NotFoundHandler
=
authed
serverAuthed
:=
mux
.
NewRouter
()
serverAuthed
:=
mux
.
NewRouter
()
...
@@ -61,14 +56,23 @@ func router(serverConfig *config.Control, tunnel http.Handler, secretClient core
...
@@ -61,14 +56,23 @@ func router(serverConfig *config.Control, tunnel http.Handler, secretClient core
router
:=
mux
.
NewRouter
()
router
:=
mux
.
NewRouter
()
router
.
NotFoundHandler
=
serverAuthed
router
.
NotFoundHandler
=
serverAuthed
router
.
PathPrefix
(
staticURL
)
.
Handler
(
serveStatic
(
staticURL
,
staticDir
))
router
.
PathPrefix
(
staticURL
)
.
Handler
(
serveStatic
(
staticURL
,
staticDir
))
router
.
Path
(
"/cacerts"
)
.
Handler
(
cacerts
(
ca
))
router
.
Path
(
"/cacerts"
)
.
Handler
(
cacerts
(
serverConfig
.
Runtime
.
ServerCA
))
router
.
Path
(
"/ping"
)
.
Handler
(
ping
())
router
.
Path
(
"/ping"
)
.
Handler
(
ping
())
return
router
,
nil
return
router
}
}
func
cacerts
(
ca
[]
byte
)
http
.
Handler
{
func
cacerts
(
serverCA
string
)
http
.
Handler
{
var
ca
[]
byte
return
http
.
HandlerFunc
(
func
(
resp
http
.
ResponseWriter
,
req
*
http
.
Request
)
{
return
http
.
HandlerFunc
(
func
(
resp
http
.
ResponseWriter
,
req
*
http
.
Request
)
{
if
ca
==
nil
{
var
err
error
ca
,
err
=
ioutil
.
ReadFile
(
serverCA
)
if
err
!=
nil
{
sendError
(
err
,
resp
)
return
}
}
resp
.
Header
()
.
Set
(
"content-type"
,
"text/plain"
)
resp
.
Header
()
.
Set
(
"content-type"
,
"text/plain"
)
resp
.
Write
(
ca
)
resp
.
Write
(
ca
)
})
})
...
@@ -122,8 +126,17 @@ func getCACertAndKeys(caCertFile, caKeyFile, signingKeyFile string) ([]*x509.Cer
...
@@ -122,8 +126,17 @@ func getCACertAndKeys(caCertFile, caKeyFile, signingKeyFile string) ([]*x509.Cer
return
caCert
,
caKey
.
(
crypto
.
Signer
),
key
.
(
crypto
.
Signer
),
nil
return
caCert
,
caKey
.
(
crypto
.
Signer
),
key
.
(
crypto
.
Signer
),
nil
}
}
func
servingKubeletCert
(
server
*
config
.
Control
,
keyFile
string
,
secretClient
coreclient
.
SecretClient
)
http
.
Handler
{
func
servingKubeletCert
(
server
*
config
.
Control
,
keyFile
string
,
runtime
*
config
.
ControlRuntime
)
http
.
Handler
{
var
secretClient
coreclient
.
SecretClient
return
http
.
HandlerFunc
(
func
(
resp
http
.
ResponseWriter
,
req
*
http
.
Request
)
{
return
http
.
HandlerFunc
(
func
(
resp
http
.
ResponseWriter
,
req
*
http
.
Request
)
{
if
secretClient
==
nil
{
if
runtime
.
Core
==
nil
{
sendError
(
errors
.
New
(
"runtime core not ready"
),
resp
)
return
}
secretClient
=
runtime
.
Core
.
Core
()
.
V1
()
.
Secret
()
}
if
req
.
TLS
==
nil
{
if
req
.
TLS
==
nil
{
resp
.
WriteHeader
(
http
.
StatusNotFound
)
resp
.
WriteHeader
(
http
.
StatusNotFound
)
return
return
...
@@ -175,8 +188,17 @@ func servingKubeletCert(server *config.Control, keyFile string, secretClient cor
...
@@ -175,8 +188,17 @@ func servingKubeletCert(server *config.Control, keyFile string, secretClient cor
})
})
}
}
func
clientKubeletCert
(
server
*
config
.
Control
,
keyFile
string
,
secretClient
coreclient
.
SecretClient
)
http
.
Handler
{
func
clientKubeletCert
(
server
*
config
.
Control
,
keyFile
string
,
runtime
*
config
.
ControlRuntime
)
http
.
Handler
{
var
secretClient
coreclient
.
SecretClient
return
http
.
HandlerFunc
(
func
(
resp
http
.
ResponseWriter
,
req
*
http
.
Request
)
{
return
http
.
HandlerFunc
(
func
(
resp
http
.
ResponseWriter
,
req
*
http
.
Request
)
{
if
secretClient
==
nil
{
if
runtime
.
Core
==
nil
{
sendError
(
errors
.
New
(
"runtime core not ready"
),
resp
)
return
}
secretClient
=
runtime
.
Core
.
Core
()
.
V1
()
.
Secret
()
}
if
req
.
TLS
==
nil
{
if
req
.
TLS
==
nil
{
resp
.
WriteHeader
(
http
.
StatusNotFound
)
resp
.
WriteHeader
(
http
.
StatusNotFound
)
return
return
...
...
pkg/server/server.go
View file @
1230d7b7
...
@@ -60,6 +60,8 @@ func StartServer(ctx context.Context, config *Config) error {
...
@@ -60,6 +60,8 @@ func StartServer(ctx context.Context, config *Config) error {
return
errors
.
Wrap
(
err
,
"starting kubernetes"
)
return
errors
.
Wrap
(
err
,
"starting kubernetes"
)
}
}
config
.
ControlConfig
.
Runtime
.
Handler
=
router
(
&
config
.
ControlConfig
)
go
startOnAPIServerReady
(
ctx
,
config
)
go
startOnAPIServerReady
(
ctx
,
config
)
for
_
,
hook
:=
range
config
.
StartupHooks
{
for
_
,
hook
:=
range
config
.
StartupHooks
{
...
@@ -108,9 +110,17 @@ func runControllers(ctx context.Context, config *Config) error {
...
@@ -108,9 +110,17 @@ func runControllers(ctx context.Context, config *Config) error {
return
err
return
err
}
}
// run migration before we set controlConfig.Runtime.Core
if
err
:=
nodepassword
.
MigrateFile
(
sc
.
Core
.
Core
()
.
V1
()
.
Secret
(),
sc
.
Core
.
Core
()
.
V1
()
.
Node
(),
controlConfig
.
Runtime
.
NodePasswdFile
);
err
!=
nil
{
logrus
.
Warn
(
errors
.
Wrapf
(
err
,
"error migrating node-password file"
))
}
controlConfig
.
Runtime
.
Core
=
sc
.
Core
controlConfig
.
Runtime
.
Core
=
sc
.
Core
if
config
.
ControlConfig
.
Runtime
.
ClusterControllerStart
!=
nil
{
if
err
:=
config
.
ControlConfig
.
Runtime
.
ClusterControllerStart
(
ctx
);
err
!=
nil
{
if
controlConfig
.
Runtime
.
ClusterControllerStart
!=
nil
{
if
err
:=
controlConfig
.
Runtime
.
ClusterControllerStart
(
ctx
);
err
!=
nil
{
return
errors
.
Wrapf
(
err
,
"starting cluster controllers"
)
return
errors
.
Wrapf
(
err
,
"starting cluster controllers"
)
}
}
}
}
...
@@ -126,11 +136,6 @@ func runControllers(ctx context.Context, config *Config) error {
...
@@ -126,11 +136,6 @@ func runControllers(ctx context.Context, config *Config) error {
if
err
:=
sc
.
Start
(
ctx
);
err
!=
nil
{
if
err
:=
sc
.
Start
(
ctx
);
err
!=
nil
{
panic
(
err
)
panic
(
err
)
}
}
handler
,
err
:=
router
(
controlConfig
,
controlConfig
.
Runtime
.
Tunnel
,
sc
.
Core
.
Core
()
.
V1
()
.
Secret
())
if
err
!=
nil
{
panic
(
errors
.
Wrap
(
err
,
"starting router"
))
}
controlConfig
.
Runtime
.
Handler
=
handler
}
}
if
!
config
.
DisableAgent
{
if
!
config
.
DisableAgent
{
go
setControlPlaneRoleLabel
(
ctx
,
sc
.
Core
.
Core
()
.
V1
()
.
Node
())
go
setControlPlaneRoleLabel
(
ctx
,
sc
.
Core
.
Core
()
.
V1
()
.
Node
())
...
@@ -152,13 +157,6 @@ func runControllers(ctx context.Context, config *Config) error {
...
@@ -152,13 +157,6 @@ func runControllers(ctx context.Context, config *Config) error {
}
}
func
coreControllers
(
ctx
context
.
Context
,
sc
*
Context
,
config
*
Config
)
error
{
func
coreControllers
(
ctx
context
.
Context
,
sc
*
Context
,
config
*
Config
)
error
{
if
err
:=
nodepassword
.
MigrateFile
(
sc
.
Core
.
Core
()
.
V1
()
.
Secret
(),
sc
.
Core
.
Core
()
.
V1
()
.
Node
(),
config
.
ControlConfig
.
Runtime
.
NodePasswdFile
);
err
!=
nil
{
logrus
.
Warn
(
errors
.
Wrapf
(
err
,
"error migrating node-password file"
))
}
if
err
:=
node
.
Register
(
ctx
,
if
err
:=
node
.
Register
(
ctx
,
!
config
.
ControlConfig
.
Skips
[
"coredns"
],
!
config
.
ControlConfig
.
Skips
[
"coredns"
],
sc
.
Core
.
Core
()
.
V1
()
.
Secret
(),
sc
.
Core
.
Core
()
.
V1
()
.
Secret
(),
...
@@ -425,6 +423,11 @@ func isSymlink(config string) bool {
...
@@ -425,6 +423,11 @@ func isSymlink(config string) bool {
func
setControlPlaneRoleLabel
(
ctx
context
.
Context
,
nodes
v1
.
NodeClient
)
error
{
func
setControlPlaneRoleLabel
(
ctx
context
.
Context
,
nodes
v1
.
NodeClient
)
error
{
for
{
for
{
nodeName
:=
os
.
Getenv
(
"NODE_NAME"
)
nodeName
:=
os
.
Getenv
(
"NODE_NAME"
)
if
nodeName
==
""
{
logrus
.
Info
(
"Waiting for control-plane node agent startup"
)
time
.
Sleep
(
1
*
time
.
Second
)
continue
}
node
,
err
:=
nodes
.
Get
(
nodeName
,
metav1
.
GetOptions
{})
node
,
err
:=
nodes
.
Get
(
nodeName
,
metav1
.
GetOptions
{})
if
err
!=
nil
{
if
err
!=
nil
{
logrus
.
Infof
(
"Waiting for control-plane node %s startup: %v"
,
nodeName
,
err
)
logrus
.
Infof
(
"Waiting for control-plane node %s startup: %v"
,
nodeName
,
err
)
...
@@ -454,7 +457,6 @@ func setControlPlaneRoleLabel(ctx context.Context, nodes v1.NodeClient) error {
...
@@ -454,7 +457,6 @@ func setControlPlaneRoleLabel(ctx context.Context, nodes v1.NodeClient) error {
}
}
func
setClusterDNSConfig
(
ctx
context
.
Context
,
controlConfig
*
Config
,
configMap
v1
.
ConfigMapClient
)
error
{
func
setClusterDNSConfig
(
ctx
context
.
Context
,
controlConfig
*
Config
,
configMap
v1
.
ConfigMapClient
)
error
{
nodeName
:=
os
.
Getenv
(
"NODE_NAME"
)
// check if configmap already exists
// check if configmap already exists
_
,
err
:=
configMap
.
Get
(
"kube-system"
,
"cluster-dns"
,
metav1
.
GetOptions
{})
_
,
err
:=
configMap
.
Get
(
"kube-system"
,
"cluster-dns"
,
metav1
.
GetOptions
{})
if
err
==
nil
{
if
err
==
nil
{
...
@@ -483,7 +485,7 @@ func setClusterDNSConfig(ctx context.Context, controlConfig *Config, configMap v
...
@@ -483,7 +485,7 @@ func setClusterDNSConfig(ctx context.Context, controlConfig *Config, configMap v
logrus
.
Infof
(
"Cluster dns configmap has been set successfully"
)
logrus
.
Infof
(
"Cluster dns configmap has been set successfully"
)
break
break
}
}
logrus
.
Infof
(
"Waiting for control-plane
node %s startup: %v"
,
nodeName
,
err
)
logrus
.
Infof
(
"Waiting for control-plane
dns startup: %v"
,
err
)
select
{
select
{
case
<-
ctx
.
Done
()
:
case
<-
ctx
.
Done
()
:
...
...
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