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