diff --git a/api/v1alpha1/shared_types.go b/api/v1alpha1/shared_types.go
index 27c8f3d2d1..75b95b0276 100644
--- a/api/v1alpha1/shared_types.go
+++ b/api/v1alpha1/shared_types.go
@@ -394,7 +394,7 @@ type KubernetesServiceSpec struct {
}
// LogLevel defines a log level for Envoy Gateway and EnvoyProxy system logs.
-// +kubebuilder:validation:Enum=trace;debug;info;warn;error
+// +kubebuilder:validation:Enum=trace;debug;info;warn;error;off;critical
type LogLevel string
const (
@@ -412,6 +412,12 @@ const (
// LogLevelError defines the "Error" logging level.
LogLevelError LogLevel = "error"
+
+ // LogLevelOff disables logging.
+ LogLevelOff LogLevel = "off"
+
+ // LogLevelCritical defines the "critical" logging level.
+ LogLevelCritical LogLevel = "critical"
)
// XDSTranslatorHook defines the types of hooks that an Envoy Gateway extension may support
diff --git a/api/v1alpha1/validation/envoyproxy_validate_test.go b/api/v1alpha1/validation/envoyproxy_validate_test.go
index 6ae59f08fb..462f149c3e 100644
--- a/api/v1alpha1/validation/envoyproxy_validate_test.go
+++ b/api/v1alpha1/validation/envoyproxy_validate_test.go
@@ -918,6 +918,22 @@ func TestGetEnvoyProxyDefaultComponentLevel(t *testing.T) {
},
expected: egv1a1.LogLevelInfo,
},
+ {
+ logging: egv1a1.ProxyLogging{
+ Level: map[egv1a1.ProxyLogComponent]egv1a1.LogLevel{
+ egv1a1.LogComponentDefault: egv1a1.LogLevelOff,
+ },
+ },
+ expected: egv1a1.LogLevelOff,
+ },
+ {
+ logging: egv1a1.ProxyLogging{
+ Level: map[egv1a1.ProxyLogComponent]egv1a1.LogLevel{
+ egv1a1.LogComponentDefault: egv1a1.LogLevelCritical,
+ },
+ },
+ expected: egv1a1.LogLevelCritical,
+ },
}
for _, tc := range cases {
@@ -975,6 +991,16 @@ func TestGetEnvoyProxyComponentLevelArgs(t *testing.T) {
},
expected: "admin:warn,filter:debug",
},
+ {
+ logging: egv1a1.ProxyLogging{
+ Level: map[egv1a1.ProxyLogComponent]egv1a1.LogLevel{
+ egv1a1.LogComponentDefault: egv1a1.LogLevelInfo,
+ egv1a1.LogComponentAdmin: egv1a1.LogLevelOff,
+ egv1a1.LogComponentFilter: egv1a1.LogLevelCritical,
+ },
+ },
+ expected: "admin:off,filter:critical",
+ },
}
for _, tc := range cases {
diff --git a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyproxies.yaml b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyproxies.yaml
index 93db35107b..f09493a2f5 100644
--- a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyproxies.yaml
+++ b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyproxies.yaml
@@ -759,6 +759,8 @@ spec:
- info
- warn
- error
+ - "off"
+ - critical
type: string
default:
default: warn
diff --git a/charts/gateway-helm/charts/crds/crds/generated/gateway.envoyproxy.io_envoyproxies.yaml b/charts/gateway-helm/charts/crds/crds/generated/gateway.envoyproxy.io_envoyproxies.yaml
index eafaa9486a..9211cd86da 100644
--- a/charts/gateway-helm/charts/crds/crds/generated/gateway.envoyproxy.io_envoyproxies.yaml
+++ b/charts/gateway-helm/charts/crds/crds/generated/gateway.envoyproxy.io_envoyproxies.yaml
@@ -758,6 +758,8 @@ spec:
- info
- warn
- error
+ - "off"
+ - critical
type: string
default:
default: warn
diff --git a/internal/infrastructure/kubernetes/proxy/resource_provider_test.go b/internal/infrastructure/kubernetes/proxy/resource_provider_test.go
index 7106c3ee4c..91f021d526 100644
--- a/internal/infrastructure/kubernetes/proxy/resource_provider_test.go
+++ b/internal/infrastructure/kubernetes/proxy/resource_provider_test.go
@@ -454,6 +454,16 @@ func TestDeployment(t *testing.T) {
},
bootstrap: `test bootstrap config`,
},
+ {
+ caseName: "component-level-off",
+ infra: newTestInfra(),
+ deploy: nil,
+ proxyLogging: map[egv1a1.ProxyLogComponent]egv1a1.LogLevel{
+ egv1a1.LogComponentDefault: egv1a1.LogLevelOff,
+ egv1a1.LogComponentFilter: egv1a1.LogLevelCritical,
+ },
+ bootstrap: `test bootstrap config`,
+ },
{
caseName: "disable-prometheus",
infra: newTestInfra(),
diff --git a/internal/infrastructure/kubernetes/proxy/testdata/deployments/component-level-off.yaml b/internal/infrastructure/kubernetes/proxy/testdata/deployments/component-level-off.yaml
new file mode 100644
index 0000000000..9a5f7556d4
--- /dev/null
+++ b/internal/infrastructure/kubernetes/proxy/testdata/deployments/component-level-off.yaml
@@ -0,0 +1,239 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ labels:
+ app.kubernetes.io/component: proxy
+ app.kubernetes.io/managed-by: envoy-gateway
+ app.kubernetes.io/name: envoy
+ gateway.envoyproxy.io/owning-gateway-name: default
+ gateway.envoyproxy.io/owning-gateway-namespace: default
+ name: envoy-default-37a8eec1
+ namespace: envoy-gateway-system
+ ownerReferences:
+ - apiVersion: gateway.networking.k8s.io/v1
+ kind: GatewayClass
+ name: envoy-gateway-class
+ uid: test-owner-reference-uid-for-gatewayclass
+spec:
+ progressDeadlineSeconds: 600
+ revisionHistoryLimit: 10
+ selector:
+ matchLabels:
+ app.kubernetes.io/component: proxy
+ app.kubernetes.io/managed-by: envoy-gateway
+ app.kubernetes.io/name: envoy
+ gateway.envoyproxy.io/owning-gateway-name: default
+ gateway.envoyproxy.io/owning-gateway-namespace: default
+ strategy:
+ type: RollingUpdate
+ template:
+ metadata:
+ annotations:
+ prometheus.io/path: /stats/prometheus
+ prometheus.io/port: "19001"
+ prometheus.io/scrape: "true"
+ labels:
+ app.kubernetes.io/component: proxy
+ app.kubernetes.io/managed-by: envoy-gateway
+ app.kubernetes.io/name: envoy
+ gateway.envoyproxy.io/owning-gateway-name: default
+ gateway.envoyproxy.io/owning-gateway-namespace: default
+ spec:
+ automountServiceAccountToken: false
+ containers:
+ - args:
+ - --service-cluster
+ - default
+ - --service-node
+ - $(ENVOY_POD_NAME)
+ - --config-yaml
+ - test bootstrap config
+ - --log-level
+ - "off"
+ - --cpuset-threads
+ - --drain-strategy
+ - immediate
+ - --component-log-level
+ - filter:critical
+ - --drain-time-s
+ - "60"
+ command:
+ - envoy
+ env:
+ - name: ENVOY_POD_NAMESPACE
+ valueFrom:
+ fieldRef:
+ apiVersion: v1
+ fieldPath: metadata.namespace
+ - name: ENVOY_POD_NAME
+ valueFrom:
+ fieldRef:
+ apiVersion: v1
+ fieldPath: metadata.name
+ - name: ENVOY_SERVICE_ZONE
+ valueFrom:
+ fieldRef:
+ apiVersion: v1
+ fieldPath: metadata.annotations['topology.kubernetes.io/zone']
+ image: docker.io/envoyproxy/envoy:distroless-dev
+ imagePullPolicy: IfNotPresent
+ lifecycle:
+ preStop:
+ httpGet:
+ path: /shutdown/ready
+ port: 19002
+ scheme: HTTP
+ livenessProbe:
+ failureThreshold: 3
+ httpGet:
+ path: /ready
+ port: 19003
+ scheme: HTTP
+ periodSeconds: 10
+ successThreshold: 1
+ timeoutSeconds: 1
+ name: envoy
+ ports:
+ - containerPort: 19001
+ name: metrics
+ protocol: TCP
+ - containerPort: 19003
+ name: readiness
+ protocol: TCP
+ readinessProbe:
+ failureThreshold: 1
+ httpGet:
+ path: /ready
+ port: 19003
+ scheme: HTTP
+ periodSeconds: 5
+ successThreshold: 1
+ timeoutSeconds: 1
+ resources:
+ requests:
+ cpu: 100m
+ memory: 512Mi
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ drop:
+ - ALL
+ privileged: false
+ runAsGroup: 65532
+ runAsNonRoot: true
+ runAsUser: 65532
+ seccompProfile:
+ type: RuntimeDefault
+ startupProbe:
+ failureThreshold: 30
+ httpGet:
+ path: /ready
+ port: 19003
+ scheme: HTTP
+ periodSeconds: 10
+ successThreshold: 1
+ timeoutSeconds: 1
+ terminationMessagePath: /dev/termination-log
+ terminationMessagePolicy: File
+ volumeMounts:
+ - mountPath: /certs
+ name: certs
+ readOnly: true
+ - mountPath: /sds
+ name: sds
+ - args:
+ - envoy
+ - shutdown-manager
+ command:
+ - envoy-gateway
+ env:
+ - name: ENVOY_POD_NAMESPACE
+ valueFrom:
+ fieldRef:
+ apiVersion: v1
+ fieldPath: metadata.namespace
+ - name: ENVOY_POD_NAME
+ valueFrom:
+ fieldRef:
+ apiVersion: v1
+ fieldPath: metadata.name
+ - name: ENVOY_SERVICE_ZONE
+ valueFrom:
+ fieldRef:
+ apiVersion: v1
+ fieldPath: metadata.annotations['topology.kubernetes.io/zone']
+ image: docker.io/envoyproxy/gateway-dev:latest
+ imagePullPolicy: IfNotPresent
+ lifecycle:
+ preStop:
+ exec:
+ command:
+ - envoy-gateway
+ - envoy
+ - shutdown
+ livenessProbe:
+ failureThreshold: 3
+ httpGet:
+ path: /healthz
+ port: 19002
+ scheme: HTTP
+ periodSeconds: 10
+ successThreshold: 1
+ timeoutSeconds: 1
+ name: shutdown-manager
+ readinessProbe:
+ failureThreshold: 3
+ httpGet:
+ path: /healthz
+ port: 19002
+ scheme: HTTP
+ periodSeconds: 10
+ successThreshold: 1
+ timeoutSeconds: 1
+ resources:
+ requests:
+ cpu: 10m
+ memory: 32Mi
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ drop:
+ - ALL
+ privileged: false
+ runAsGroup: 65532
+ runAsNonRoot: true
+ runAsUser: 65532
+ seccompProfile:
+ type: RuntimeDefault
+ startupProbe:
+ failureThreshold: 30
+ httpGet:
+ path: /healthz
+ port: 19002
+ scheme: HTTP
+ periodSeconds: 10
+ successThreshold: 1
+ timeoutSeconds: 1
+ terminationMessagePath: /dev/termination-log
+ terminationMessagePolicy: File
+ dnsPolicy: ClusterFirst
+ restartPolicy: Always
+ schedulerName: default-scheduler
+ serviceAccountName: envoy-default-37a8eec1
+ terminationGracePeriodSeconds: 360
+ volumes:
+ - name: certs
+ secret:
+ defaultMode: 420
+ secretName: envoy
+ - configMap:
+ defaultMode: 420
+ items:
+ - key: xds-trusted-ca.json
+ path: xds-trusted-ca.json
+ - key: xds-certificate.json
+ path: xds-certificate.json
+ name: envoy-default-37a8eec1
+ optional: false
+ name: sds
+status: {}
diff --git a/release-notes/current/new_features/9271-off-critical-log-level-envoyproxy.md b/release-notes/current/new_features/9271-off-critical-log-level-envoyproxy.md
new file mode 100644
index 0000000000..f1654476af
--- /dev/null
+++ b/release-notes/current/new_features/9271-off-critical-log-level-envoyproxy.md
@@ -0,0 +1 @@
+Added support for setting the log level to `off` and `critical` for the Envoy Proxy.
diff --git a/site/content/en/latest/api/extension_types.md b/site/content/en/latest/api/extension_types.md
index 8c78804007..1607dc714d 100644
--- a/site/content/en/latest/api/extension_types.md
+++ b/site/content/en/latest/api/extension_types.md
@@ -4103,6 +4103,8 @@ _Appears in:_
| `info` | LogLevelInfo defines the "Info" logging level.
|
| `warn` | LogLevelWarn defines the "Warn" logging level.
|
| `error` | LogLevelError defines the "Error" logging level.
|
+| `off` | LogLevelOff disables logging.
|
+| `critical` | LogLevelCritical defines the "critical" logging level.
|
#### Lua
diff --git a/test/helm/gateway-crds-helm/all.out.yaml b/test/helm/gateway-crds-helm/all.out.yaml
index 84c0c0a573..5953c8b9b6 100644
--- a/test/helm/gateway-crds-helm/all.out.yaml
+++ b/test/helm/gateway-crds-helm/all.out.yaml
@@ -34373,6 +34373,8 @@ spec:
- info
- warn
- error
+ - "off"
+ - critical
type: string
default:
default: warn
diff --git a/test/helm/gateway-crds-helm/e2e.out.yaml b/test/helm/gateway-crds-helm/e2e.out.yaml
index 942eab31a4..52e6332868 100644
--- a/test/helm/gateway-crds-helm/e2e.out.yaml
+++ b/test/helm/gateway-crds-helm/e2e.out.yaml
@@ -10311,6 +10311,8 @@ spec:
- info
- warn
- error
+ - "off"
+ - critical
type: string
default:
default: warn
diff --git a/test/helm/gateway-crds-helm/envoy-gateway-crds.out.yaml b/test/helm/gateway-crds-helm/envoy-gateway-crds.out.yaml
index 276e43f622..5cfb1db167 100644
--- a/test/helm/gateway-crds-helm/envoy-gateway-crds.out.yaml
+++ b/test/helm/gateway-crds-helm/envoy-gateway-crds.out.yaml
@@ -10311,6 +10311,8 @@ spec:
- info
- warn
- error
+ - "off"
+ - critical
type: string
default:
default: warn