1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package clusterprovider
import (
"context"
"errors"
"fmt"
"github.com/johnandersen777/socialweb-computer-kcp/internal/procgroup"
)
const (
PSAEnforceLabel = "pod-security.kubernetes.io/enforce"
PSAWarnLabel = "pod-security.kubernetes.io/warn"
PSAEnforceValue = "baseline"
PSAWarnValue = "restricted"
DefaultServiceAccountName = "default"
)
var ErrNoHardeningCredential = errors.New(
"clusterprovider: no client for the cluster's own apiserver was supplied, so its PSA labels " +
"and its default ServiceAccount's automountServiceAccountToken=false can neither be " +
"written nor read back; a cluster whose hardening is not in force is not one this " +
"provider will hold at Ready")
var ErrHardeningNotInForce = errors.New(
"clusterprovider: the cluster answered and its hardening is NOT in force")
var ErrHardeningRaced = errors.New(
"clusterprovider: the default ServiceAccount appeared between the read and the write on " +
"every attempt, so automountServiceAccountToken=false has nowhere to land")
var ErrNoHardeningSeam = errors.New(
"clusterprovider: this Stack puts no k3s step in the group, so the hardening has no gate to " +
"run behind and would SILENTLY NOT RUN -- a cluster hardened by nothing and a cluster " +
"hardened by this step look identical from a green suite")
func hardenAfterK3s(steps []procgroup.Step, admin AdminClient, cluster, apiserver string) ([]procgroup.Step, error) {
idx := -1
for i, s := range steps {
if s.Name == procgroup.ComponentK3s {
idx = i
break
}
}
if idx < 0 {
return nil, ErrNoHardeningSeam
}
if admin == nil {
return nil, ErrNoHardeningCredential
}
inner := steps[idx].Ready
steps[idx].Ready = func(ctx context.Context, p procgroup.Member) error {
if inner != nil {
if err := inner(ctx, p); err != nil {
return err
}
}
core, err := admin(ctx, cluster, apiserver)
if err != nil {
return err
}
err = ErrNoHardeningCredential
if core != nil {
err = core.Harden(ctx)
}
if err != nil {
return fmt.Errorf("clusterprovider: %s answered at %s and %w", cluster, apiserver, err)
}
return nil
}
return steps, nil
}