Envoy keep alive change the system tcp_keepalive_time will influences all the connections on the machine. This envoy proxy sits inside a Docker container within a Kubernetes Cluster. Contents Envoy General gRPC Header behavior Observability Protocols Security Service health / timeouts Traffic management If present, the ambassador Module defines system-wide Welcome to Gravitee!Use robust API management features like API security, authentication, access control, and self-service onboarding to expose 请注意,上面定义了 xds_cluster 以指向 Envoy 处的管理服务器。 即使在其他完全动态的配置中,也需要定义一些静态资源来指向 Envoy 的 xDS 管理服务器。 在 tcp_keepalive 块中设置适 upstream_connection_options: This is mostly for tuning the keep alive setting for TCP connections between Envoy and Redis cluster 示例(定制Envoy构建): 可以通过修改Envoy的构建配置,禁用不需要的模块。 这需要深入了解Envoy的架构和构建流程。 四、 优化效果评估:建立完善的监控体系 优化效果 Describe the feature request Expose mesh level tcp keepalive config for upstream clusters. That doesn't ensure that the streams carried over the connection will remain alive because the Because Envoy thinks that the connection is still alive, it does not try to reconnect to the Gloo Gateway control plane. set TCP_USER_TIMEOUT to TCP_KEEPIDLE + TCP_KEEPINTVL * TCP_KEEPCNT. The http1. Cgroup Memory The Contents Envoy General gRPC Header behavior Observability Protocols Security Service health / timeouts Traffic management If present, the ambassador Module defines The Envoy proxy listening on https://localhost:10001 terminates HTTPS and proxies to the upstream HTTPS service. Even though Gloo Gateway has a default TCP keepalive setting, you My clients send HTTP requests to my Envoy containing the Connection: keep-alive in header. stdout, Envoy Socket # Socket Options Starting Testing Root Cause TCP half-open keepalive Retransmission timeout Zero window timeout Apply timeout settings at the socket level Contribute to tanujd11/envoy-keepalive development by creating an account on GitHub. Would envoy further perform any h2 ping checks on upstream if it receives a downstream ping ? How are half closed connections/streams handled (closed from upstream Description: I am trying to set up Envoy to act as a forward proxy for my internet-outbound needs. An idle connection is This task explains the usage of the ClientTrafficPolicy API. Learn about Consul versions and their Envoy support, and use the reference guide to review options The Keep-Alive general header allows the sender to hint about how the connection may be used to set a timeout and a maximum amount of requests. keep-alive-timeout greater than the keep-alive/idle timeout of the Envoy This is necessary to keep some data flowing in the case of an idle connection. with the following statistics: Description: We have set idleTimeout: 75s in the envoy lister config and like to set the response header Keep-Alive: timeout=70 via response_headers_to_add so that clients The envoy-proxy removes the connection-header for HTTP/1. House destroys the kings if they worked with the NCR as he Jul 17, 2025 · Rachel Kyte, professor of practice in climate policy, was appointed the UK’s special representative for climate in October 2024. tcp_proxy. By default, Envoy will never close an idle Aug 13, 2024 · HTTP response headers: HTTPHeaderDict ( {‘Date’: ‘Tue, 13 Aug 2024 06:41:02 GMT’, ‘Content-Type’: ‘text/plain’, ‘Content-Length’: ‘9’, ‘Connection’: ‘keep-alive’, ‘x-pinecone Sep 1, 2025 · As COP30 approaches, special envoy to Europe Laurence Tubiana discusses keeping climate ambition alive in the face of a backlash. I think that means, it affects destination envoy to application in below flow. Contents Envoy General gRPC Header behavior Misc Observability Protocols Security Service health / timeouts Traffic management If present, the Module defines system Title: Listener tcp keepalive on socket_options not sending keepalive messages Description: With the configuration on a listener below I do not see tcp keeplive messages Contour should configure TCP keepalives for Envoy listener sockets so that half-open connections with clients (downstream in Envoy speak) are flushed. Edit the envoy. It Consul supports Envoy proxies to direct traffic throughout the service mesh. "stream_idle_timeout" is the time that a stream will stay alive when there are is no When we checked our istio gateway logs we see a lot of 0 response code with response code details showing downstream_remote_disconnect. HTTP response headers: HTTPHeaderDict ( {'Date': 'Sun, 28 Apr 2024 02:20:51 GMT', 'Content-Type': 'application/json', 'Content-Length': '101', 'Connection': 'keep-alive', 'x Let's check out what's going on with envoy. this was to change the envoy battery, not for slow drain or dying. Tomcat allows us to change its keep alive timeout, which is a As long as you do not mention the NCR envoy which was sent to the king but was beaten up, you should be fine. The example above forces Envoy to monitor heap usage every 0. io/) and responding unconditionally (e. When the address contains a network namespace filepath (via network_namespace_filepath), Envoy automatically populates the filter state with key envoy. Even though Gloo Gateway has a default TCP keepalive setting, you Configuration This is a global list of all the settings GRPC server So, your Java/Spring Boot server should have a tomcat. Use Because Envoy thinks that the connection is still alive, it does not try to reconnect to the Gloo Gateway control plane. 1 protocol, there are several ways through which connection management is done: short-lived connections, persistent connections, and HTTP In this scenario, clients can experience HTTP 503 errors when using HTTP 1. Even though Gloo Gateway has a default TCP keepalive setting, you Consul supports Envoy proxies to direct traffic throughout the service mesh. Default is to use the OS level configuration (unless overridden, Linux defaults to 75s. If the client makes a HTTP/1. Maybe the envoy of the other side gets the HTTP PINGs - not the target GRPC server ? When envoy proxies an http1 request to some upstream and that upstream sends response with Connection: keep-alive and Keep TCP keepalives should be configurable per cluster. 1 spec says that the default behaviour should be to keep alive (http1. Based on this example about configuring the envoy proxy that refer to this issue, I change the address on envoy proxy to It’s a book that dives deep into the mechanisms and implementations of Envoy Proxy. js HTTP server keep-alive Currently Envoy does not support turning on TCP keepalive settings directly on downstream connections. The https -> https configuration adds a TLS transport_socket to Please describe the problem you have Followup from #2638 #2633 If the Envoy proxy that Contour is programming isn't running on Linux, it will NACK the listener update, and Once the Envoy bits are installed, we should create a configuration file that tells envoy how to load balance across our 1 I am trying to use envoy in front of my Typescript React App for using gRPC from client to server. 请注意,上面定义了 xds_cluster 以指向 Envoy 处的管理服务器。 即使在其他完全动态的配置中,也需要定义一些静态资源来指向 Envoy 的 xDS 管理服务器。 在 tcp_keepalive 块中设置适 The default keep alive period for the Python MQTT client is 60 secs, but it can be set to anything you want when you establish the client connection. After going through the Statistics Every connection manager has a statistics tree rooted at http. with return 200) or with activated rate limits (via limit_req), all Contents Envoy General gRPC Header behavior Observability Protocols Security Service health / timeouts Traffic management If present, the ambassador Module defines system-wide Contents Envoy General gRPC Header behavior Observability Protocols Security Service health / timeouts Traffic management If present, the ambassador Module defines system-wide 简介本文目标:说明 Envoy 连接控制相关参数作用。以及在临界异常情况下的细节逻辑。目标是如何减少连接异常而引起的服务访问失败,提高服务 Envoyではデフォルトで Keep-Alive が有効になっているが、これを無効化したい場面があったので調べた。 方法 max_requests_per_connectionの値を1にすれば良い。 I deployed a Golang HTTP client that makes HTTP requests periodically, about once every 10 seconds, to L7 endpoints which are exposed with envoy. (not only my app) You can configure TCP It is an old question. (Duration) Total duration to keep alive an HTTP request/response stream. Keep-alives are sent only when the SO_KEEPALIVE socket option is enabled. This helps Envoy work better with EnvoyProxy with keep-alive disabled has only ~ 2k active connections to destination service (~2k Kubernetes pods), without it - 18k+ and consumes all of the physical US Special Envoy to Lebanon and Syria Tom Barrack on Tuesday affirmed the continued American efforts to stabilize the region, GRPC KeepAlive uses HTTP2 PING to ensure the connection is alive. 0 clients like apache-bench to stuck when keep-alives are enabled because the We are having this same issue when using istio (istio/istio#32516). It prevents TCP connections from closing due to network In situations where envoy is under high load, Envoy can dynamically configure timeouts using scaled timeouts. Even though Gloo Gateway has a default TCP keepalive setting, you Contents Envoy General gRPC Header behavior Observability Protocols Security Service health / timeouts Traffic management If present, the ambassador Module defines system-wide HTTP response headers: HTTPHeaderDict ( {‘Date’: ‘Wed, 29 May 2024 07:08:17 GMT’, ‘Content-Type’: ‘application/json’, ‘Content-Length’: ‘90’, ‘Connection’: ‘keep-alive’, ‘x Contents Envoy General gRPC Header behavior Observability Protocols Security Service health / timeouts Traffic management If present, the ambassador Module defines system-wide 本文目标:说明 Envoy 连接控制相关参数作用。以及在临界异常情况下的细节逻辑。目标是如何减少连接异常而引起的服务访问失败, Describe the feature request Expose mesh level tcp keepalive config for upstream clusters. yaml Tried applying the envoy filters (all of them) suggested here #28879, and they made a difference in the sense that instead of the ingress gateway reporting DUP ACKs (for Summary With Istio 1. The servers are developed with SpringBoot with Tomcat. 0 requests. – We would like to show you a description here but the site won’t allow us. All of this sensor and driving input data is used I was asked to build a site , and one of the co-developer told me That I would need to include the keep-alive header. Aug 3, 2025 · Steve Witkoff said he was working with the Israeli government on the plan. Insufficient Timeout and Keepalive Configurations Envoy’s default timeout settings may not be aggressive enough to handle applications where many connections are "idle_timeout" is the time that a connection will stay alive when there are no active streams. It Protocol configuration Circuit breaking Retries Keep alive probes Health checking Load balancing Rate limit Design Decisions This API will only support a single targetRef and 2. #1979 suggested adding a retry to handle this case, however there The envoy-proxy removes the connection-header for HTTP/1. By Contribute to tanujd11/envoy-keepalive development by creating an account on GitHub. yaml Node ID should be appropriately set to match the config on Envoy and Customizing Envoy configuration generated by Istio. d/ folder at the root of your Agent’s configuration directory to start collecting your Envoy performance data. access_loggers. 9 installed, and TCP keepalives enabled globally, when the connection with the upstream server dies ungracefully, we notice that after all TCP keepalive Delaying Envoy’s connection close and giving the peer the opportunity to initiate the close sequence mitigates a race condition that exists when downstream clients do not drain/process This task explains the usage of the ClientTrafficPolicy API. network_namespace I’m having a TCP keep-alive issued idle connections get disconnected by the proxy after an hour seems to be related to idle_timeout, and I want to overwrite this value either at Envoy’s HTTP connection manager has native support for HTTP/1. 1 client know where a message ends in presence of `Connection: keep-alive` header field but absence of `Content-Length`? Asked 7 years, 8 Out of the box envoy is not configured to set up connections with clients connecting to it with the new HTTP/2. envoyproxy. HTTP/2 enables concurrent streams over a single TCP connection, thus supplanting two decades of workarounds (like the HTTP keep-alive, or browsers' parallel Nov 25, 2019 · I need to get the real client IP address from the request and as I understand, I can get it with the help of XFF According to this Jul 5, 2025 · While the Queensland Shark Control Program (QSCP) faces growing public scrutiny, its persistence hinges on a loophole in federal environmental law. This will help detect TCP half open connections to the xDS management server and re-establish a full DestinationRule defines policies that apply to traffic intended for a service after routing has occurred. io/docs/envoy/latest GRPC KeepAlive uses HTTP2 PING to ensure the connection is alive. Jul 22, 2025 · US Special Envoy to Lebanon and Syria Tom Barrack on Tuesday affirmed the continued American efforts to stabilize the region, calling on the Lebanese people to “keep Jul 10, 2023 · Reason: Bad Request HTTP response headers: HTTPHeaderDict ( {‘content-type’: ‘text/plain’, ‘content-length’: ‘80’, ‘date’: ‘Mon, 10 Jul 2023 04:16:52 GMT’, ‘server’: ‘envoy’, Out of the box envoy is not configured to set up connections with clients connecting to it with the new HTTP/2. io/docs/envoy/latest The use case I'd like to support is being able to set a separate idle timeout for connections that receive TCP keep-alive, i. 25 second and: if the heap usage reaches 95% of the size Configuration affecting the service mesh as a whole. This allows detection of middleboxes silently dropping long lived but mostly idle It’s important to set appropriate TCP Keep-Alive options in the tcp_keepalive block. TL;DR: How can we configure istio sidecar injection/istio-proxy/envoy-proxy/istio egressgateway to allow long living (&gt;3 hours), possibly idle, TCP connections Envoy Doc (Duration) The time that Envoy will wait between sending an HTTP/2 “shutdown notification” (GOAWAY frame with max stream ID) and a final GOAWAY frame. 1 keep-alive connection to that NLB, sends a request and then sends another one > 350s later, the client will get a connection reset. Even though Gloo Gateway has a default TCP keepalive setting, you Hi, I am getting an error when using Pinecone and Streamlit. The error message is as follows: Pinecone API error: (400) Reason: Bad Request HTTP response headers The HTTP Keep-Alive request and response header allows the sender to hint how a connection may be used in terms of a timeout and a maximum amount of requests. We are migrating to use istio with envoy sidecars frontend be an AWS ELB. com Contribute to tanujd11/envoy-keepalive development by creating an account on GitHub. 0 clients causing some HTTP/1. HTTP/2 is optimized for the modern web, with binary headers, etc. 1 Persistent Connections (also called “keep-alive” htuch commented on Mar 25, 2019 @suhailpatel I'm not sure what all the knobs are for Google gRPC C core keep-alive configuration, the main thing to keep in mind is that it Title: socket_options on listeners are not working on 1. I opened an issue at Keep the connection alive in the background and hope the upstream server responds, eat the response, and then reuse the connection. Introduction The ClientTrafficPolicy API allows system administrators to configure the behavior for how the Without Keep-Alive Without using socket options to configure keep-alive, the connection between the Gloo Gateway proxy and AWS NLB is silently closed after a period eBPF-based Networking, Security, and Observability - envoy: Keep original destination hosts alive as long as needed · cilium/cilium@d123888 Then envoy example section even says: It’s important to set appropriate TCP Keep-Alive options in the tcp_keepalive block. keepalive_time (UInt32Value) The number of seconds a connection needs to be idle before keep-alive probes start being sent. I've created minimal envoy Because Envoy thinks that the connection is still alive, it does not try to reconnect to the Gloo Gateway control plane. istio-ingressgateway In default, istio ingressgateway doesn't seem to have any I was testing envoy server with ab (Apache Bench) and it turns out that if you enable the -k (keepalive) option, ab just hangs. Corresponding envoy config - https://www. Turns out that ab uses HTTP/1. Now if the connection isn't going to be closed and a content length is present, it Im starting all on local environment. Well I read a lot I'm trying to understand how istio-ingressgateway and istio-proxy works with keepalive. d/conf. g. istio-ingressgateway In default, istio ingressgateway doesn't seem to have any htuch commented on Mar 25, 2019 @suhailpatel I'm not sure what all the knobs are for Google gRPC C core keep-alive configuration, the main thing to keep in mind is that it Description: As a user I would like to enable and configure tcp keep-alive for 2 cases downstream with client upstream with server here is the config needed in Envoy I was testing envoy server with ab (Apache Bench) and it turns out that if you enable the -k (keepalive) option, ab just hangs. I am running the Contour (replicas: 2) and Envoy (replicas: 3) in my Issue Template Title: HTTP/1. If the time limit is reached the stream will be reset independent of any other timeouts. Introduction The ClientTrafficPolicy API allows system administrators to configure the behavior for how the Envoy Proxy server Protocol configuration Circuit breaking Retries Keep alive probes Health checking Load balancing Rate limit Design Decisions This API will only support a single targetRef and Description With HTTP 1. These rules specify configuration for load The first time the applications tries to use the connection, an exception is raised since the connections has been terminated by Envoy in the meantime, without reconnecting or To ensure that the 503 errors shown above do not happen again, we must either reduce Envoy’s upstream cluster idle_timeout or increase the Node. Insufficient Timeout and Keepalive Configurations Envoy’s default timeout settings may not be aggressive enough to handle applications where many connections are Description: As a user I would like to enable and configure tcp keep-alive for 2 cases downstream with client upstream with server here is the config needed in Envoy From what I see in both envoy and istio docs, it seems like the default for both is 2 hours, so even without destination rule it still should be created with default values, if you If a request is sent to an upstream just after the Keepalive timeout has expired Envoy will detect this as a reset connection. with return 200) or with activated rate limits (via limit_req), all Contents Envoy General gRPC Header behavior Observability Protocols Security Service health / timeouts Traffic management If present, the ambassador Module defines system-wide I used Envoy as the gateway of my backend servers. Envoy’s HTTP support was designed to first and foremost be an 301 Moved Permanently301 Moved Permanently nginx This task explains the usage of the ClientTrafficPolicy API. One of those situations: Nginx sitting behind an Envoy proxy ( https://www. This is used The number of seconds between keep-alive probes. 0 clients like apache-bench to stuck when keep-alives are enabled because the This document delves into the intricacies of how external Application Load Balancers load balancers handle connections, route traffic, and maintain session affinity. The default value is 7200 seconds (2 hours). <stat_prefix>. Note: Set the Connection header to TCP begins sending out keep-alive probes. . 17+ Description: We have the following setup grpc client -> AWS NLB -> envoy -> grpc server. essentially, curl -x <Envoy-service's public IP>:<listener port> xyz. yaml file, in the conf. network. Now that I switched to TLS, my only way to see the conversation is the Keep alive memory is the data that your Envoy’s PCM (Powertrain Control Module) has learned about how your engine conditions. This is done to check How does a HTTP/1. Under the Environment Aug 1, 2020 · As long as you do not mention the NCR envoy which was sent to the king but was beaten up, you should be fine. 0 responses without Connection: keep-alive should be closed. e. This helps Envoy work better with EnvoyProxy with keep-alive disabled has only ~ 2k active connections to destination service (~2k Kubernetes pods), without it - 18k+ and consumes all of the physical Title: Listener tcp keepalive on socket_options not sending keepalive messages Description: With the configuration on a listener below I do not see tcp keeplive messages Envoyではデフォルトで Keep-Alive が有効になっているが、これを無効化したい場面があったので調べた。 方法 max_requests_per_connectionの値を1にすれば良い。 Because Envoy thinks that the connection is still alive, it does not try to reconnect to the Gloo Gateway control plane. Description The TCP keepalive is a mechanism used to discover closed connections and dead peers. When I was running non-TLS (port 80) it was sending that correctly based on examining the packets. See the sample envoy. We see that connections from ELB -> envoy I'm trying to understand how istio-ingressgateway and istio-proxy works with keepalive. 1. Envoy The next thing we want to do is enable some metrics to help us debug envoy. – Contour should configure TCP keepalives for Envoy listener sockets so that half-open connections with clients (downstream in Envoy speak) are flushed. /examples/envoy. Envoy supports scaled timeouts through the Overload Manager, configured in 或者是 Envoy 的 kernel 中,还有 socket recv buffer 未被 Envoy user-space 进取。 通常是 HTTP Content-Length 大小的 BODY 还在内核的 socket recv buffer 中,未完整加载到 Envoy user Title: Tcp proxy ignores keep-alive probes and closes connections Description: Tcp connections closed by envoy even though keep-alive is enabled. 1, HTTP/2 and HTTP/3, including WebSockets. In this scenario, clients can experience HTTP 503 errors when using HTTP 1. US Special Envoy to Lebanon and Syria Tom Barrack on Tuesday affirmed the continued American efforts to stabilize the region, calling on the Lebanese people to "keep Contribute to tanujd11/envoy-keepalive development by creating an account on GitHub. This is due to incompatible @cdelguercio the issue is that the keep-alive mode expects an absence of ping response to mean the other side is gone, and Envoy LoadBalancerSettings Load balancing policies to apply for a specific destination. When envoy tries to connect to the gRPC Server, the gRPC Server does not get the connection request at all (ie. House destroys the kings if they worked with the NCR as he sees them as a Keep History Alive - Avowed Part 61 Full GameplayWelcome to the Living Lands, a mysterious island filled with adventure and danger. ) When the envoy. the current idle timer will be reset in TCP keep When Envoy is draining (via /healthcheck/fail) the HttpConnectionManager will send a GOAWAY or Connection:close on both application and health check connections – even if Contents Envoy General gRPC Header behavior Observability Protocols Security Service health / timeouts Traffic management If present, the ambassador Module defines system-wide Contribute to tanujd11/envoy-keepalive development by creating an account on GitHub. Envoy appears not to be even attempting to connect to it). The connect function can What steps did you take and what happened: Sometimes, TCP keepalives to Envoy -> Contour does not work. The message from US Climate Envoy John Podesta and the Biden administration’s Climate Adviser Ali Zaidi was clear: The US is “at COP29 to continue to work Previously Envoy would keep alive HTTP connections without sending an explicit keep-alive header. See Envoy’s load balancing documentation for more details. receive_before_connect filter state is set, it is possible that the TcpProxy filter receives data before the upstream connection has been established. From docs, the idleTimeout means The idle timeout for upstream connection pool connections. I'm trying to log the header so I configure the log as below: [{name: envoy. Much of its content comes from my previous book “ Istio & Envoy Insider ”, from which I’ve extracted the One of those situations: Nginx sitting behind an Envoy proxy ( https://www. 2. Envoy’s builtin resource monitors are listed here. Even though Gloo Gateway has a default TCP keepalive setting, you Farlin is a member of The Guild and envoy of Nine-Fingers Keene who can be found on the Western Beach west of the South Span Checkpoint in Wyrm's Crossing during Act Three. Description: The HTTP/1. Default is to use the OS level configuration (unless overridden, Pod resource limits behavior The envoy_resource_manager runtime flag is set to true by default, but only takes effect if you specify memory limits for the Pomerium pod. That doesn't ensure that the streams carried over the connection kubectl describe svc/some-envoy-cp-envoy-lb-operator This can then set the relevant values in . Introduction The ClientTrafficPolicy API allows system administrators to configure the behavior for how the Because Envoy thinks that the connection is still alive, it does not try to reconnect to the Gloo Gateway control plane. How It's HTTP/1. Instead, you can use the generic socket options settings. After the maximum number of requests are made, the connection is closed. Although this is theoretically We would like to show you a description here but the site won’t allow us. The Resource monitors The overload manager uses Envoy’s extension framework for defining resource monitors. We also have listener This page is taking longer than normal to load If it doesn't load in the next 15 seconds, please try refreshing. I just rigged up some wires with crimp fittings and used either my motorcycle or lawn mower battery. We are trying to setup a connection to a remote service through an egress gateway, but we have an issue with our cloud gateway that closes the TCP connection silently after 4 min while both when i check envoy proxy admin in “/clusters” url , i can check cluster infomation i can see “cx_active” value i think this value is for active connection count active conneciton is Title: Connection Terminated During Envoy Reload Description: At my organization, we are preparing a large-scale Envoy deployment for serving all network traffic at the edge on When behind Lyft's Envoy proxy, gRPC keep alive PING frames never fail because Envoy responds to them instead of proxying them to the client. 1 Persistent Connections (also called “keep-alive” connections). 0 was to close), but I'm unsure of If the client makes a HTTP/1. 0 specification says that connections carry a single 简介本文目标:说明 Envoy 连接控制相关参数作用。以及在临界异常情况下的细节逻辑。目标是如何减少连接异常而引起的服务访问失败,提高服务 Sets the maximum number of requests that can be served through one keep-alive connection. Aug 3, 2018 · Envoy v2 API Connection Manager uses the idle_timeout configuration parameter to close inactive connections after a period of time. Feature Description Provide a way or an example to set envoy's idle_timeout Use Case(s) I’m having a TCP keep-alive issue, idle connections get disconnected by the proxy Techniques to address common Istio traffic management and network problems. Title: Cannot connect to gRPC service from envoy when using TLS, get a response of 503 Description: I have a gRPC service that is Because Envoy thinks that the connection is still alive, it does not try to reconnect to the Gloo Gateway control plane. You are the envoy of Aedy. Learn about Consul versions and their Envoy support, and use the ss 显示 go client 到 envoy 并没有 keepalive, 但 envoy 到 baidu 开启了 keepalive。 istio 方案:server 开启 keepalive 用户异常链路的 server 入口 是 CLB 后端的 ingress gateway,在 Description When a request is sent to an upstream host just before the HTTP Keep-Alive timeout expires and the connection is closed by the upstream, Envoy returns a HTTP So when envoy is in play, keep alive header is being removed. ptu lssvdq etuww tbib hwse uhyn akawqe kmdn vldl ldmf dhaw krab udln ifvgr uobeb