Skip to content
This repository was archived by the owner on Sep 24, 2021. It is now read-only.

Commit 527c034

Browse files
committed
Use secrets instead of file mounts
Signed-off-by: Chuck Ha <[email protected]>
1 parent 61954bd commit 527c034

File tree

7 files changed

+122
-33
lines changed

7 files changed

+122
-33
lines changed

Dockerfile.capk

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ RUN go mod download
66
RUN curl -L https://dl.k8s.io/v1.14.3/kubernetes-client-linux-amd64.tar.gz | tar xvz
77
ADD cmd cmd
88
ADD capkactuators capkactuators
9-
ADD pkg/kind pkg/kind
9+
ADD kind kind
10+
ADD execer execer
1011

1112
RUN go install -v ./cmd/capk-manager
1213
RUN GO111MODULE="on" go get sigs.k8s.io/[email protected]

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
A temporary home for CAPK
44

5+
# Development
6+
7+
Please make an issue to discuss before large changes occur.
8+
59
# Manager Container Image
610

711
A sample is built and hosted at `gcr.io/kubernetes1-226021/capk-manager:latest`

capkactuators/actuators.go

Lines changed: 59 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,15 @@ import (
77
"context"
88
"encoding/json"
99
"fmt"
10+
"io/ioutil"
1011
"time"
1112

12-
"k8s.io/apimachinery/pkg/types"
13-
13+
"github.com/pkg/errors"
1414
"gitlab.com/chuckh/cluster-api-provider-kind/kind/actions"
15+
v1 "k8s.io/api/core/v1"
16+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
17+
"k8s.io/apimachinery/pkg/types"
18+
corev1 "k8s.io/client-go/kubernetes/typed/core/v1"
1519
clusterv1 "sigs.k8s.io/cluster-api/pkg/apis/cluster/v1alpha1"
1620
"sigs.k8s.io/cluster-api/pkg/client/clientset_generated/clientset/typed/cluster/v1alpha1"
1721
capierror "sigs.k8s.io/cluster-api/pkg/controller/error"
@@ -22,14 +26,14 @@ import (
2226
)
2327

2428
type Machine struct {
25-
ClusterAPI v1alpha1.ClusterV1alpha1Interface
26-
KubeconfigsDir string
29+
Core corev1.CoreV1Interface
30+
ClusterAPI v1alpha1.ClusterV1alpha1Interface
2731
}
2832

29-
func NewMachineActuator(kubeconfigs string, clusterapi v1alpha1.ClusterV1alpha1Interface) *Machine {
33+
func NewMachineActuator(clusterapi v1alpha1.ClusterV1alpha1Interface, core corev1.CoreV1Interface) *Machine {
3034
return &Machine{
31-
ClusterAPI: clusterapi,
32-
KubeconfigsDir: kubeconfigs,
35+
Core: core,
36+
ClusterAPI: clusterapi,
3337
}
3438
}
3539

@@ -75,7 +79,21 @@ func (m *Machine) Create(ctx context.Context, c *clusterv1.Cluster, machine *clu
7579
return err
7680
}
7781
setKindName(machine, controlPlaneNode.Name())
78-
return m.save(old, machine)
82+
if err := m.save(old, machine); err != nil {
83+
fmt.Printf("%+v", err)
84+
return err
85+
}
86+
s, err := kubeconfigToSecret(c.Name, c.Namespace)
87+
if err != nil {
88+
fmt.Printf("%+v", err)
89+
return err
90+
}
91+
// Save the secret to the management cluster
92+
if _, err := m.Core.Secrets(machine.GetNamespace()).Create(s); err != nil {
93+
fmt.Printf("%+v", err)
94+
return err
95+
}
96+
return nil
7997
}
8098

8199
// If there are no control plane then we should hold off on joining workers
@@ -103,14 +121,22 @@ func (m *Machine) Update(ctx context.Context, cluster *clusterv1.Cluster, machin
103121
}
104122

105123
func (m *Machine) Exists(ctx context.Context, cluster *clusterv1.Cluster, machine *clusterv1.Machine) (bool, error) {
124+
if getKindName(machine) == "" {
125+
return false, nil
126+
}
106127
fmt.Println("Looking for a docker container named", getKindName(machine))
107128
role := getRole(machine)
108-
nodeList, err := nodes.List(fmt.Sprintf("label=%s=%s", constants.NodeRoleKey, role),
129+
labels := []string{
130+
fmt.Sprintf("label=%s=%s", constants.NodeRoleKey, role),
109131
fmt.Sprintf("label=%s=%s", constants.ClusterLabelKey, cluster.Name),
110-
fmt.Sprintf("name=%s", getKindName(machine)))
132+
fmt.Sprintf("name=^%s$", getKindName(machine)),
133+
}
134+
fmt.Printf("using labels: %v\n", labels)
135+
nodeList, err := nodes.List(labels...)
111136
if err != nil {
112-
return true, err
137+
return false, err
113138
}
139+
fmt.Printf("found nodes: %v\n", nodeList)
114140
return len(nodeList) >= 1, nil
115141
}
116142

@@ -138,7 +164,9 @@ func (m *Machine) save(old, new *clusterv1.Machine) error {
138164
}
139165

140166
func setKindName(machine *clusterv1.Machine, name string) {
141-
machine.SetAnnotations(map[string]string{"name": name})
167+
a := machine.GetAnnotations()
168+
a["name"] = name
169+
machine.SetAnnotations(a)
142170
}
143171

144172
func getKindName(machine *clusterv1.Machine) string {
@@ -185,3 +213,22 @@ func (c *Cluster) Delete(cluster *clusterv1.Cluster) error {
185213
fmt.Println("Cluster delete is not implemented.")
186214
return nil
187215
}
216+
217+
func kubeconfigToSecret(clusterName, namespace string) (*v1.Secret, error) {
218+
// open kubeconfig file
219+
data, err := ioutil.ReadFile(actions.KubeConfigPath(clusterName))
220+
if err != nil {
221+
return nil, errors.WithStack(err)
222+
}
223+
224+
// write it to a secret
225+
return &v1.Secret{
226+
ObjectMeta: metav1.ObjectMeta{
227+
Name: fmt.Sprintf("kubeconfig-%s", clusterName),
228+
Namespace: namespace,
229+
},
230+
Data: map[string][]byte{
231+
"kubeconfig": data,
232+
},
233+
}, nil
234+
}

cmd/capk-manager/main.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88
"time"
99

1010
"gitlab.com/chuckh/cluster-api-provider-kind/capkactuators"
11-
"k8s.io/klog"
11+
"k8s.io/client-go/kubernetes"
1212
"sigs.k8s.io/cluster-api/pkg/apis"
1313
"sigs.k8s.io/cluster-api/pkg/apis/cluster/common"
1414
"sigs.k8s.io/cluster-api/pkg/client/clientset_generated/clientset"
@@ -35,13 +35,17 @@ func main() {
3535
if err != nil {
3636
panic(err)
3737
}
38+
k8sclientset, err := kubernetes.NewForConfig(cfg)
39+
if err != nil {
40+
panic(err)
41+
}
3842
cs, err := clientset.NewForConfig(cfg)
3943
if err != nil {
40-
klog.Fatalf("Failed to create client from configuration: %v", err)
44+
panic(err)
4145
}
4246

4347
clusterActuator := capkactuators.NewClusterActuator()
44-
machineActuator := capkactuators.NewMachineActuator("/kubeconfigs", cs.ClusterV1alpha1())
48+
machineActuator := capkactuators.NewMachineActuator(cs.ClusterV1alpha1(), k8sclientset.CoreV1())
4549

4650
// Register our cluster deployer (the interface is in clusterctl and we define the Deployer interface on the actuator)
4751
common.RegisterClusterProvisioner("aws", clusterActuator)

cmd/capkctl/main.go

Lines changed: 45 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,57 @@ func main() {
1919
printCRDs()
2020
case "capk":
2121
printClusterAPIPlane()
22+
case "control-plane":
23+
fmt.Fprintf(os.Stdout, machineYAML(os.Args[2], os.Args[3], os.Args[4], "control-plane"))
24+
case "worker":
25+
fmt.Fprintf(os.Stdout, machineYAML(os.Args[2], os.Args[3], os.Args[4], "worker"))
26+
case "cluster":
27+
fmt.Fprintf(os.Stdout, clusterYAML(os.Args[2], os.Args[3]))
2228
default:
2329
fmt.Fprint(os.Stderr, "unknown command", os.Args[1])
2430
os.Exit(2)
2531
}
2632
}
2733

34+
func clusterYAML(name, namespace string) string {
35+
return fmt.Sprintf(`apiVersion: "cluster.k8s.io/v1alpha1"
36+
kind: Cluster
37+
metadata:
38+
name: %s
39+
namespace: %s
40+
spec:
41+
clusterNetwork:
42+
services:
43+
cidrBlocks: ["10.96.0.0/12"]
44+
pods:
45+
cidrBlocks: ["192.168.0.0/16"]
46+
serviceDomain: "cluster.local"
47+
providerSpec: {}`, name, namespace)
48+
}
49+
50+
func machineYAML(name, namespace, cluster, set string) string {
51+
return fmt.Sprintf(`apiVersion: "cluster.k8s.io/v1alpha1"
52+
kind: MachineList
53+
items:
54+
- apiVersion: "cluster.k8s.io/v1alpha1"
55+
kind: Machine
56+
metadata:
57+
name: %s
58+
namespace: %s
59+
labels:
60+
cluster.k8s.io/cluster-name: %s
61+
annotations:
62+
set: %s
63+
spec:
64+
versions:
65+
kubelet: v1.13.6
66+
controlPlane: v1.13.6
67+
providerSpec: {}`, name, namespace, cluster, set)
68+
}
69+
2870
func makeManagementCluster() {
29-
// start kind with docker mount
3071
kind := execer.NewClient("kind")
72+
// start kind with docker mount
3173
kindConfig, err := kindConfigFile()
3274
if err != nil {
3375
panic(err)
@@ -45,8 +87,7 @@ nodes:
4587
extraMounts:
4688
- containerPath: /var/run/docker.sock
4789
hostPath: /var/run/docker.sock
48-
- containerPath: /kubeconfigs
49-
hostPath: /kubeconfigs`
90+
`
5091

5192
f, err := ioutil.TempFile("", "*-kind-config.yaml")
5293
if err != nil {
@@ -109,8 +150,6 @@ spec:
109150
name: dockersock
110151
- mountPath: /var/lib/docker
111152
name: dockerlib
112-
- mountPath: /kubeconfigs
113-
name: kubeconfigs
114153
securityContext:
115154
privileged: true
116155
volumes:
@@ -121,9 +160,6 @@ spec:
121160
- name: dockerlib
122161
hostPath:
123162
path: /var/lib/docker
124-
- name: kubeconfigs
125-
hostPath:
126-
path: /kubeconfigs
127163
tolerations:
128164
- effect: NoSchedule
129165
key: node-role.kubernetes.io/master
@@ -1116,6 +1152,7 @@ rules:
11161152
resources:
11171153
- nodes
11181154
- events
1155+
- secrets
11191156
verbs:
11201157
- get
11211158
- list

go.mod

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,10 @@ require (
2020
go.uber.org/zap v1.10.0 // indirect
2121
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 // indirect
2222
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 // indirect
23+
k8s.io/api v0.0.0-20181213150558-05914d821849
2324
k8s.io/apiextensions-apiserver v0.0.0-20181213153335-0fe22c71c476 // indirect
2425
k8s.io/apimachinery v0.0.0-20181127025237-2b1284ed4c93
26+
k8s.io/client-go v10.0.0+incompatible
2527
k8s.io/klog v0.3.2
2628
sigs.k8s.io/cluster-api v0.0.0-20190607141803-aacb0c613ffb
2729
sigs.k8s.io/controller-runtime v0.1.10

kind/actions/kind.go

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,14 @@ import (
1313
"regexp"
1414
"strings"
1515

16-
"sigs.k8s.io/kind/pkg/container/cri"
17-
1816
"github.com/pkg/errors"
1917
"gitlab.com/chuckh/cluster-api-provider-kind/kind/kubeadm"
2018
"gitlab.com/chuckh/cluster-api-provider-kind/kind/loadbalancer"
2119
"sigs.k8s.io/kind/pkg/cluster/config"
2220
"sigs.k8s.io/kind/pkg/cluster/config/defaults"
2321
"sigs.k8s.io/kind/pkg/cluster/constants"
2422
"sigs.k8s.io/kind/pkg/cluster/nodes"
23+
"sigs.k8s.io/kind/pkg/container/cri"
2524
"sigs.k8s.io/kind/pkg/exec"
2625
"sigs.k8s.io/kind/pkg/kustomize"
2726
)
@@ -31,7 +30,7 @@ import (
3130
// KubeConfigPath returns the path to the kubeconfig file for the given cluster name.
3231
func KubeConfigPath(clusterName string) string {
3332
// configDir matches the standard directory expected by kubectl etc
34-
configDir := "/kubeconfigs"
33+
configDir := filepath.Join(os.Getenv("HOME"), ".kube")
3534
// note that the file name however does not, we do not want to overwrite
3635
// the standard config, though in the future we may (?) merge them
3736
fileName := fmt.Sprintf("kind-config-%s", clusterName)
@@ -90,12 +89,7 @@ func CreateControlPlane(clusterName string) (*nodes.Node, error) {
9089
clusterLabel,
9190
"127.0.0.1",
9291
0,
93-
[]cri.Mount{
94-
{
95-
ContainerPath: "/root/.kube",
96-
HostPath: "/kubeconfigs",
97-
},
98-
},
92+
[]cri.Mount{},
9993
)
10094
if err != nil {
10195
return nil, err

0 commit comments

Comments
 (0)