TCP keepalive
Manage idle and stale connections with TCP keepalive.
The steps in this section use the Envoy-based kgateway data plane. The steps do not work with the agentgateway data plane.
About TCP keepalive
With keepalive, the kernel sends probe packets with only an acknowledgement flag (ACK) to the TCP socket of the destination after the connection was idle for a specific amount of time. This way, the connection does not have to be re-established repeatedly, which could otherwise lead to latency spikes. If the destination returns the packet with an acknowledgement flag (ACK), the connection is determined to be alive. If not, the probe can fail a certain number of times before the connection is considered stale. Gloo Gateway can then close the stale connection, which can help avoid longer timeouts and retries on broken or stale connections.
Before you begin
Follow the Get started guide to install Gloo Gateway.
Follow the Sample app guide to create a gateway proxy with an HTTP listener and deploy the httpbin sample app.
Get the external address of the gateway and save it in an environment variable.
Set up TCP keepalive
Create a BackendConfigPolicy that applies TCP keepalive settings to the httpbin service.
kubectl apply -f- <<EOF kind: BackendConfigPolicy apiVersion: gateway.kgateway.dev/v1alpha1 metadata: name: httpbin-keepalive namespace: httpbin spec: targetRefs: - name: httpbin group: "" kind: Service tcpKeepalive: keepAliveProbes: 3 keepAliveTime: 30s keepAliveInterval: 5s EOFSetting Description keepAliveProbesThe maximum number of keepalive probes to send without a response before a connection is considered stale. keepAliveTimeThe number of seconds a connection needs to be idle before keep-alive probes are sent. keepAliveIntervalThe number of seconds between keep-alive probes. Port-forward the gateway proxy on port 19000.
kubectl port-forward deployment/http -n gloo-system 19000Get the configuration of your gateway proxy as a config dump.
curl -X POST 127.0.0.1:19000/config_dump\?include_eds > gateway-config.jsonOpen the config dump and find the
kube_httpbin_httpbin_8000cluster. Verify that you see all the connection settings that you enabled in your BackendConfigPolicy.Example output
... "connect_timeout": "5s", "metadata": {}, "upstream_connection_options": { "tcp_keepalive": { "keepalive_probes": 3, "keepalive_time": 30, "keepalive_interval": 5 } } }, ...
Cleanup
You can remove the resources that you created in this guide.
kubectl delete backendconfigpolicy httpbin-keepalive -n httpbin