Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
7ae5aea
sandbox-controller: Update to version main-17
k8s-on-aws-manager-app[bot] Jul 31, 2025
d41e1ef
sandbox-controller: Update to version main-18
k8s-on-aws-manager-app[bot] Aug 5, 2025
5e1c6c5
kube-state-metrics: Update to version v2.16.0-master-30
k8s-on-aws-manager-app[bot] Aug 5, 2025
5e2cdb2
sandbox-controller: Update to version main-19
k8s-on-aws-manager-app[bot] Aug 7, 2025
6741e5c
deployment-controller: Update to version master-271
k8s-on-aws-manager-app[bot] Aug 11, 2025
c7aebf1
deployment-status-service: Update to version master-271
k8s-on-aws-manager-app[bot] Aug 11, 2025
cd6db0b
skipper: update main to v0.22.76
AlexanderYastrebov Aug 12, 2025
d16d834
Merge pull request #9758 from zalando-incubator/skipper/update-main-v…
AlexanderYastrebov Aug 12, 2025
6fe1bd5
Merge dev to dev-to-alpha
k8s-on-aws-manager-app[bot] Aug 12, 2025
7b8172c
Merge pull request #9754 from zalando-incubator/container-registry.za…
demonCoder95 Aug 12, 2025
60d6af5
Merge pull request #9753 from zalando-incubator/container-registry.za…
demonCoder95 Aug 12, 2025
106ce20
update karpenter CRDs for v1.6.0
demonCoder95 Aug 13, 2025
f56a214
update Karpenter image version to v1.6.0
demonCoder95 Aug 13, 2025
acd7ba0
Merge pull request #9760 from zalando-incubator/dev-to-alpha
zaklawrencea Aug 13, 2025
84a9804
Merge alpha to alpha-to-beta
k8s-on-aws-manager-app[bot] Aug 13, 2025
1cbfc2e
Merge dev to dev-to-alpha
k8s-on-aws-manager-app[bot] Aug 13, 2025
27b1b2a
Merge pull request #9740 from zalando-incubator/container-registry.za…
katyanna Aug 13, 2025
74697d6
Merge dev to dev-to-alpha
k8s-on-aws-manager-app[bot] Aug 13, 2025
a644c80
Merge pull request #9761 from zalando-incubator/karpenter-1.6
demonCoder95 Aug 13, 2025
8f01ad3
Merge dev to dev-to-alpha
k8s-on-aws-manager-app[bot] Aug 13, 2025
cedca6e
Add string docs for RBAC read-only testing
katyanna Aug 14, 2025
60920c1
Add flow example
katyanna Aug 15, 2025
d0b5ca9
kube-aws-iam-controller: Update to version v0.3.0-84-g8bed7f3
k8s-on-aws-manager-app[bot] Aug 15, 2025
08eb2fa
make etcd image resolution automatic
myaser Aug 14, 2025
5e4e0a3
Merge pull request #9768 from zalando-incubator/read-only-note
demonCoder95 Aug 15, 2025
c9fc703
Merge dev to dev-to-alpha
k8s-on-aws-manager-app[bot] Aug 15, 2025
540ca07
Merge pull request #9769 from zalando-incubator/container-registry.za…
linki Aug 18, 2025
1b8c941
Merge pull request #9751 from zalando-incubator/container-registry.za…
linki Aug 18, 2025
9fda179
Merge dev to dev-to-alpha
k8s-on-aws-manager-app[bot] Aug 18, 2025
dbf0726
add tcondeixa in zappr file
Aug 18, 2025
b72ba13
Merge pull request #9771 from zalando-incubator/add-maintainer
zaklawrencea Aug 18, 2025
16c213f
Merge dev to dev-to-alpha
k8s-on-aws-manager-app[bot] Aug 18, 2025
f1a0d4d
Merge pull request #9766 from zalando-incubator/etcd-arm-configs
demonCoder95 Aug 18, 2025
9ea6299
Merge dev to dev-to-alpha
k8s-on-aws-manager-app[bot] Aug 18, 2025
9fb95fc
Merge pull request #9765 from zalando-incubator/dev-to-alpha
demonCoder95 Aug 19, 2025
fda6df0
Merge alpha to alpha-to-beta
k8s-on-aws-manager-app[bot] Aug 19, 2025
a019eba
Merge pull request #9764 from zalando-incubator/alpha-to-beta
myaser Aug 19, 2025
3d61eeb
Merge beta to beta-to-stable
k8s-on-aws-manager-app[bot] Aug 19, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .zappr.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ approvals:
- demonCoder95
- MustafaSaber
- vlktna
- tcondeixa

