Skip to content

Commit 46f7318

Browse files
committed
Refactoring and bugfixing
- Small refactorings - Bugfixing azure client - Implement kubernetes deployment - Cleanup Signed-off-by: Markus Blaschke <mblaschke82@gmail.com>
1 parent e0be0dd commit 46f7318

File tree

10 files changed

+88
-121
lines changed

10 files changed

+88
-121
lines changed

bootstraptoken/token.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ func (t *BootstrapToken) SetExpirationUnixTime(val date.UnixTime) {
3737
t.expirationTime = &expirationTime
3838
}
3939

40-
func (t *BootstrapToken) GetExpirationTime() *time.Time {
40+
func (t *BootstrapToken) ExpirationTime() *time.Time {
4141
return t.expirationTime
4242
}
4343

@@ -54,7 +54,7 @@ func (t *BootstrapToken) ExpirationString() (expiration string) {
5454
return
5555
}
5656

57-
func (t *BootstrapToken) GetExpirationUnixTime() (val *date.UnixTime) {
57+
func (t *BootstrapToken) ExpirationUnixTime() (val *date.UnixTime) {
5858
if t.expirationTime != nil {
5959
unixTime := date.NewUnixTimeFromDuration(t.expirationTime.Sub(date.UnixEpoch()))
6060
val = &unixTime
@@ -71,11 +71,11 @@ func (t *BootstrapToken) SetCreationUnixTime(val date.UnixTime) {
7171
t.creationTime = &creationTime
7272
}
7373

74-
func (t *BootstrapToken) GetCreationTime() *time.Time {
74+
func (t *BootstrapToken) CreationTime() *time.Time {
7575
return t.creationTime
7676
}
7777

78-
func (t *BootstrapToken) GetCreationUnixTime() (val *date.UnixTime) {
78+
func (t *BootstrapToken) CreationUnixTime() (val *date.UnixTime) {
7979
if t.creationTime != nil {
8080
unixTime := date.NewUnixTimeFromDuration(t.creationTime.Sub(date.UnixEpoch()))
8181
val = &unixTime

cloudprovider/azure.go

Lines changed: 19 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
log "github.com/sirupsen/logrus"
1111
"github.com/webdevops/kube-bootstrap-token-manager/bootstraptoken"
1212
"github.com/webdevops/kube-bootstrap-token-manager/config"
13+
"os"
1314
)
1415

1516
type (
@@ -33,10 +34,12 @@ func (m *CloudProviderAzure) Init(ctx context.Context, opts config.Opts) {
3334
m.opts = opts
3435
m.log = log.WithField("cloudprovider", "azure")
3536

36-
// environment
3737
if m.opts.CloudProvider.Config != nil {
38-
m.environment, err = azure.EnvironmentFromFile(*m.opts.CloudProvider.Config)
39-
} else if m.opts.CloudProvider.Azure.Environment != nil {
38+
os.Setenv("AZURE_AUTH_LOCATION", *m.opts.CloudProvider.Config)
39+
}
40+
41+
// environment
42+
if m.opts.CloudProvider.Azure.Environment != nil {
4043
m.environment, err = azure.EnvironmentFromName(*m.opts.CloudProvider.Azure.Environment)
4144
} else {
4245
m.environment, err = azure.EnvironmentFromName("AZUREPUBLICCLOUD")
@@ -47,13 +50,18 @@ func (m *CloudProviderAzure) Init(ctx context.Context, opts config.Opts) {
4750

4851
// auth
4952
if m.opts.CloudProvider.Config != nil {
50-
m.authorizer, err = auth.NewAuthorizerFromFile(m.environment.ResourceIdentifiers.KeyVault)
53+
m.authorizer, err = auth.NewAuthorizerFromFileWithResource(m.environment.ResourceIdentifiers.KeyVault)
5154
} else {
5255
m.authorizer, err = auth.NewAuthorizerFromEnvironmentWithResource(m.environment.ResourceIdentifiers.KeyVault)
5356
}
5457
if err != nil {
5558
m.log.Panic(err)
5659
}
60+
61+
// keyvault client
62+
client := keyvault.New()
63+
client.Authorizer = m.authorizer
64+
m.keyvaultClient = &client
5765
}
5866

5967
func (m *CloudProviderAzure) FetchToken() (token *bootstraptoken.BootstrapToken) {
@@ -67,7 +75,8 @@ func (m *CloudProviderAzure) FetchToken() (token *bootstraptoken.BootstrapToken)
6775
)
6876

6977
log.Infof("fetching newest token from Azure KeyVault \"%s\" secret \"%s\"", vaultName, secretName)
70-
secret, err := m.azureKeyvaultClient().GetSecret(m.ctx, vaultUrl, secretName, "")
78+
secret, err := m.keyvaultClient.GetSecret(m.ctx, vaultUrl, secretName, "")
79+
// ignore if not found as "non error"
7180
if !secret.IsHTTPStatus(404) && err != nil {
7281
log.Panic(err)
7382
}
@@ -89,6 +98,8 @@ func (m *CloudProviderAzure) FetchToken() (token *bootstraptoken.BootstrapToken)
8998
if token != nil {
9099
contextLogger := log.WithFields(log.Fields{"token": token.Id()})
91100
contextLogger.Infof("found cloud token with id \"%s\" and expiration %s", token.Id(), token.ExpirationString())
101+
} else {
102+
log.Infof("no cloud token found")
92103
}
93104

94105
return
@@ -115,28 +126,13 @@ func (m *CloudProviderAzure) StoreToken(token *bootstraptoken.BootstrapToken) {
115126
},
116127
ContentType: stringPtr("kube-bootstrap-token"),
117128
SecretAttributes: &keyvault.SecretAttributes{
118-
NotBefore: token.GetCreationUnixTime(),
119-
Expires: token.GetExpirationUnixTime(),
129+
NotBefore: token.CreationUnixTime(),
130+
Expires: token.ExpirationUnixTime(),
120131
},
121132
}
122-
_, err := m.azureKeyvaultClient().SetSecret(m.ctx, vaultUrl, secretName, secretParameters)
123-
if err != nil {
124-
log.Panic(err)
125-
}
126-
}
127-
}
128-
129-
func (m *CloudProviderAzure) azureKeyvaultClient() *keyvault.BaseClient {
130-
if m.keyvaultClient == nil {
131-
auth, err := auth.NewAuthorizerFromEnvironmentWithResource(m.environment.ResourceIdentifiers.KeyVault)
133+
_, err := m.keyvaultClient.SetSecret(m.ctx, vaultUrl, secretName, secretParameters)
132134
if err != nil {
133135
log.Panic(err)
134136
}
135-
136-
client := keyvault.New()
137-
client.Authorizer = auth
138-
m.keyvaultClient = &client
139137
}
140-
141-
return m.keyvaultClient
142138
}

config/opts.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ type (
1616
}
1717

1818
BootstrapToken struct {
19-
TemplateId string `long:"bootstraptoken.template-id" env:"BOOTSTRAPTOKEN_TEMPLATE_ID" description:"Name for bootstrap tokens" default:"{{.Date}}"`
19+
IdTemplate string `long:"bootstraptoken.id-template" env:"BOOTSTRAPTOKEN_ID_TEMPLATE" description:"Template for token ID for bootstrap tokens" default:"{{.Date}}"`
20+
IdValidation string `long:"bootstraptoken.id-validation" env:"BOOTSTRAPTOKEN_ID_VALIDATION" description:"Regexp for validation of bootstrap token IDs" default:"^[a-z0-9]{6}\\.[a-z0-9]{16}$"`
2021
Name string `long:"bootstraptoken.name" env:"BOOTSTRAPTOKEN_NAME" description:"Name for bootstrap tokens" default:"bootstrap-token-%s"`
2122
Label string `long:"bootstraptoken.label" env:"BOOTSTRAPTOKEN_LABEL" description:"Label for bootstrap tokens" default:"webdevops.kubernetes.io/bootstraptoken-managed"`
2223
Namespace string `long:"bootstraptoken.namespace" env:"BOOTSTRAPTOKEN_NAMESPACE" description:"Namespace for bootstrap tokens" default:"kube-system"`
@@ -41,7 +42,7 @@ type (
4142
Azure struct {
4243
Environment *string `long:"azure-environment" env:"AZURE_ENVIRONMENT" description:"Azure environment name"`
4344
KeyVaultName *string `long:"azure.keyvault-name" env:"AZURE_KEYVAULT_NAME" description:"Name of Keyvault to sync token"`
44-
KeyVaultSecretName *string `long:"azure.keyvault-secret-name" env:"AZURE_KEYVAULT_SECRET_NAME" description:"Name of Keyvault secret to sync token"`
45+
KeyVaultSecretName *string `long:"azure.keyvault-secret-name" env:"AZURE_KEYVAULT_SECRET_NAME" description:"Name of Keyvault secret to sync token" default:"kube-bootstrapt-token"`
4546
}
4647
}
4748

deployment/config.yaml

Lines changed: 0 additions & 23 deletions
This file was deleted.

deployment/deployment.yaml

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,32 +2,40 @@
22
apiVersion: apps/v1
33
kind: Deployment
44
metadata:
5-
name: kube-pool-manager
5+
name: kube-bootstrap-token-manager
66
namespace: kube-system
77
labels:
8-
app: kube-pool-manager
8+
app: kube-bootstrap-token-manager
99
spec:
1010
replicas: 1
1111
selector:
1212
matchLabels:
13-
app: kube-pool-manager
13+
app: kube-bootstrap-token-manager
1414
template:
1515
metadata:
1616
labels:
17-
app: kube-pool-manager
17+
app: kube-bootstrap-token-manager
1818
annotations:
1919
prometheus.io/scrape: "true"
2020
prometheus.io/path: /metrics
2121
prometheus.io/port: "8080"
2222
spec:
23-
serviceAccountName: kube-pool-manager
23+
serviceAccountName: kube-bootstrap-token-manager
2424
containers:
25-
- name: kube-pool-manager
26-
image: webdevops/kube-pool-manager:development
25+
- name: kube-bootstrap-token-manager
26+
image: webdevops/kube-bootstrap-token-manager:development
2727
imagePullPolicy: Always
2828
env:
29-
- name: CONFIG
30-
value: "/config/pools.yaml"
29+
- name: CLOUD_PROVIDER
30+
value: "azure"
31+
###########################
32+
# CloudProvider: Azure
33+
- name: CLOUD_CONFIG
34+
value: "/config/cloudprovider-azure.json"
35+
- name: AZURE_ENVIRONMENT
36+
value: "AzurePublicCloud"
37+
- name: AZURE_KEYVAULT_NAME
38+
value: "mblaschke-k8s"
3139
securityContext:
3240
readOnlyRootFilesystem: true
3341
runAsNonRoot: true
@@ -47,9 +55,11 @@ spec:
4755
volumeMounts:
4856
- name: config
4957
mountPath: /config
58+
readOnly: true
5059
volumes:
5160
- name: config
52-
configMap:
53-
name: kube-pool-manager
61+
secret:
62+
secretName: kube-bootstrap-token-manager
63+
5464

5565

deployment/rbac.yaml

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,24 @@
11
---
22
apiVersion: rbac.authorization.k8s.io/v1
3-
kind: ClusterRole
3+
kind: Role
44
metadata:
5-
name: kube-pool-manager
5+
name: kube-bootstrap-token-manager
6+
namespace: kube-system
67
rules:
78
- apiGroups: [""]
8-
resources: ["nodes"]
9-
verbs: ["get", "list", "patch", "watch"]
10-
---
11-
apiVersion: rbac.authorization.k8s.io/v1
12-
kind: ClusterRoleBinding
13-
metadata:
14-
name: kube-pool-manager
15-
roleRef:
16-
apiGroup: rbac.authorization.k8s.io
17-
kind: ClusterRole
18-
name: kube-pool-manager
19-
subjects:
20-
- kind: ServiceAccount
21-
name: kube-pool-manager
22-
namespace: kube-system
9+
resources: ["secrets"]
10+
verbs: ["get", "list", "create", "update", "patch"]
2311
---
2412
apiVersion: rbac.authorization.k8s.io/v1
2513
kind: RoleBinding
2614
metadata:
15+
name: kube-bootstrap-token-manager
2716
namespace: kube-system
28-
name: kube-pool-manager
2917
subjects:
3018
- kind: ServiceAccount
3119
namespace: kube-system
32-
name: kube-pool-manager
20+
name: kube-bootstrap-token-manager
3321
roleRef:
3422
apiGroup: rbac.authorization.k8s.io
3523
kind: Role
36-
name: kube-pool-manager
24+
name: kube-bootstrap-token-manager

deployment/secret.yaml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
apiVersion: v1
2+
kind: Secret
3+
metadata:
4+
name: kube-bootstrap-token-manager
5+
namespace: kube-system
6+
type: Opaque
7+
data:
8+
#####################################
9+
# CloudProvider: azure
10+
cloudprovider-azure.json: e30=
11+
# {
12+
# "tenantId": "01234abc-de56-ff78-abc1-234567890def",
13+
# "subscriptionId": "01234abc-de56-ff78-abc1-234567890def",
14+
# "resourceGroup": "resource-group",
15+
# "aadClientId": "01234abc-de56-ff78-abc1-234567890def",
16+
# "aadClientSecret": "uKiuXeiwui4jo9quae9o"
17+
# }

deployment/serviceaccount.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
apiVersion: v1
33
kind: ServiceAccount
44
metadata:
5-
name: kube-pool-manager
5+
name: kube-bootstrap-token-manager
66
namespace: kube-system

k8s/patch.go

Lines changed: 0 additions & 27 deletions
This file was deleted.

0 commit comments

Comments
 (0)