Skip to content

Commit ce0516b

Browse files
committed
fix aks post deployment bugs
1 parent 9b08bfd commit ce0516b

File tree

11 files changed

+93
-42
lines changed

11 files changed

+93
-42
lines changed

infra/azure/terraform/k8s-infra-prow-build/aks.tf

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ module "prow_build" {
3737
identity_ids = [azurerm_user_assigned_identity.aks_identity.id]
3838

3939
msi_auth_for_monitoring_enabled = true
40+
tags = var.common_tags
4041

4142
kubelet_identity = {
4243
client_id = azurerm_user_assigned_identity.aks_kubelet_identity.client_id
@@ -84,14 +85,15 @@ module "prow_build" {
8485
vm_size = "Standard_D8ads_v6"
8586
enable_auto_scaling = true
8687
kubelet_disk_type = "OS"
87-
min_count = 3
88+
min_count = 1
8889
max_count = 100
8990
max_pods = 110
9091
os_disk_type = "Ephemeral"
9192
os_disk_size_gb = 100
9293
os_sku = "Ubuntu"
93-
vnet_subnet_id = module.prow_network.subnets.prow_build_aks.resource_id
94-
94+
vnet_subnet = {
95+
id = module.prow_network.subnets.prow_build_aks.resource_id
96+
}
9597
upgrade_settings = {
9698
max_surge = "33%"
9799
drain_timeout_in_minutes = 90
@@ -103,14 +105,15 @@ module "prow_build" {
103105
vm_size = "Standard_D8pds_v6"
104106
enable_auto_scaling = true
105107
kubelet_disk_type = "OS"
106-
min_count = 3
108+
min_count = 1
107109
max_count = 100
108110
max_pods = 110
109111
os_disk_type = "Ephemeral"
110112
os_disk_size_gb = 100
111113
os_sku = "Ubuntu"
112-
vnet_subnet_id = module.prow_network.subnets.prow_build_aks.resource_id
113-
114+
vnet_subnet = {
115+
id = module.prow_network.subnets.prow_build_aks.resource_id
116+
}
114117
upgrade_settings = {
115118
max_surge = "33%"
116119
drain_timeout_in_minutes = 90
@@ -121,13 +124,3 @@ module "prow_build" {
121124

122125
depends_on = [module.prow_network]
123126
}
124-
125-
# Prevent resource group deletion
126-
resource "null_resource" "prow_nodepool_rg_tag" {
127-
128-
provisioner "local-exec" {
129-
command = "az group update --resource-group ${module.prow_build.node_resource_group} --tags DO-NOT-DELETE=true"
130-
}
131-
132-
depends_on = [module.prow_build]
133-
}

infra/azure/terraform/k8s-infra-prow-build/logging.tf

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ limitations under the License.
1717
resource "azurerm_log_analytics_workspace_table" "this" {
1818
for_each = toset(local.log_analytics_tables)
1919

20-
name = each.value
21-
workspace_id = module.prow_build.azurerm_log_analytics_workspace_id
22-
plan = "Basic"
20+
name = each.value
21+
workspace_id = module.prow_build.azurerm_log_analytics_workspace_id
22+
plan = "Basic"
23+
total_retention_in_days = 30
2324
}

infra/azure/terraform/k8s-infra-prow-build/rbac.tf

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,6 @@ See the License for the specific language governing permissions and
1414
limitations under the License.
1515
*/
1616

17-
resource "azurerm_role_assignment" "admin" {
18-
role_definition_name = "Azure Kubernetes Service RBAC Cluster Admin"
19-
scope = module.prow_build.aks_id
20-
principal_id = data.azurerm_client_config.current.object_id # Me
21-
}
22-
2317
# Control Plane
2418

2519
resource "azurerm_role_assignment" "control_plane_mi" {
@@ -75,7 +69,7 @@ resource "azurerm_federated_identity_credential" "aks_admin_prow" {
7569
}
7670

7771
resource "azurerm_role_assignment" "aks_admin" {
78-
role_definition_name = "Azure Arc Kubernetes Cluster Admin"
72+
role_definition_name = "Azure Kubernetes Service RBAC Cluster Admin"
7973
scope = azurerm_resource_group.rg.id
80-
principal_id = azurerm_user_assigned_identity.aks_kubelet_identity.principal_id
74+
principal_id = azurerm_user_assigned_identity.aks_admin.principal_id
8175
}

infra/gcp/terraform/k8s-infra-prow-build/iam.tf

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ module "iam" {
3434
"principal://iam.googleapis.com/projects/${module.project.project_number}/locations/global/workloadIdentityPools/${module.project.project_id}.svc.id.goog/subject/ns/external-secrets/sa/external-secrets",
3535
"principal://iam.googleapis.com/projects/180382678033/locations/global/workloadIdentityPools/k8s-infra-prow-build-trusted.svc.id.goog/subject/ns/external-secrets/sa/external-secrets",
3636
"principal://iam.googleapis.com/projects/16065310909/locations/global/workloadIdentityPools/k8s-infra-prow.svc.id.goog/subject/ns/external-secrets/sa/external-secrets",
37+
"principal://iam.googleapis.com/${google_iam_workload_identity_pool.eks_cluster.name}/subject/ns/external-secrets/sa/external-secrets",
38+
"principal://iam.googleapis.com/${google_iam_workload_identity_pool.aks_cluster.name}/subject/ns/external-secrets/sa/external-secrets",
3739
]
3840
}
3941
}
@@ -55,7 +57,10 @@ resource "google_iam_workload_identity_pool_provider" "eks_cluster" {
5557
workload_identity_pool_id = google_iam_workload_identity_pool.eks_cluster.workload_identity_pool_id
5658
workload_identity_pool_provider_id = "oidc"
5759
attribute_mapping = {
58-
"google.subject" = "assertion.sub"
60+
"google.subject" = "\"ns/\" + assertion['kubernetes.io']['namespace'] + \"/sa/\" + assertion['kubernetes.io']['serviceaccount']['name']"
61+
"attribute.namespace" = "assertion['kubernetes.io']['namespace']"
62+
"attribute.service_account_name" = "assertion['kubernetes.io']['serviceaccount']['name']"
63+
"attribute.pod" = "assertion['kubernetes.io']['pod']['name']"
5964
}
6065
oidc {
6166
# From EKS cluster created in https://github.com/kubernetes/k8s.io/tree/main/infra/aws/terraform/prow-build-cluster
@@ -71,7 +76,10 @@ resource "google_iam_workload_identity_pool_provider" "eks_kops" {
7176
workload_identity_pool_id = google_iam_workload_identity_pool.eks_cluster.workload_identity_pool_id
7277
workload_identity_pool_provider_id = "kops"
7378
attribute_mapping = {
74-
"google.subject" = "assertion.sub"
79+
"google.subject" = "\"ns/\" + assertion['kubernetes.io']['namespace'] + \"/sa/\" + assertion['kubernetes.io']['serviceaccount']['name']"
80+
"attribute.namespace" = "assertion['kubernetes.io']['namespace']"
81+
"attribute.service_account_name" = "assertion['kubernetes.io']['serviceaccount']['name']"
82+
"attribute.pod" = "assertion['kubernetes.io']['pod']['name']"
7583
}
7684
oidc {
7785
# From EKS cluster created in https://github.com/kubernetes/k8s.io/tree/main/infra/aws/terraform/kops-infra-ci
@@ -97,7 +105,10 @@ resource "google_iam_workload_identity_pool_provider" "aks_cluster" {
97105
workload_identity_pool_id = google_iam_workload_identity_pool.aks_cluster.workload_identity_pool_id
98106
workload_identity_pool_provider_id = "oidc"
99107
attribute_mapping = {
100-
"google.subject" = "assertion.sub"
108+
"google.subject" = "\"ns/\" + assertion['kubernetes.io']['namespace'] + \"/sa/\" + assertion['kubernetes.io']['serviceaccount']['name']"
109+
"attribute.namespace" = "assertion['kubernetes.io']['namespace']"
110+
"attribute.service_account_name" = "assertion['kubernetes.io']['serviceaccount']['name']"
111+
"attribute.pod" = "assertion['kubernetes.io']['pod']['name']"
101112
}
102113
oidc {
103114
# From AKS cluster created in https://github.com/kubernetes/k8s.io/tree/main/infra/azure/terraform/k8s-infra-prow-build

infra/gcp/terraform/k8s-infra-prow-build/peering.tf

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,11 @@ resource "google_vmwareengine_network_peering" "gvce_peering" {
2222
vmware_engine_network = "projects/broadcom-451918/locations/global/vmwareEngineNetworks/k8s-gcp-gcve-network"
2323
export_custom_routes_with_public_ip = true
2424
import_custom_routes_with_public_ip = true
25+
lifecycle {
26+
ignore_changes = [
27+
# https://github.com/hashicorp/terraform-provider-google/issues/17817
28+
export_custom_routes_with_public_ip,
29+
import_custom_routes_with_public_ip,
30+
]
31+
}
2532
}

infra/gcp/terraform/k8s-infra-prow-build/serviceaccounts.tf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ locals {
3030
project_roles = ["roles/secretmanager.secretAccessor"],
3131
cluster_namespace = "kubernetes-external-secrets"
3232
additional_workload_identity_principals = [
33-
"principalSet://iam.googleapis.com/${google_iam_workload_identity_pool.eks_cluster.name}/*",
34-
"principalSet://iam.googleapis.com/${google_iam_workload_identity_pool.aks_cluster.name}/*"
33+
"principal://iam.googleapis.com/${google_iam_workload_identity_pool.eks_cluster.name}/subject/ns/external-secrets/sa/external-secrets",
34+
"principal://iam.googleapis.com/${google_iam_workload_identity_pool.aks_cluster.name}/subject/ns/external-secrets/sa/external-secrets"
3535
]
3636
}
3737
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,11 @@ module "prow_bucket" {
120120
role = "roles/storage.objectAdmin"
121121
member = "principalSet://iam.googleapis.com/projects/16065310909/locations/global/workloadIdentityPools/ibm-clusters/attribute.namespace/test-pods"
122122
},
123+
{
124+
// AKS build clusters, pods in the test-pods namespace only
125+
role = "roles/storage.objectAdmin"
126+
member = "principalSet://iam.googleapis.com/projects/773781448124/locations/global/workloadIdentityPools/prow-aks/attribute.namespace/test-pods"
127+
},
123128
{
124129
role = "roles/storage.objectViewer"
125130
member = "allUsers"

kubernetes/aks-prow-build/prow/kyverno.yaml

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,25 +22,29 @@ spec:
2222
# pod order matters
2323
- name: clonerefs
2424
- (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
25+
env:
26+
- name: GOOGLE_APPLICATION_CREDENTIALS
27+
value: /etc/google/adc.json
2928
volumeMounts:
3029
- mountPath: /var/run/secrets/google-iam-token/serviceaccount
3130
name: google-iam-token
3231
readOnly: true
32+
- mountPath: /etc/google
33+
name: google-adc
34+
readOnly: true
3335
containers:
3436
- name: test
3537
- (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
38+
env:
39+
- name: GOOGLE_APPLICATION_CREDENTIALS
40+
value: /etc/google/adc.json
4041
volumeMounts:
4142
- mountPath: /var/run/secrets/google-iam-token/serviceaccount
4243
name: google-iam-token
4344
readOnly: true
45+
- mountPath: /etc/google
46+
name: google-adc
47+
readOnly: true
4448
volumes:
4549
- name: google-iam-token
4650
projected:
@@ -50,3 +54,26 @@ spec:
5054
audience: sts.googleapis.com
5155
expirationSeconds: 86400
5256
path: token
57+
- name: google-adc
58+
configMap:
59+
name: google-adc
60+
---
61+
apiVersion: v1
62+
kind: ConfigMap
63+
metadata:
64+
name: google-adc
65+
data:
66+
adc.json: |
67+
{
68+
"universe_domain": "googleapis.com",
69+
"type": "external_account",
70+
"audience": "//iam.googleapis.com/projects/773781448124/locations/global/workloadIdentityPools/prow-aks/providers/oidc",
71+
"subject_token_type": "urn:ietf:params:oauth:token-type:jwt",
72+
"token_url": "https://sts.googleapis.com/v1/token",
73+
"credential_source": {
74+
"file": "/var/run/secrets/google-iam-token/serviceaccount/token",
75+
"format": {
76+
"type": "text"
77+
}
78+
}
79+
}

kubernetes/apps/kyverno.yaml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,13 @@ spec:
99
selector:
1010
matchLabels:
1111
cloud: ibm
12+
- clusters:
13+
selector:
14+
matchExpressions:
15+
- key: name
16+
operator: In
17+
values:
18+
- aks-prow-build
1219
template:
1320
metadata:
1421
name: "kyverno-{{ .name }}"
@@ -20,7 +27,7 @@ spec:
2027
sources:
2128
- chart: kyverno
2229
repoURL: "https://kyverno.github.io/kyverno"
23-
targetRevision: 3.5.1
30+
targetRevision: 3.6.1
2431
helm:
2532
releaseName: kyverno
2633
valueFiles:

kubernetes/apps/prow.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ kind: ApplicationSet
33
metadata:
44
name: prow
55
spec:
6+
ignoreApplicationDifferences:
7+
- jsonPointers:
8+
- /spec/syncPolicy
69
goTemplate: true
710
generators:
811
- clusters:
@@ -28,3 +31,5 @@ spec:
2831
automated:
2932
prune: true
3033
selfHeal: true
34+
syncOptions:
35+
- CreateNamespace=true

0 commit comments

Comments
 (0)