Skip to content

Commit e6162cf

Browse files
authored
Merge branch 'main' into feat/startup-probe-gtw
2 parents 885d4f4 + 4eed2f8 commit e6162cf

284 files changed

Lines changed: 25977 additions & 6371 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/dependabot.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,8 @@ updates:
118118
- dependency-name: "github.com/envoyproxy/go-control-plane*"
119119
# Ignore all k8s.io packages on release branches to avoid unintended k8s version bumps
120120
- dependency-name: "k8s.io/*"
121+
# Ignore sigs.k8s.io/gateway-api on release branches to avoid unintended Gateway API version bumps
122+
- dependency-name: "sigs.k8s.io/gateway-api"
121123
groups:
122124
gomod:
123125
patterns:
@@ -169,6 +171,8 @@ updates:
169171
- dependency-name: "github.com/envoyproxy/go-control-plane*"
170172
# Ignore all k8s.io packages on release branches to avoid unintended k8s version bumps
171173
- dependency-name: "k8s.io/*"
174+
# Ignore sigs.k8s.io/gateway-api on release branches to avoid unintended Gateway API version bumps
175+
- dependency-name: "sigs.k8s.io/gateway-api"
172176
groups:
173177
gomod:
174178
patterns:

api/v1alpha1/authorization_types.go

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ type Authorization struct {
3030
}
3131

