8
8
9
9
"github.com/weaveworks/weave-gitops/pkg/logger"
10
10
"github.com/weaveworks/weave-gitops/pkg/run"
11
+ "github.com/weaveworks/weave-gitops/pkg/tls"
11
12
appsv1 "k8s.io/api/apps/v1"
12
13
corev1 "k8s.io/api/core/v1"
13
14
apierrors "k8s.io/apimachinery/pkg/api/errors"
@@ -29,11 +30,11 @@ var (
29
30
// The variables below are to be set by flags passed to `go build`.
30
31
// Examples: -X run.DevBucketContainerImage=xxxxx
31
32
32
- DevBucketContainerImage = "ghcr.io/weaveworks/gitops-bucket-server@sha256:8fbb7534e772e14ea598d287a4b54a3f556416cac6621095ce45f78346fda78a "
33
+ DevBucketContainerImage = "ghcr.io/weaveworks/gitops-bucket-server:1670322194 "
33
34
)
34
35
35
36
// InstallDevBucketServer installs the dev bucket server, open port forwarding, and returns a function that can be used to the port forwarding.
36
- func InstallDevBucketServer (ctx context.Context , log logger.Logger , kubeClient client.Client , config * rest.Config , devBucketPort int32 ) (func (), error ) {
37
+ func InstallDevBucketServer (ctx context.Context , log logger.Logger , kubeClient client.Client , config * rest.Config , httpPort , httpsPort int32 ) (func (), [] byte , error ) {
37
38
var (
38
39
err error
39
40
devBucketAppLabels = map [string ]string {
@@ -57,7 +58,7 @@ func InstallDevBucketServer(ctx context.Context, log logger.Logger, kubeClient c
57
58
if err != nil && apierrors .IsNotFound (err ) {
58
59
if err := kubeClient .Create (ctx , & devBucketNamespace ); err != nil {
59
60
log .Failuref ("Error creating namespace %s: %v" , GitOpsRunNamespace , err .Error ())
60
- return nil , err
61
+ return nil , nil , err
61
62
} else {
62
63
log .Successf ("Created namespace %s" , GitOpsRunNamespace )
63
64
}
@@ -76,8 +77,12 @@ func InstallDevBucketServer(ctx context.Context, log logger.Logger, kubeClient c
76
77
Type : corev1 .ServiceTypeClusterIP ,
77
78
Ports : []corev1.ServicePort {
78
79
{
79
- Name : RunDevBucketName ,
80
- Port : devBucketPort ,
80
+ Name : fmt .Sprintf ("%s-http" , RunDevBucketName ),
81
+ Port : httpPort ,
82
+ },
83
+ {
84
+ Name : fmt .Sprintf ("%s-https" , RunDevBucketName ),
85
+ Port : httpsPort ,
81
86
},
82
87
},
83
88
Selector : devBucketAppLabels ,
@@ -93,14 +98,38 @@ func InstallDevBucketServer(ctx context.Context, log logger.Logger, kubeClient c
93
98
if err != nil && apierrors .IsNotFound (err ) {
94
99
if err := kubeClient .Create (ctx , & devBucketService ); err != nil {
95
100
log .Failuref ("Error creating service %s/%s: %v" , GitOpsRunNamespace , RunDevBucketName , err .Error ())
96
- return nil , err
101
+ return nil , nil , err
97
102
} else {
98
103
log .Successf ("Created service %s/%s" , GitOpsRunNamespace , RunDevBucketName )
99
104
}
100
105
} else if err == nil {
101
106
log .Successf ("Service %s/%s already existed" , GitOpsRunNamespace , RunDevBucketName )
102
107
}
103
108
109
+ cert , err := tls .GenerateSelfSignedCertificate ("localhost" , fmt .Sprintf ("%s.%s.svc.cluster.local" , devBucketService .Name , devBucketService .Namespace ))
110
+ if err != nil {
111
+ err = fmt .Errorf ("failed generating self-signed certificate for dev bucket server: %w" , err )
112
+ log .Failuref (err .Error ())
113
+
114
+ return nil , nil , err
115
+ }
116
+
117
+ certsSecret := & corev1.Secret {
118
+ ObjectMeta : metav1.ObjectMeta {
119
+ Name : "dev-bucket-server-certs" ,
120
+ Namespace : GitOpsRunNamespace ,
121
+ Labels : devBucketAppLabels ,
122
+ },
123
+ Data : map [string ][]byte {
124
+ "cert.pem" : cert .Cert ,
125
+ "cert.key" : cert .Key ,
126
+ },
127
+ }
128
+ if err := kubeClient .Create (ctx , certsSecret ); err != nil {
129
+ log .Failuref ("Error creating Secret %s/%s: %v" , certsSecret .Namespace , certsSecret .Name , err .Error ())
130
+ return nil , nil , err
131
+ }
132
+
104
133
// create deployment
105
134
replicas := int32 (1 )
106
135
devBucketDeployment := appsv1.Deployment {
@@ -119,21 +148,43 @@ func InstallDevBucketServer(ctx context.Context, log logger.Logger, kubeClient c
119
148
Labels : devBucketAppLabels ,
120
149
},
121
150
Spec : corev1.PodSpec {
151
+ Volumes : []corev1.Volume {{
152
+ Name : "certs" ,
153
+ VolumeSource : corev1.VolumeSource {
154
+ Secret : & corev1.SecretVolumeSource {
155
+ SecretName : "dev-bucket-server-certs" ,
156
+ },
157
+ },
158
+ }},
122
159
Containers : []corev1.Container {
123
160
{
124
- Name : RunDevBucketName ,
125
- Image : DevBucketContainerImage ,
161
+ Name : RunDevBucketName ,
162
+ Image : DevBucketContainerImage ,
163
+ ImagePullPolicy : corev1 .PullIfNotPresent ,
126
164
Env : []corev1.EnvVar {
127
165
{Name : "MINIO_ROOT_USER" , Value : "user" },
128
166
{Name : "MINIO_ROOT_PASSWORD" , Value : "doesn't matter" },
129
167
},
130
168
Ports : []corev1.ContainerPort {
131
169
{
132
- ContainerPort : devBucketPort ,
133
- HostPort : devBucketPort ,
170
+ ContainerPort : httpPort ,
171
+ HostPort : httpPort ,
172
+ },
173
+ {
174
+ ContainerPort : httpsPort ,
175
+ HostPort : httpsPort ,
134
176
},
135
177
},
136
- Args : []string {strconv .Itoa (int (devBucketPort ))},
178
+ Args : []string {
179
+ fmt .Sprintf ("--http-port=%d" , httpPort ),
180
+ fmt .Sprintf ("--https-port=%d" , httpsPort ),
181
+ "--cert-file=/tmp/certs/cert.pem" ,
182
+ "--key-file=/tmp/certs/cert.key" ,
183
+ },
184
+ VolumeMounts : []corev1.VolumeMount {{
185
+ Name : "certs" ,
186
+ MountPath : "/tmp/certs" ,
187
+ }},
137
188
},
138
189
},
139
190
RestartPolicy : corev1 .RestartPolicyAlways ,
@@ -151,7 +202,7 @@ func InstallDevBucketServer(ctx context.Context, log logger.Logger, kubeClient c
151
202
if err != nil && apierrors .IsNotFound (err ) {
152
203
if err := kubeClient .Create (ctx , & devBucketDeployment ); err != nil {
153
204
log .Failuref ("Error creating deployment %s/%s: %v" , GitOpsRunNamespace , RunDevBucketName , err .Error ())
154
- return nil , err
205
+ return nil , nil , err
155
206
} else {
156
207
log .Successf ("Created deployment %s/%s" , GitOpsRunNamespace , RunDevBucketName )
157
208
}
@@ -189,8 +240,8 @@ func InstallDevBucketServer(ctx context.Context, log logger.Logger, kubeClient c
189
240
Name : RunDevBucketName ,
190
241
Namespace : GitOpsRunNamespace ,
191
242
Kind : "service" ,
192
- HostPort : strconv .Itoa (int (devBucketPort )),
193
- ContainerPort : strconv .Itoa (int (devBucketPort )),
243
+ HostPort : strconv .Itoa (int (httpsPort )),
244
+ ContainerPort : strconv .Itoa (int (httpsPort )),
194
245
}
195
246
// get pod from specMap
196
247
namespacedName := types.NamespacedName {Namespace : specMap .Namespace , Name : specMap .Name }
@@ -218,10 +269,10 @@ func InstallDevBucketServer(ctx context.Context, log logger.Logger, kubeClient c
218
269
219
270
log .Successf ("Port forwarding for %s is ready." , RunDevBucketName )
220
271
221
- return cancelPortFwd , nil
272
+ return cancelPortFwd , cert . Cert , nil
222
273
}
223
274
224
- return nil , fmt .Errorf ("pod not found" )
275
+ return nil , nil , fmt .Errorf ("pod not found" )
225
276
}
226
277
227
278
// UninstallDevBucketServer deletes the dev-bucket namespace.
0 commit comments