Skip to content

Commit 6c014d9

Browse files
authored
fix external secrets for new cluster (#7883)
* fix external secrets for new cluster * use workload identity fully with kyverno * fix typos
1 parent 6c05550 commit 6c014d9

File tree

8 files changed

+167
-7
lines changed

8 files changed

+167
-7
lines changed

infra/gcp/terraform/k8s-infra-prow/buckets.tf

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,11 @@ module "prow_bucket" {
115115
role = "roles/storage.objectAdmin"
116116
member = "serviceAccount:prow-build-trusted@k8s-infra-prow-build-trusted.iam.gserviceaccount.com"
117117
},
118+
{
119+
// IBM build clusters, pods in the test-pods namespace only
120+
role = "roles/storage.objectAdmin"
121+
member = "principalSet://iam.googleapis.com/projects/16065310909/locations/global/workloadIdentityPools/ibm-clusters/attribute.namespace/test-pods"
122+
},
118123
{
119124
role = "roles/storage.objectViewer"
120125
member = "allUsers"

kubernetes/apps/external-secrets.yaml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,26 +13,26 @@ spec:
1313
operator: Exists
1414
template:
1515
metadata:
16-
name: 'external-secrets-{{ .name }}'
16+
name: "external-secrets-{{ .name }}"
1717
spec:
1818
destination:
1919
namespace: external-secrets
2020
server: "{{ .server }}"
2121
project: default
2222
sources:
2323
- chart: external-secrets
24-
repoURL: 'https://charts.external-secrets.io'
25-
targetRevision: 0.10.3
24+
repoURL: "https://charts.external-secrets.io"
25+
targetRevision: 0.14.4
2626
helm:
2727
releaseName: external-secrets
2828
parameters:
2929
- name: installCRDs
30-
value: 'true'
30+
value: "true"
3131
- name: serviceAccount.name
3232
value: external-secrets
3333
valueFiles:
34-
- $values/kubernetes/{{ .name }}/helm/external-secrets.yaml
35-
- repoURL: 'https://github.com/kubernetes/k8s.io.git'
34+
- $values/kubernetes/{{ .name }}/helm/external-secrets.yaml
35+
- repoURL: "https://github.com/kubernetes/k8s.io.git"
3636
targetRevision: main
3737
ref: values
3838
syncPolicy:

kubernetes/apps/kustomization.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ resources:
55
- atlantis.yaml
66
- external-secrets.yaml
77
- cert-manager.yaml
8+
- kyverno.yaml
89
- prow.yaml
910
- istio.yaml
1011
- oauth2-proxy.yaml

kubernetes/apps/kyverno.yaml

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
apiVersion: argoproj.io/v1alpha1
2+
kind: ApplicationSet
3+
metadata:
4+
name: kyverno
5+
spec:
6+
goTemplate: true
7+
generators:
8+
- clusters:
9+
selector:
10+
matchLabels:
11+
cloud: ibm
12+
template:
13+
metadata:
14+
name: "kyverno-{{ .name }}"
15+
spec:
16+
destination:
17+
namespace: kyverno
18+
server: "{{ .server }}"
19+
project: default
20+
sources:
21+
- chart: kyverno
22+
repoURL: "https://kyverno.github.io/kyverno"
23+
targetRevision: 3.3.7
24+
helm:
25+
releaseName: kyverno
26+
valueFiles:
27+
- $values/kubernetes/{{ .name }}/helm/kyverno.yaml
28+
- repoURL: "https://github.com/kubernetes/k8s.io.git"
29+
targetRevision: main
30+
ref: values
31+
syncPolicy:
32+
automated:
33+
prune: true
34+
selfHeal: true
35+
syncOptions:
36+
- CreateNamespace=true

kubernetes/ibm-ppc64le/helm/external-secrets.yaml

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,47 @@ extraObjects:
77
provider:
88
gcpsm:
99
projectID: k8s-infra-prow-build
10+
- apiVersion: v1
11+
kind: ConfigMap
12+
metadata:
13+
name: google-adc
14+
data:
15+
adc.json: |
16+
{
17+
"universe_domain": "googleapis.com",
18+
"type": "external_account",
19+
"audience": "//iam.googleapis.com/projects/16065310909/locations/global/workloadIdentityPools/ibm-clusters/providers/ppc64le",
20+
"subject_token_type": "urn:ietf:params:oauth:token-type:jwt",
21+
"token_url": "https://sts.googleapis.com/v1/token",
22+
"credential_source": {
23+
"file": "/var/run/secrets/google-iam-token/serviceaccount/token",
24+
"format": {
25+
"type": "text"
26+
}
27+
}
28+
}
29+
30+
extraVolumes:
31+
- name: google-iam-token
32+
projected:
33+
defaultMode: 420
34+
sources:
35+
- serviceAccountToken:
36+
audience: sts.googleapis.com
37+
expirationSeconds: 86400
38+
path: token
39+
- name: google-adc
40+
configMap:
41+
name: google-adc
42+
43+
extraEnv:
44+
- name: GOOGLE_APPLICATION_CREDENTIALS
45+
value: /etc/google/adc.json
46+
47+
extraVolumeMounts:
48+
- mountPath: /var/run/secrets/google-iam-token/serviceaccount
49+
name: google-iam-token
50+
readOnly: true
51+
- mountPath: /etc/google
52+
name: google-adc
53+
readOnly: true

kubernetes/ibm-ppc64le/prow/kustomization.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ resources:
77
- boskos-reaper.yaml
88
- boskos-resources-configmap.yaml
99
- boskos.yaml
10-
- build-serviceaccounts.yaml
10+
- kyverno.yaml
1111
- limit-range.yaml
12+
- secrets.yaml
13+
- oidc.yaml
1214
- test-pods-poddisruptionbudget.yaml
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
apiVersion: kyverno.io/v1
2+
kind: ClusterPolicy
3+
metadata:
4+
name: insert-gcp-credentials
5+
spec:
6+
rules:
7+
- name: add-creds
8+
match:
9+
any:
10+
- resources:
11+
kinds:
12+
- Pod
13+
preconditions:
14+
any:
15+
- key: '{{request.object.metadata.labels."created-by-prow"}}'
16+
operator: Equals
17+
value: "true"
18+
mutate:
19+
patchStrategicMerge:
20+
spec:
21+
initContainers:
22+
# pod order matters
23+
- name: clonerefs
24+
- (name): "initupload"
25+
# prow passes the json path directly, uncomment this once the feature is disabled in prow
26+
# env:
27+
# - name: GOOGLE_APPLICATION_CREDENTIALS
28+
# value: /secrets/gcs/service-account.json
29+
volumeMounts:
30+
- mountPath: /var/run/secrets/google-iam-token/serviceaccount
31+
name: google-iam-token
32+
readOnly: true
33+
containers:
34+
- name: test
35+
- (name): sidecar
36+
# prow passes the json path directly, uncomment this once the feature is disabled in prow
37+
# env:
38+
# - name: GOOGLE_APPLICATION_CREDENTIALS
39+
# value: /secrets/gcs/service-account.json
40+
volumeMounts:
41+
- mountPath: /var/run/secrets/google-iam-token/serviceaccount
42+
name: google-iam-token
43+
readOnly: true
44+
volumes:
45+
- name: google-iam-token
46+
projected:
47+
defaultMode: 420
48+
sources:
49+
- serviceAccountToken:
50+
audience: sts.googleapis.com
51+
expirationSeconds: 86400
52+
path: token
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
apiVersion: v1
2+
kind: Secret
3+
metadata:
4+
name: service-account
5+
namespace: test-pods
6+
stringData:
7+
service-account.json: |
8+
{
9+
"universe_domain": "googleapis.com",
10+
"type": "external_account",
11+
"audience": "//iam.googleapis.com/projects/16065310909/locations/global/workloadIdentityPools/ibm-clusters/providers/ppc64le",
12+
"subject_token_type": "urn:ietf:params:oauth:token-type:jwt",
13+
"token_url": "https://sts.googleapis.com/v1/token",
14+
"credential_source": {
15+
"file": "/var/run/secrets/google-iam-token/serviceaccount/token",
16+
"format": {
17+
"type": "text"
18+
}
19+
}
20+
}

0 commit comments

Comments
 (0)