3232
// AuthorizationRule defines a single authorization rule.
33+
//
34+
// +kubebuilder:validation:XValidation:rule="has(self.principal) || has(self.cel)",message="at least one of principal or cel must be specified"
3335
type AuthorizationRule struct {
3436
// Name is a user-friendly name for the rule.
3537
// If not specified, Envoy Gateway will generate a unique name for the rule.
@@ -52,9 +54,45 @@ type AuthorizationRule struct {
5254
// If there are multiple principal types, all principals must match for the rule to match.
5355
// For example, if there are two principals: one for client IP and one for JWT claim,
5456
// the rule will match only if both the client IP and the JWT claim match.
55-
Principal Principal `json:"principal"`
57+
//
58+
// +optional
59+
Principal *Principal `json:"principal,omitempty"`
60+
61+
// CEL specifies a Common Expression Language expression to evaluate for the
62+
// request. If specified, the expression must evaluate to true for the rule to match.
63+
//
64+
// The expression can use Envoy attributes exposed to the CEL runtime.
65+
// Request attributes, such as request.path, request.url_path, request.host,
66+
// request.scheme, request.method, request.headers, and request.query, are
67+
// generally available during authorization. Connection attributes, such as
68+
// source.address, source.port, destination.address, destination.port,
69+
// connection.mtls, and connection.requested_server_name, may also be used.
70+
// Dynamic metadata and filter state produced by earlier filters may also be
71+
// available through attributes such as metadata and filter_state.
72+
// Response attributes are only available after the request completes and
73+
// should not be used for authorization decisions.
74+
//
75+
// For more details, see:
76+
// https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/advanced/attributes
77+
//
78+
// The rule matches only when the expression evaluates to a boolean true.
79+
// Non-boolean results, false, null, and CEL evaluation errors are treated as
80+
// no match.
81+
//
82+
// Examples:
83+
// `request.headers['x-tenant'] == 'team-a'`
84+
// `request.method == 'POST' && request.path.startsWith('/admin')`
85+
//
86+
// +optional
87+
CEL *CELExpression `json:"cel,omitempty"`
5688
}
5789

90+
// CELExpression specifies a CEL expression.
91+
//
92+
// +kubebuilder:validation:MinLength=1
93+
// +kubebuilder:validation:MaxLength=4096
94+
type CELExpression string
95+
5896
// Operation specifies the operation of a request.
5997
//
6098
// +kubebuilder:validation:XValidation:rule="has(self.methods) || has(self.path)",message="at least one of methods or path must be specified"

api/v1alpha1/envoygateway_helpers.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ func (e *EnvoyGateway) GatewayNamespaceMode() bool {
110110
return e.Provider != nil &&
111111
e.Provider.Kubernetes != nil &&
112112
e.Provider.Kubernetes.Deploy != nil &&
113+
e.Provider.Kubernetes.Deploy.Type != nil &&
113114
*e.Provider.Kubernetes.Deploy.Type == KubernetesDeployModeTypeGatewayNamespace
114115
}
115116

api/v1alpha1/ratelimit_types.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -433,12 +433,16 @@ type PathMatch struct {
433433

434434
// RateLimitValue defines the limits for rate limiting.
435435
type RateLimitValue struct {
436+
// Requests intentionally sets Format=int64. Controller-gen renders uint32 as
437+
// format int32, whose range is below Maximum=4294967295 and would be rejected
438+
// in Kubernetes 1.36+
439+
436440
// Requests is the number of requests (or cost units, when used with
437441
// cost-based rate limiting) allowed per Unit.
438442
//
439443
// +kubebuilder:validation:Minimum=1
440444
// +kubebuilder:validation:Maximum=4294967295
441-
// +kubebuilder:validation:Format=uint32
445+
// +kubebuilder:validation:Format=int64
442446
Requests uint32 `json:"requests"`
443447
Unit RateLimitUnit `json:"unit"`
444448
// FromMetadata sources the limit value from per-request dynamic metadata.

api/v1alpha1/securitypolicy_types.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ type SecurityPolicy struct {
4949
// +kubebuilder:validation:XValidation:rule="has(self.targetRef) ? self.targetRef.kind in ['Gateway', 'HTTPRoute', 'GRPCRoute', 'TCPRoute'] : true", message="this policy can only have a targetRef.kind of Gateway/HTTPRoute/GRPCRoute/TCPRoute"
5050
// +kubebuilder:validation:XValidation:rule="has(self.targetRefs) ? self.targetRefs.all(ref, ref.group == 'gateway.networking.k8s.io') : true ", message="this policy can only have a targetRefs[*].group of gateway.networking.k8s.io"
5151
// +kubebuilder:validation:XValidation:rule="has(self.targetRefs) ? self.targetRefs.all(ref, ref.kind in ['Gateway', 'HTTPRoute', 'GRPCRoute', 'TCPRoute']) : true ", message="this policy can only have a targetRefs[*].kind of Gateway/HTTPRoute/GRPCRoute/TCPRoute"
52-
// +kubebuilder:validation:XValidation:rule="(has(self.authorization) && has(self.authorization.rules) && self.authorization.rules.exists(r, has(r.principal.jwt))) ? has(self.jwt) : true", message="if authorization.rules.principal.jwt is used, jwt must be defined"
52+
// +kubebuilder:validation:XValidation:rule="(has(self.authorization) && has(self.authorization.rules) && self.authorization.rules.exists(r, has(r.principal) ? has(r.principal.jwt) : false)) ? has(self.jwt) : true", message="if authorization.rules.principal.jwt is used, jwt must be defined"
5353
type SecurityPolicySpec struct {
5454
PolicyTargetReferences `json:",inline"`
5555

api/v1alpha1/zz_generated.deepcopy.go

Lines changed: 10 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

charts/gateway-addons-helm/Chart.lock

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@ dependencies:
1919
version: 1.3.1
2020
- name: opentelemetry-collector
2121
repository: https://open-telemetry.github.io/opentelemetry-helm-charts
22-
version: 0.159.0
23-
digest: sha256:be0a00f1e10a1dc28ac0d24bc2663574c846f665566a4d36f7a6489f59ea8281
24-
generated: "2026-06-23T03:32:18.054105612Z"
22+
version: 0.159.2
23+
digest: sha256:2b45964580ba403a616a6546a3f544878c757dddb72854509294fd970d2d2794
24+
generated: "2026-07-01T04:22:11.232246258Z"

charts/gateway-addons-helm/Chart.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,5 +51,5 @@ dependencies:
5151
condition: tempo.enabled
5252
- name: opentelemetry-collector
5353
repository: https://open-telemetry.github.io/opentelemetry-helm-charts
54-
version: 0.159.0
54+
version: 0.159.2
5555
condition: opentelemetry-collector.enabled

charts/gateway-addons-helm/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ An Add-ons Helm chart for Envoy Gateway
2626
| https://grafana.github.io/helm-charts | grafana | 10.5.15 |
2727
| https://grafana.github.io/helm-charts | loki | 7.0.0 |
2828
| https://grafana.github.io/helm-charts | tempo | 1.3.1 |
29-
| https://open-telemetry.github.io/opentelemetry-helm-charts | opentelemetry-collector | 0.159.0 |
29+
| https://open-telemetry.github.io/opentelemetry-helm-charts | opentelemetry-collector | 0.159.2 |
3030
| https://prometheus-community.github.io/helm-charts | prometheus | 29.10.1 |
3131

3232
## Usage

charts/gateway-crds-helm/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ A Helm chart for Envoy Gateway CRDs
2323
Please refer to Helm's [documentation](https://helm.sh/docs) to get started.
2424

2525
If you want to manage the CRDs outside of the Envoy Gateway Helm chart, you can use this chart to install the CRDs separately.
26-
If you do, make sure that you don't install the CRDs again when installing the Envoy Gateway Helm chart, by using `--skip-crds` flag.
26+
If you do, make sure that you don't install the CRDs again when installing the Envoy Gateway Helm chart, by using `--set crds.enabled=false`.
2727
If your Kubernetes provider already manages Gateway API CRDs for the cluster, compare the provider-installed Gateway API
2828
version and channel with the [Envoy Gateway compatibility matrix](https://gateway.envoyproxy.io/news/releases/matrix/)
2929
and the Gateway API resources you plan to use. If they are compatible, leave those CRDs disabled in this chart and

0 commit comments

Comments
 (0)