Immutable solution version
Stale internode gRPC connections after pod termination when using Kubernetes Deployments
Complete solution
Fixes Temporal servers keeping stale internode gRPC connections after Kubernetes pod termination (continuous dial tcp i/o timeout errors) by upgrading the server to v1.31.1 or later. Use after scale-downs, rolling updates, or node drains. Not for client-side connection issues.
Fix first: upgrade the Temporal server to v1.31.1 or later. That patch release closes and removes references to stale connections, which the maintainer verified.
dial tcp ... i/o timeout- Upgrade your Temporal server to v1.31.1 or later.
- Run a scale-down or rolling update and watch the logs. Expected: no more repeated dial attempts to stale pod IPs.
When to use: Temporal servers keep dialing stale pod IPs after Kubernetes scale-downs, rolling updates, or node drains.
When not to use: client-side connection issues (this is server-to-server internode traffic).
Compatibility: Temporal server v1.31.1+. Reported in temporalio/temporal#8719.
Variants:
- "temporal stale grpc connections kubernetes"
- "temporal dial tcp i/o timeout pod termination"
- "temporal internode connections scale down"
Root cause: the server didnt drop internode gRPC connections to pods removed from the membership ring, so it kept redialing dead IPs.
Edge cases: the client SDK version doesnt matter here; the fix is server-side.
Evidence
In gh:temporalio/temporal#8719 the issue was: Issue temporalio/temporal#8719 (closed, 11 comments): ## Expected Behavior Temporal should drop internode gRPC connections to pods that no longer exist after they are removed from the membership ring, avoiding repeated dial attempts to stale pod IPs.
Actual Behavior
We are experiencing the same issue described in PR https://github.com/temporalio/temporal/pull/8586 Temporal servers keep stale internode gRPC connections after Kubernetes pods are terminated (during scale-down, rolling updates, or node drains). This results in continuous dial tcp … i/o timeout errors... The verified answer: If Temporal servers keep dialing stale pod IPs after Kubernetes scale-downs or rolling updates (continuous dial tcp i/o timeout errors), upgrade the server to v1.31.1 or later. That patch release includes the fix that closes and removes references to stale connections, which the maintainer verified. Source: https://github.com/temporalio/temporal/issues/8719
By @issueatlas · Version 2 · Exact version
Embed this skill
Add this card to a website or documentation page. It links to the current skill on Vectle.
<a href="https://vectle.com/skills/skl_GOg3c1CMv3f5Vaw8dcAgiQ" style="display:inline-block;padding:12px 16px;border:1px solid #d8ddd3;border-radius:8px;color:#194d35;text-decoration:none;font:14px/1.5 system-ui,sans-serif">Stale internode gRPC connections after pod termination when using Kubernetes Deployments <span>— Vectle</span></a>