kubectl, helm, and aws calls used throughout this page, skip to Diagnostic commands.
Automated diagnostics
Before running individual commands, try the bundled scripts:Known issues
EKS node group creation fails: CREATE_FAILED
Symptomkubectl fails: “You must be logged in to the server”
Symptom: Allkubectl commands fail with error: You must be logged in to the server (Unauthorized).
Cause: The kubeconfig is stale, the AWS credentials differ from those that created the cluster, or the token has expired.
Fix
aws-auth ConfigMap:
ALB not created after Helm install
Symptom:kubectl get ingress -n langsmith shows no ADDRESS after several minutes.
Cause: AWS Load Balancer Controller is not running or lacks IRSA permissions, the Terraform-provisioned ALB is not referenced correctly, or alb_scheme = "internal" is set (internal ALBs have no public address; see ALB has no public address).
Fix
RDS connection refused from EKS pods
Symptom: Backend logs showconnection refused or timeout for the RDS endpoint.
Cause: The RDS security group does not allow inbound TCP 5432 from the EKS node or cluster security group.
Fix
postgres module sets up the security group automatically. If the rule is missing, re-apply:
S3 access denied from pods (IRSA not configured)
Symptom: Backend logs showAccessDenied when reading or writing S3.
Cause: IRSA annotation missing from the LangSmith service account, or the S3 VPC Gateway Endpoint is not routing correctly.
Fix
create_langsmith_irsa_role = true in terraform.tfvars and that the service account name in the Helm values matches langsmith.
ElastiCache Redis connection timeout
Symptom: Pods cannot connect to Redis. Logs showdial tcp: i/o timeout.
Cause: ElastiCache security group does not allow inbound TCP 6379 from the EKS node security group.
Fix
EKS nodes not autoscaling
Symptom: Pods remainPending. Node count does not increase.
Cause: Cluster Autoscaler lacks IAM permissions, targets the wrong ASG, or min_size = max_size on the node group.
Fix
cert-manager fails to issue Let’s Encrypt certificate
Symptom:kubectl get certificate -n langsmith shows READY=False. HTTP01 challenge is failing.
Cause: The ALB is not forwarding port 80 to the cert-manager solver pod, or the DNS record for the domain does not point to the ALB.
Fix
postgres_deletion_protection blocks terraform destroy
Symptomterraform.tfvars, apply, then destroy:
ESO fails to sync: langsmith-config secret missing
Symptom: Pods stuck inCreateContainerConfigError. kubectl get secret langsmith-config -n langsmith returns NotFound.
Cause: ESO sync is all-or-nothing. If any single SSM parameter referenced by the ExternalSecret is missing, ESO refuses to create the Kubernetes Secret. All pods fail, including those unrelated to the missing parameter.
Fix
describe output shows which remoteRef.key failed. Match it against the SSM prefix /langsmith/{name_prefix}-{environment}/.
SSM parameter prefix mismatch
Symptom:manage-ssm.sh validate passes but ESO still cannot sync. Or setup-env.sh wrote parameters under a different prefix than ESO expects.
Cause: The SSM prefix is derived from name_prefix and environment in terraform.tfvars. If these changed after initial setup, the old parameters live under the old prefix and ESO looks under the new one.
Fix
Postgres password rejected by Terraform validation
Symptomsetup-env.sh produces a compliant password automatically; to update manually:
Private EKS cluster unreachable (bastion required)
Symptom:kubectl and terraform apply time out when enable_public_eks_cluster = false.
Cause: The EKS API endpoint is private. Commands must run from within the VPC, either via the bastion host or a VPN connection.
Fix
create_bastion = true and re-apply, or temporarily set enable_public_eks_cluster = true.
ALB has no public address (internal scheme)
Symptom:kubectl get ingress -n langsmith shows an ADDRESS, but it resolves only within the VPC.
Cause: alb_scheme = "internal" was set in terraform.tfvars. Internal ALBs are only reachable from within the VPC (VPN, peering, or PrivateLink).
Fix: Intentional for private deployments. To make the ALB publicly reachable:
ALB hostname changed after ingress recreation
Symptom: The LangSmith URL stops working. Agent deployments stuck inDEPLOYING. DNS records or bookmarks point to an old ALB hostname that no longer resolves.
Cause: Deleting the Kubernetes ingress (via helm uninstall, kubectl delete ingress, or namespace deletion) deprovisions the ALB. When the ingress is recreated, a new ALB with a different hostname is issued. The config.deployment.url in Helm values still points to the old hostname, so the operator’s health checks fail and deployments stay stuck.
This also happens if the ALB controller creates a new ALB instead of reusing the Terraform pre-provisioned one. The group.name annotation is required alongside load-balancer-arn to prevent this.
Prevention
- Ensure
group.nameandload-balancer-arnannotations are both set.init-values.shdoes this automatically when a pre-provisioned ALB exists. - Do not delete the ingress unless you plan to update all hostname-dependent config.
- Avoid
helm rollbackwithout--server-side=false. The ingress SSA conflict can trigger a delete/recreate cycle.
Node group scaling changes not applied by Terraform
Symptom: Changingmin_size or max_size in terraform.tfvars shows “No changes” on terraform plan.
Cause: The ASG was changed out-of-band (AWS CLI, console, or cluster autoscaler) and the Terraform state already reflects the new values. The community EKS module ignores desired_size changes so the autoscaler can manage it; min_size and max_size should propagate normally.
Fix
Diagnostic commands
Cluster access
Pods
ALB and ingress
TLS and certificates
ESO and secrets
Helm
IRSA and IAM
LangSmith Deployment
Quick health check
Connect these docs to Claude, VSCode, and more via MCP for real-time answers.