# mandatory pull request labels
pull-request:
Expand Down
3 changes: 2 additions & 1 deletion cluster/config-defaults.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -765,7 +765,8 @@ etcd_instance_type: "t3.medium"

etcd_scalyr_key: ""

etcd_ami: {{ amiID "zalando-ubuntu-etcd-production-v3.5.18-amd64-main-35" "861068367966"}}
etcd_ami_amd64: {{ amiID "zalando-ubuntu-etcd-production-v3.5.22-amd64-main-38" "861068367966"}}
etcd_ami_arm64: {{ amiID "zalando-ubuntu-etcd-production-v3.5.22-arm64-main-38" "861068367966"}}

cluster_dns: "coredns"
coredns_log_svc_names: "true"
Expand Down
10 changes: 9 additions & 1 deletion cluster/etcd/stack.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ Metadata:
"kubernetes:component": "etcd-cluster"
application: "kubernetes"
component: "etcd-cluster"
Mappings:
Images:
{{.Cluster.Region}}:
# Use the etcd instance architecture to construct the config item name that we're using to get the AMI name.
MachineImage: '{{ index .Cluster.ConfigItems (print "etcd_ami_" .Values.etcd_instance_type_info.Architecture) }}'
Outputs:
EtcdClusterSecurityGroupId:
Description: "Security Group ID of the etcd cluster"
Expand Down Expand Up @@ -53,7 +58,10 @@ Resources:
IamInstanceProfile:
Name: !Ref AppServerInstanceProfile
InstanceInitiatedShutdownBehavior: terminate
ImageId: {{.Cluster.ConfigItems.etcd_ami}}
ImageId: !FindInMap
- Images
- !Ref 'AWS::Region'
- MachineImage
InstanceType: {{.Cluster.ConfigItems.etcd_instance_type}}
UserData:
Fn::Base64: !Sub |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ spec:
hostNetwork: true
containers:
- name: kube-aws-iam-controller
image: container-registry.zalando.net/teapot/kube-aws-iam-controller:v0.3.0-82-g83974de
image: container-registry.zalando.net/teapot/kube-aws-iam-controller:v0.3.0-84-g8bed7f3
env:
- name: AWS_DEFAULT_REGION
value: "{{.Cluster.Region}}"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ spec:
terminationGracePeriodSeconds: 300
containers:
- name: "deployment-service-controller"
image: "container-registry.zalando.net/teapot/deployment-controller:master-270"
image: "container-registry.zalando.net/teapot/deployment-controller:master-271"
args:
- "--config-namespace=kube-system"
- "--decrypt-kms-alias-arn=arn:aws:kms:{{ .Cluster.Region }}:{{ .Cluster.InfrastructureAccountID }}:alias/deployment-secret"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# {{ $image := "container-registry.zalando.net/teapot/deployment-status-service:master-270" }}
# {{ $image := "container-registry.zalando.net/teapot/deployment-status-service:master-271" }}
# {{ $version := index (split $image ":") 1 }}

