Skip to content

Commit 81ce4e9

Browse files
authored
Merge pull request #466 from kube-tarian/business-secret-store
create app role token and cluster secret store for business cluster
2 parents 6d9b0ee + fbbf117 commit 81ce4e9

File tree

6 files changed

+38
-56
lines changed

6 files changed

+38
-56
lines changed

capten/common-pkg/k8s/external_secret.go

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,9 @@ type SecretStoreSpec struct {
5757
}
5858

5959
type SecretKeySelector struct {
60-
Name string `yaml:"name,omitempty"`
61-
Key string `yaml:"key,omitempty"`
60+
Namespace string `yaml:"namespace,omitempty"`
61+
Name string `yaml:"name,omitempty"`
62+
Key string `yaml:"key,omitempty"`
6263
}
6364

6465
type VaultAuth struct {
@@ -88,10 +89,9 @@ func (k *K8SClient) CreateOrUpdateSecretStore(ctx context.Context, secretStoreNa
8889
tokenSecretName, tokenSecretKey string) (err error) {
8990
secretStore := SecretStore{
9091
APIVersion: "external-secrets.io/v1beta1",
91-
Kind: "SecretStore",
92+
Kind: "ClusterSecretStore",
9293
Metadata: ObjectMeta{
93-
Name: secretStoreName,
94-
Namespace: namespace,
94+
Name: secretStoreName,
9595
},
9696
Spec: SecretStoreSpec{
9797
RefreshInterval: 10,
@@ -102,8 +102,9 @@ func (k *K8SClient) CreateOrUpdateSecretStore(ctx context.Context, secretStoreNa
102102
Version: "v2",
103103
Auth: VaultAuth{
104104
TokenSecretRef: &SecretKeySelector{
105-
Key: tokenSecretKey,
106-
Name: tokenSecretName,
105+
Key: tokenSecretKey,
106+
Name: tokenSecretName,
107+
Namespace: namespace,
107108
},
108109
},
109110
},
@@ -152,7 +153,7 @@ func (k *K8SClient) CreateOrUpdateExternalSecret(ctx context.Context, externalSe
152153
Template: ExternalSecretTargetTemplate{Type: secretType}},
153154
SecretStoreRef: SecretStoreRef{
154155
Name: secretStoreRefName,
155-
Kind: "SecretStore",
156+
Kind: "ClusterSecretStore",
156157
},
157158
Data: secretKeysData,
158159
},

capten/config-worker/internal/crossplane/config_cluster_secrets.go

Lines changed: 19 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,15 @@ var (
1313
vaultAppRoleTokenSecret = "approle-vault-token"
1414
vaultAddress = "http://vault.%s"
1515
cluserAppRoleName = "capten-approle-%s"
16-
secretStoreName = "approle-vault-store"
16+
secretStoreName = "capten-vault-store"
1717
)
1818

1919
func (cp *CrossPlaneApp) configureExternalSecretsOnCluster(ctx context.Context,
20-
clusterName, clusterID string, extSecrets []clusterExternalSecret) error {
20+
clusterName, clusterID string, appRoleTokenPaths []string, extSecrets []clusterExternalSecret) error {
2121
logger.Infof("configure external secrets for cluster %s/%s", clusterName, clusterID)
2222

23-
credentialPaths, namespaces := getUniqueSecretPathsAndNamespaces(extSecrets)
24-
if len(namespaces) == 0 {
25-
logger.Infof("no external secrets defined for cluster %s/%s", clusterName, clusterID)
26-
return nil
27-
}
28-
2923
cluserAppRoleNameStr := fmt.Sprintf(cluserAppRoleName, clusterName)
30-
token, err := vaultcred.GetAppRoleToken(cluserAppRoleNameStr, credentialPaths)
24+
token, err := vaultcred.GetAppRoleToken(cluserAppRoleNameStr, appRoleTokenPaths)
3125
if err != nil {
3226
return err
3327
}
@@ -38,24 +32,27 @@ func (cp *CrossPlaneApp) configureExternalSecretsOnCluster(ctx context.Context,
3832
return fmt.Errorf("failed to initalize k8s client, %v", err)
3933
}
4034

35+
namespace := "capten"
4136
vaultAddressStr := fmt.Sprintf(vaultAddress, cp.cfg.DomainName)
37+
err = k8sclient.CreateNamespace(ctx, namespace)
38+
if err != nil {
39+
logger.Infof("failed to create namespace %s, %v", namespace, err)
40+
}
4241

43-
for _, namespace := range namespaces {
44-
cred := map[string][]byte{"token": []byte(token)}
45-
err = k8sclient.CreateOrUpdateSecret(ctx, namespace, vaultAppRoleTokenSecret, v1.SecretTypeOpaque, cred, nil)
46-
if err != nil {
47-
logger.Infof("failed to create cluter vault token secret %s/%s, %v", namespace, vaultAppRoleTokenSecret, err)
48-
continue
49-
}
42+
cred := map[string][]byte{"token": []byte(token)}
43+
err = k8sclient.CreateOrUpdateSecret(ctx, namespace, vaultAppRoleTokenSecret, v1.SecretTypeOpaque, cred, nil)
44+
if err != nil {
45+
logger.Infof("failed to create cluter vault token secret %s/%s, %v", namespace, vaultAppRoleTokenSecret, err)
46+
}
5047

51-
err := k8sclient.CreateOrUpdateSecretStore(ctx, secretStoreName, namespace,
52-
vaultAddressStr, vaultAppRoleTokenSecret, "token")
53-
if err != nil {
54-
return fmt.Errorf("failed to create cluter vault token secret, %v", err)
55-
}
56-
logger.Infof("created %s/%s on cluster cluster %s", namespace, secretStoreName, clusterName)
48+
err = k8sclient.CreateOrUpdateSecretStore(ctx, secretStoreName, namespace,
49+
vaultAddressStr, vaultAppRoleTokenSecret, "token")
50+
if err != nil {
51+
return fmt.Errorf("failed to create cluter vault token secret, %v", err)
5752
}
5853

54+
logger.Infof("created %s on cluster cluster %s", secretStoreName, secretStoreName, clusterName)
55+
5956
for _, extSecret := range extSecrets {
6057
externalSecretName := "external-" + extSecret.SecretName
6158
vaultSecretData := map[string]string{}
@@ -72,25 +69,3 @@ func (cp *CrossPlaneApp) configureExternalSecretsOnCluster(ctx context.Context,
7269
}
7370
return nil
7471
}
75-
76-
func getUniqueSecretPathsAndNamespaces(extSecrets []clusterExternalSecret) ([]string, []string) {
77-
credentialPaths := map[string]bool{}
78-
namspaces := map[string]bool{}
79-
for _, extSecret := range extSecrets {
80-
for _, secretData := range extSecret.VaultSecrets {
81-
credentialPaths[secretData.SecretPath] = true
82-
}
83-
namspaces[extSecret.Namespace] = true
84-
}
85-
return getKeysFromBoolMap(credentialPaths), getKeysFromBoolMap(namspaces)
86-
}
87-
88-
func getKeysFromBoolMap(inputMap map[string]bool) []string {
89-
var keys []string
90-
91-
for key := range inputMap {
92-
keys = append(keys, key)
93-
}
94-
95-
return keys
96-
}

capten/config-worker/internal/crossplane/config_cluster_updates.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ func (cp *CrossPlaneApp) configureClusterUpdate(ctx context.Context, req *model.
123123
}
124124

125125
err = cp.configureExternalSecretsOnCluster(ctx, req.ManagedClusterName, req.ManagedClusterId,
126+
cp.pluginConfig.ClusterEndpointUpdates.AppRoleTokenVaultPaths,
126127
cp.pluginConfig.ClusterEndpointUpdates.ExternalSecrets)
127128
if err != nil {
128129
logger.Errorf("%v", errors.WithMessage(err, "failed to create cluster secrets"))

capten/config-worker/internal/crossplane/types.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ type clusterUpdateConfig struct {
1212
DefaultAppListFile string `json:"defaultAppListFile"`
1313
DefaultAppValuesPath string `json:"defaultAppValuesPath"`
1414
ClusterDefaultAppValuesPath string `json:"clusterDefaultAppValuesPath"`
15+
AppRoleTokenVaultPaths []string `json:"appRoleTokenVaultPaths"`
1516
ExternalSecrets []clusterExternalSecret `json:"externalSecrets"`
1617
}
1718

charts/kad/Chart.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@ type: application
1515
# This is the chart version. This version number should be incremented each time you make changes
1616
# to the chart and its templates, including the app version.
1717
# Versions are expected to follow Semantic Versioning (https://semver.org/)
18-
version: 0.2.20
18+
version: 0.2.21
1919

2020
# This is the version number of the application being deployed. This version number should be
2121
# incremented each time you make changes to the application. Versions are not expected to
2222
# follow Semantic Versioning. They should reflect the version the application is using.
2323
# It is recommended to use it with quotes.
24-
appVersion: "1.28.2"
24+
appVersion: "1.28.3"

charts/kad/crossplane_plugin_config.json

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@
1313
"defaultAppListFile": "default-apps-templates/app_list.yaml",
1414
"defaultAppValuesPath": "default-apps-templates/values",
1515
"clusterDefaultAppValuesPath": "infra/clusters/app-configs",
16+
"appRoleTokenVaultPaths":[
17+
"generic/cosign/signer",
18+
"generic/nats/auth-token",
19+
"generic/container-registry/*"
20+
],
1621
"externalSecrets": [
1722
{
1823
"namespace": "observability",
@@ -33,8 +38,7 @@
3338
"secretPath": "generic/cosign/signer"
3439
}
3540
]
36-
},
37-
41+
},
3842
{
3943
"namespace": "ml-server",
4044
"secretName": "regcred-ghcr",

0 commit comments

Comments
 (0)