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
24b73403
Commit
24b73403
authored
Jun 30, 2019
by
Erik Wilson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Cleanup bootstrap
parent
8d979d67
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
90 additions
and
47 deletions
+90
-47
server.go
pkg/cli/cmds/server.go
+4
-4
server.go
pkg/cli/server/server.go
+1
-1
types.go
pkg/daemons/config/types.go
+1
-1
bootstrap.go
pkg/daemons/control/bootstrap.go
+82
-39
server.go
pkg/daemons/control/server.go
+2
-2
No files found.
pkg/cli/cmds/server.go
View file @
24b73403
...
...
@@ -23,7 +23,7 @@ type Server struct {
ExtraSchedulerArgs
cli
.
StringSlice
ExtraControllerArgs
cli
.
StringSlice
Rootless
bool
CertStorageBackend
string
BootstrapType
string
StorageBackend
string
StorageEndpoint
string
StorageCAFile
string
...
...
@@ -146,9 +146,9 @@ func NewServerCommand(action func(*cli.Context) error) cli.Command {
Destination
:
&
ServerConfig
.
Rootless
,
},
cli
.
StringFlag
{
Name
:
"
cert-storage-backend
"
,
Usage
:
"(experimental) Specify
storage type for storing certificate information
"
,
Destination
:
&
ServerConfig
.
CertStorageBackend
,
Name
:
"
bootstrap
"
,
Usage
:
"(experimental) Specify
data bootstrap behavior (one of: none, read, write, or full), etcd3 only
"
,
Destination
:
&
ServerConfig
.
BootstrapType
,
},
cli
.
StringFlag
{
Name
:
"storage-backend"
,
...
...
pkg/cli/server/server.go
View file @
24b73403
...
...
@@ -124,7 +124,7 @@ func run(app *cli.Context, cfg *cmds.Server) error {
serverConfig
.
ControlConfig
.
StorageKeyFile
=
cfg
.
StorageKeyFile
serverConfig
.
ControlConfig
.
AdvertiseIP
=
cfg
.
AdvertiseIP
serverConfig
.
ControlConfig
.
AdvertisePort
=
cfg
.
AdvertisePort
serverConfig
.
ControlConfig
.
CertStorageBackend
=
cfg
.
CertStorageBackend
serverConfig
.
ControlConfig
.
BootstrapType
=
cfg
.
BootstrapType
if
serverConfig
.
ControlConfig
.
AdvertiseIP
==
""
&&
cmds
.
AgentConfig
.
NodeIP
!=
""
{
serverConfig
.
ControlConfig
.
AdvertiseIP
=
cmds
.
AgentConfig
.
NodeIP
...
...
pkg/daemons/config/types.go
View file @
24b73403
...
...
@@ -81,7 +81,7 @@ type Control struct {
KubeConfigMode
string
DataDir
string
Skips
[]
string
CertStorageBackend
string
BootstrapType
string
StorageBackend
string
StorageEndpoint
string
StorageCAFile
string
...
...
pkg/daemons/control/
ha
.go
→
pkg/daemons/control/
bootstrap
.go
View file @
24b73403
...
...
@@ -5,6 +5,8 @@ import (
"crypto/tls"
"crypto/x509"
"encoding/json"
"errors"
"fmt"
"io/ioutil"
"os"
"strings"
...
...
@@ -13,15 +15,20 @@ import (
"encoding/base64"
"github.com/rancher/k3s/pkg/daemons/config"
"github.com/sirupsen/logrus"
"go.etcd.io/etcd/clientv3"
)
const
(
etcdDialTimeout
=
5
*
time
.
Second
k3sRuntimeEtcdPath
=
"/k3s/runtime"
bootstrapTypeNone
=
"none"
bootstrapTypeRead
=
"read"
bootstrapTypeWrite
=
"write"
bootstrapTypeFull
=
"full"
)
type
server
HA
struct
{
type
server
Bootstrap
struct
{
ServerCAData
string
`json:"serverCAData,omitempty"`
ServerCAKeyData
string
`json:"serverCAKeyData,omitempty"`
ClientCAData
string
`json:"clientCAData,omitempty"`
...
...
@@ -32,11 +39,24 @@ type serverHA struct {
RequestHeaderCAKeyData
string
`json:"requestHeaderCAKeyData,omitempty"`
}
func
setHAData
(
cfg
*
config
.
Control
)
error
{
if
cfg
.
StorageBackend
!=
"etcd3"
||
cfg
.
CertStorageBackend
!=
"etcd3"
{
var
validBootstrapTypes
=
map
[
string
]
bool
{
bootstrapTypeRead
:
true
,
bootstrapTypeWrite
:
true
,
bootstrapTypeFull
:
true
,
}
func
fetchBootstrapData
(
cfg
*
config
.
Control
)
error
{
if
valid
,
err
:=
checkBootstrapArgs
(
cfg
,
map
[
string
]
bool
{
bootstrapTypeFull
:
true
,
bootstrapTypeRead
:
true
,
});
!
valid
{
if
err
!=
nil
{
logrus
.
Warnf
(
"Not fetching bootstrap data: %v"
,
err
)
}
return
nil
}
tlsConfig
,
err
:=
genTLSConfig
(
cfg
)
tlsConfig
,
err
:=
genBootstrapTLSConfig
(
cfg
)
if
err
!=
nil
{
return
err
}
...
...
@@ -56,29 +76,33 @@ func setHAData(cfg *config.Control) error {
if
err
!=
nil
{
return
err
}
if
len
(
gr
.
Kvs
)
>
0
&&
string
(
gr
.
Kvs
[
0
]
.
Value
)
!=
""
{
if
len
(
gr
.
Kvs
)
==
0
{
return
nil
}
certData
,
err
:=
readRuntimeCertData
(
cfg
.
Runtime
)
runtimeJSON
,
err
:=
base64
.
URLEncoding
.
DecodeString
(
string
(
gr
.
Kvs
[
0
]
.
Value
))
if
err
!=
nil
{
return
err
}
runtimeBase64
:=
base64
.
StdEncoding
.
EncodeToString
(
certData
)
_
,
err
=
cli
.
Put
(
context
.
TODO
(),
k3sRuntimeEtcdPath
,
runtimeBase64
)
if
err
!=
nil
{
serverRuntime
:=
&
serverBootstrap
{}
if
err
:=
json
.
Unmarshal
(
runtimeJSON
,
serverRuntime
);
err
!=
nil
{
return
err
}
return
nil
return
writeRuntimeBootstrapData
(
cfg
.
Runtime
,
serverRuntime
)
}
func
getHAData
(
cfg
*
config
.
Control
)
error
{
serverRuntime
:=
&
serverHA
{}
if
cfg
.
StorageBackend
!=
"etcd3"
||
cfg
.
CertStorageBackend
!=
"etcd3"
{
func
storeBootstrapData
(
cfg
*
config
.
Control
)
error
{
if
valid
,
err
:=
checkBootstrapArgs
(
cfg
,
map
[
string
]
bool
{
bootstrapTypeFull
:
true
,
bootstrapTypeWrite
:
true
,
});
!
valid
{
if
err
!=
nil
{
logrus
.
Warnf
(
"Not storing boostrap data: %v"
,
err
)
}
return
nil
}
tlsConfig
,
err
:=
genTLSConfig
(
cfg
)
tlsConfig
,
err
:=
genBootstrapTLSConfig
(
cfg
)
if
err
!=
nil
{
return
err
}
...
...
@@ -98,21 +122,40 @@ func getHAData(cfg *config.Control) error {
if
err
!=
nil
{
return
err
}
if
len
(
gr
.
Kvs
)
==
0
{
if
len
(
gr
.
Kvs
)
>
0
&&
string
(
gr
.
Kvs
[
0
]
.
Value
)
!=
""
{
return
nil
}
runtimeJSON
,
err
:=
base64
.
URLEncoding
.
DecodeString
(
string
(
gr
.
Kvs
[
0
]
.
Value
))
certData
,
err
:=
readRuntimeBootstrapData
(
cfg
.
Runtime
)
if
err
!=
nil
{
return
err
}
if
err
:=
json
.
Unmarshal
(
runtimeJSON
,
serverRuntime
);
err
!=
nil
{
runtimeBase64
:=
base64
.
StdEncoding
.
EncodeToString
(
certData
)
_
,
err
=
cli
.
Put
(
context
.
TODO
(),
k3sRuntimeEtcdPath
,
runtimeBase64
)
if
err
!=
nil
{
return
err
}
return
writeRuntimeCertData
(
cfg
.
Runtime
,
serverRuntime
)
return
nil
}
func
checkBootstrapArgs
(
cfg
*
config
.
Control
,
accepted
map
[
string
]
bool
)
(
bool
,
error
)
{
if
cfg
.
BootstrapType
==
""
||
cfg
.
BootstrapType
==
bootstrapTypeNone
{
return
false
,
nil
}
if
!
validBootstrapTypes
[
cfg
.
BootstrapType
]
{
return
false
,
fmt
.
Errorf
(
"unsupported bootstrap type [%s]"
,
cfg
.
BootstrapType
)
}
if
cfg
.
StorageBackend
!=
"etcd3"
{
return
false
,
errors
.
New
(
"bootstrap only supported with etcd3 as storage backend"
)
}
if
!
accepted
[
cfg
.
BootstrapType
]
{
return
false
,
nil
}
return
true
,
nil
}
func
genTLSConfig
(
cfg
*
config
.
Control
)
(
*
tls
.
Config
,
error
)
{
func
gen
Bootstrap
TLSConfig
(
cfg
*
config
.
Control
)
(
*
tls
.
Config
,
error
)
{
tlsConfig
:=
&
tls
.
Config
{}
if
cfg
.
StorageCertFile
!=
""
&&
cfg
.
StorageKeyFile
!=
""
{
certPem
,
err
:=
ioutil
.
ReadFile
(
cfg
.
StorageCertFile
)
...
...
@@ -141,8 +184,8 @@ func genTLSConfig(cfg *config.Control) (*tls.Config, error) {
return
tlsConfig
,
nil
}
func
readRuntime
Cert
Data
(
runtime
*
config
.
ControlRuntime
)
([]
byte
,
error
)
{
server
HACert
s
:=
map
[
string
]
string
{
func
readRuntime
Bootstrap
Data
(
runtime
*
config
.
ControlRuntime
)
([]
byte
,
error
)
{
server
BootstrapFile
s
:=
map
[
string
]
string
{
runtime
.
ServerCA
:
""
,
runtime
.
ServerCAKey
:
""
,
runtime
.
ClientCA
:
""
,
...
...
@@ -152,27 +195,27 @@ func readRuntimeCertData(runtime *config.ControlRuntime) ([]byte, error) {
runtime
.
RequestHeaderCA
:
""
,
runtime
.
RequestHeaderCAKey
:
""
,
}
for
k
:=
range
server
HACert
s
{
for
k
:=
range
server
BootstrapFile
s
{
data
,
err
:=
ioutil
.
ReadFile
(
k
)
if
err
!=
nil
{
return
nil
,
err
}
server
HACert
s
[
k
]
=
string
(
data
)
}
server
HACertsData
:=
&
serverHA
{
ServerCAData
:
server
HACert
s
[
runtime
.
ServerCA
],
ServerCAKeyData
:
server
HACert
s
[
runtime
.
ServerCAKey
],
ClientCAData
:
server
HACert
s
[
runtime
.
ClientCA
],
ClientCAKeyData
:
server
HACert
s
[
runtime
.
ClientCAKey
],
ServiceKeyData
:
server
HACert
s
[
runtime
.
ServiceKey
],
PasswdFileData
:
server
HACert
s
[
runtime
.
PasswdFile
],
RequestHeaderCAData
:
server
HACert
s
[
runtime
.
RequestHeaderCA
],
RequestHeaderCAKeyData
:
server
HACert
s
[
runtime
.
RequestHeaderCAKey
],
}
return
json
.
Marshal
(
server
HACerts
Data
)
server
BootstrapFile
s
[
k
]
=
string
(
data
)
}
server
BootstrapFileData
:=
&
serverBootstrap
{
ServerCAData
:
server
BootstrapFile
s
[
runtime
.
ServerCA
],
ServerCAKeyData
:
server
BootstrapFile
s
[
runtime
.
ServerCAKey
],
ClientCAData
:
server
BootstrapFile
s
[
runtime
.
ClientCA
],
ClientCAKeyData
:
server
BootstrapFile
s
[
runtime
.
ClientCAKey
],
ServiceKeyData
:
server
BootstrapFile
s
[
runtime
.
ServiceKey
],
PasswdFileData
:
server
BootstrapFile
s
[
runtime
.
PasswdFile
],
RequestHeaderCAData
:
server
BootstrapFile
s
[
runtime
.
RequestHeaderCA
],
RequestHeaderCAKeyData
:
server
BootstrapFile
s
[
runtime
.
RequestHeaderCAKey
],
}
return
json
.
Marshal
(
server
BootstrapFile
Data
)
}
func
writeRuntime
CertData
(
runtime
*
config
.
ControlRuntime
,
runtimeData
*
serverHA
)
error
{
func
writeRuntime
BootstrapData
(
runtime
*
config
.
ControlRuntime
,
runtimeData
*
serverBootstrap
)
error
{
runtimePathValue
:=
map
[
string
]
string
{
runtime
.
ServerCA
:
runtimeData
.
ServerCAData
,
runtime
.
ServerCAKey
:
runtimeData
.
ServerCAKeyData
,
...
...
pkg/daemons/control/server.go
View file @
24b73403
...
...
@@ -290,7 +290,7 @@ func prepare(config *config.Control, runtime *config.ControlRuntime) error {
runtime
.
ClientAuthProxyCert
=
path
.
Join
(
config
.
DataDir
,
"tls"
,
"client-auth-proxy.crt"
)
runtime
.
ClientAuthProxyKey
=
path
.
Join
(
config
.
DataDir
,
"tls"
,
"client-auth-proxy.key"
)
if
err
:=
getHA
Data
(
config
);
err
!=
nil
{
if
err
:=
fetchBootstrap
Data
(
config
);
err
!=
nil
{
return
err
}
...
...
@@ -306,7 +306,7 @@ func prepare(config *config.Control, runtime *config.ControlRuntime) error {
return
err
}
if
err
:=
s
etHA
Data
(
config
);
err
!=
nil
{
if
err
:=
s
toreBootstrap
Data
(
config
);
err
!=
nil
{
return
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