apiVersion: apps/v1
Expand Down
2 changes: 1 addition & 1 deletion cluster/manifests/kube-state-metrics/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ spec:
serviceAccountName: kube-state-metrics
containers:
- name: kube-state-metrics
image: container-registry.zalando.net/teapot/kube-state-metrics:v2.15.0-master-29
image: container-registry.zalando.net/teapot/kube-state-metrics:v2.16.0-master-30
args:
- --resources=certificatesigningrequests,configmaps,cronjobs,daemonsets,deployments,endpoints,horizontalpodautoscalers,ingresses,jobs,limitranges,mutatingwebhookconfigurations,namespaces,networkpolicies,nodes,persistentvolumeclaims,persistentvolumes,poddisruptionbudgets,pods,replicasets,replicationcontrollers,resourcequotas,secrets,services,statefulsets,storageclasses,validatingwebhookconfigurations,volumeattachments
- --metric-labels-allowlist=pods=[{{.Cluster.ConfigItems.observability_metrics_pods_labels}}],ingresses=[{{.Cluster.ConfigItems.observability_metrics_ingresses_labels}}],nodes=[topology.kubernetes.io/zone,node.kubernetes.io/instance-type,node.kubernetes.io/node-pool,node.kubernetes.io/role,node.kubernetes.io/profile,dedicated]
Expand Down
2 changes: 1 addition & 1 deletion cluster/manifests/sandbox-controller/30-deployment.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# {{ $image := "container-registry.zalando.net/gwproxy/sandbox-controller:main-16" }}
# {{ $image := "container-registry.zalando.net/gwproxy/sandbox-controller:main-19" }}
# {{ $version := index (split $image ":") 1 }}

{{ if eq .Cluster.ConfigItems.sandbox_controller_enabled "true" }}
Expand Down
2 changes: 1 addition & 1 deletion cluster/manifests/skipper/deployment.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{{/* image-updater-bot detects *image variables so use print to disable it for main image */}}

{{ $main_image := print "container-registry.zalando.net/teapot/skipper-internal:" "v0.22.62-1169" }}
{{ $main_image := print "container-registry.zalando.net/teapot/skipper-internal:" "v0.22.76-1183" }}
{{ $canary_image := "container-registry.zalando.net/teapot/skipper-internal:v0.22.76-1183" }}

{{/* Optional canary arguments separated by "[cf724afc]" to allow whitespaces, e.g. "-foo=has a whitespace[cf724afc]-baz=qux" */}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -718,6 +718,22 @@ spec:
description: The ID of the AWS account that owns the capacity reservation.
pattern: ^[0-9]{12}$
type: string
reservationType:
default: default
description: The type of capacity reservation.
enum:
- default
- capacity-block
type: string
state:
default: active
description: |-
The state of the capacity reservation. A capacity reservation is considered to be expiring if it is within the EC2
reclaimation window. Only capacity-block reservations may be in this state.
enum:
- active
- expiring
type: string
required:
- availabilityZone
- id
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ spec:
- message: label "kubernetes.io/hostname" is restricted
rule: self != "kubernetes.io/hostname"
- message: label domain "karpenter.k8s.aws" is restricted
rule: self in ["karpenter.k8s.aws/capacity-reservation-id", "karpenter.k8s.aws/ec2nodeclass", "karpenter.k8s.aws/instance-encryption-in-transit-supported", "karpenter.k8s.aws/instance-category", "karpenter.k8s.aws/instance-hypervisor", "karpenter.k8s.aws/instance-family", "karpenter.k8s.aws/instance-generation", "karpenter.k8s.aws/instance-local-nvme", "karpenter.k8s.aws/instance-size", "karpenter.k8s.aws/instance-cpu", "karpenter.k8s.aws/instance-cpu-manufacturer", "karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz", "karpenter.k8s.aws/instance-memory", "karpenter.k8s.aws/instance-ebs-bandwidth", "karpenter.k8s.aws/instance-network-bandwidth", "karpenter.k8s.aws/instance-gpu-name", "karpenter.k8s.aws/instance-gpu-manufacturer", "karpenter.k8s.aws/instance-gpu-count", "karpenter.k8s.aws/instance-gpu-memory", "karpenter.k8s.aws/instance-accelerator-name", "karpenter.k8s.aws/instance-accelerator-manufacturer", "karpenter.k8s.aws/instance-accelerator-count"] || !self.find("^([^/]+)").endsWith("karpenter.k8s.aws")
rule: self in ["karpenter.k8s.aws/capacity-reservation-type", "karpenter.k8s.aws/capacity-reservation-id", "karpenter.k8s.aws/ec2nodeclass", "karpenter.k8s.aws/instance-encryption-in-transit-supported", "karpenter.k8s.aws/instance-category", "karpenter.k8s.aws/instance-hypervisor", "karpenter.k8s.aws/instance-family", "karpenter.k8s.aws/instance-generation", "karpenter.k8s.aws/instance-local-nvme", "karpenter.k8s.aws/instance-size", "karpenter.k8s.aws/instance-cpu", "karpenter.k8s.aws/instance-cpu-manufacturer", "karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz", "karpenter.k8s.aws/instance-memory", "karpenter.k8s.aws/instance-ebs-bandwidth", "karpenter.k8s.aws/instance-network-bandwidth", "karpenter.k8s.aws/instance-gpu-name", "karpenter.k8s.aws/instance-gpu-manufacturer", "karpenter.k8s.aws/instance-gpu-count", "karpenter.k8s.aws/instance-gpu-memory", "karpenter.k8s.aws/instance-accelerator-name", "karpenter.k8s.aws/instance-accelerator-manufacturer", "karpenter.k8s.aws/instance-accelerator-count"] || !self.find("^([^/]+)").endsWith("karpenter.k8s.aws")
minValues:
description: |-
This field is ALPHA and can be dropped or replaced at any time
Expand Down
4 changes: 2 additions & 2 deletions cluster/manifests/z-karpenter/09-karpenter.sh_nodepools.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ spec:
- message: label "kubernetes.io/hostname" is restricted
rule: self.all(x, x != "kubernetes.io/hostname")
- message: label domain "karpenter.k8s.aws" is restricted
rule: self.all(x, x in ["karpenter.k8s.aws/capacity-reservation-id", "karpenter.k8s.aws/ec2nodeclass", "karpenter.k8s.aws/instance-encryption-in-transit-supported", "karpenter.k8s.aws/instance-category", "karpenter.k8s.aws/instance-hypervisor", "karpenter.k8s.aws/instance-family", "karpenter.k8s.aws/instance-generation", "karpenter.k8s.aws/instance-local-nvme", "karpenter.k8s.aws/instance-size", "karpenter.k8s.aws/instance-cpu", "karpenter.k8s.aws/instance-cpu-manufacturer", "karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz", "karpenter.k8s.aws/instance-memory", "karpenter.k8s.aws/instance-ebs-bandwidth", "karpenter.k8s.aws/instance-network-bandwidth", "karpenter.k8s.aws/instance-gpu-name", "karpenter.k8s.aws/instance-gpu-manufacturer", "karpenter.k8s.aws/instance-gpu-count", "karpenter.k8s.aws/instance-gpu-memory", "karpenter.k8s.aws/instance-accelerator-name", "karpenter.k8s.aws/instance-accelerator-manufacturer", "karpenter.k8s.aws/instance-accelerator-count"] || !x.find("^([^/]+)").endsWith("karpenter.k8s.aws"))
rule: self.all(x, x in ["karpenter.k8s.aws/capacity-reservation-type", "karpenter.k8s.aws/capacity-reservation-id", "karpenter.k8s.aws/ec2nodeclass", "karpenter.k8s.aws/instance-encryption-in-transit-supported", "karpenter.k8s.aws/instance-category", "karpenter.k8s.aws/instance-hypervisor", "karpenter.k8s.aws/instance-family", "karpenter.k8s.aws/instance-generation", "karpenter.k8s.aws/instance-local-nvme", "karpenter.k8s.aws/instance-size", "karpenter.k8s.aws/instance-cpu", "karpenter.k8s.aws/instance-cpu-manufacturer", "karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz", "karpenter.k8s.aws/instance-memory", "karpenter.k8s.aws/instance-ebs-bandwidth", "karpenter.k8s.aws/instance-network-bandwidth", "karpenter.k8s.aws/instance-gpu-name", "karpenter.k8s.aws/instance-gpu-manufacturer", "karpenter.k8s.aws/instance-gpu-count", "karpenter.k8s.aws/instance-gpu-memory", "karpenter.k8s.aws/instance-accelerator-name", "karpenter.k8s.aws/instance-accelerator-manufacturer", "karpenter.k8s.aws/instance-accelerator-count"] || !x.find("^([^/]+)").endsWith("karpenter.k8s.aws"))
type: object
spec:
description: |-
Expand Down Expand Up @@ -280,7 +280,7 @@ spec:
- message: label "kubernetes.io/hostname" is restricted
rule: self != "kubernetes.io/hostname"
- message: label domain "karpenter.k8s.aws" is restricted
rule: self in ["karpenter.k8s.aws/capacity-reservation-id", "karpenter.k8s.aws/ec2nodeclass", "karpenter.k8s.aws/instance-encryption-in-transit-supported", "karpenter.k8s.aws/instance-category", "karpenter.k8s.aws/instance-hypervisor", "karpenter.k8s.aws/instance-family", "karpenter.k8s.aws/instance-generation", "karpenter.k8s.aws/instance-local-nvme", "karpenter.k8s.aws/instance-size", "karpenter.k8s.aws/instance-cpu", "karpenter.k8s.aws/instance-cpu-manufacturer", "karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz", "karpenter.k8s.aws/instance-memory", "karpenter.k8s.aws/instance-ebs-bandwidth", "karpenter.k8s.aws/instance-network-bandwidth", "karpenter.k8s.aws/instance-gpu-name", "karpenter.k8s.aws/instance-gpu-manufacturer", "karpenter.k8s.aws/instance-gpu-count", "karpenter.k8s.aws/instance-gpu-memory", "karpenter.k8s.aws/instance-accelerator-name", "karpenter.k8s.aws/instance-accelerator-manufacturer", "karpenter.k8s.aws/instance-accelerator-count"] || !self.find("^([^/]+)").endsWith("karpenter.k8s.aws")
rule: self in ["karpenter.k8s.aws/capacity-reservation-type", "karpenter.k8s.aws/capacity-reservation-id", "karpenter.k8s.aws/ec2nodeclass", "karpenter.k8s.aws/instance-encryption-in-transit-supported", "karpenter.k8s.aws/instance-category", "karpenter.k8s.aws/instance-hypervisor", "karpenter.k8s.aws/instance-family", "karpenter.k8s.aws/instance-generation", "karpenter.k8s.aws/instance-local-nvme", "karpenter.k8s.aws/instance-size", "karpenter.k8s.aws/instance-cpu", "karpenter.k8s.aws/instance-cpu-manufacturer", "karpenter.k8s.aws/instance-cpu-sustained-clock-speed-mhz", "karpenter.k8s.aws/instance-memory", "karpenter.k8s.aws/instance-ebs-bandwidth", "karpenter.k8s.aws/instance-network-bandwidth", "karpenter.k8s.aws/instance-gpu-name", "karpenter.k8s.aws/instance-gpu-manufacturer", "karpenter.k8s.aws/instance-gpu-count", "karpenter.k8s.aws/instance-gpu-memory", "karpenter.k8s.aws/instance-accelerator-name", "karpenter.k8s.aws/instance-accelerator-manufacturer", "karpenter.k8s.aws/instance-accelerator-count"] || !self.find("^([^/]+)").endsWith("karpenter.k8s.aws")
minValues:
description: |-
This field is ALPHA and can be dropped or replaced at any time
Expand Down
2 changes: 1 addition & 1 deletion cluster/manifests/z-karpenter/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ spec:
drop:
- ALL
readOnlyRootFilesystem: true
image: "container-registry.zalando.net/teapot/karpenter:1.5.0-main-39.patched"
image: "container-registry.zalando.net/teapot/karpenter:1.6.0-main-40.patched"
imagePullPolicy: IfNotPresent
env:
- name: KUBERNETES_MIN_VERSION
Expand Down
8 changes: 8 additions & 0 deletions test/e2e/authorization.go
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,14 @@ var _ = g.Describe("Authorization [RBAC] [Zalando]", func() {
})
})

// NOTE: The read-only role is restricted by RBAC to non-mutating operations.
// Such requests bypass the admission controller, which only processes
// mutating requests. Admission controller tests for this role are unnecessary,
// as access control is fully enforced at the RBAC authorization stage.
// Flow example:
// 1. Request Received → RBAC checks role permissions.
// 2. Read-Only Role (`GET`) → Allowed by RBAC, **skips** admission controller.
// 3. Read-Only Role (`DELETE`) → Blocked by RBAC, so never reaches admission controller.
g.Context("For ReadOnly group", func() {
var tc testCase
g.BeforeEach(func() {
Expand Down