kubectl、helm 和 aws 调用的完整参考,请直接跳至诊断命令。
自动化诊断
在运行单个命令之前,请先尝试使用捆绑脚本:已知问题
EKS 节点组创建失败:CREATE_FAILED
症状kubectl 失败:‘You must be logged in to the server’
症状: 所有kubectl 命令都报错 error: You must be logged in to the server (Unauthorized)。
原因: kubeconfig 过期、AWS 凭证与创建集群时使用的凭证不同,或令牌已过期。
修复
aws-auth ConfigMap 授予访问权限:
Helm 安装后未创建 ALB
症状: 几分钟后,执行kubectl get ingress -n langsmith 仍看不到 ADDRESS。
原因: AWS 负载均衡控制器未运行或缺少 IRSA 权限、Terraform 预置的 ALB 未被正确引用,或者设置了 alb_scheme = "internal"(内部 ALB 没有公共地址;请参见 ALB 没有公共地址(内部方案))。
修复
来自 EKS Pod 的 RDS 连接被拒绝
症状: 后端日志显示 RDS 端点的connection refused 或 timeout。
原因: RDS 安全组不允许来自 EKS 节点安全组或集群安全组的入站 TCP 5432 流量。
修复
postgres 模块会自动设置安全组。如果该规则缺失,请重新应用:
Pod 访问 S3 被拒绝(IRSA 未配置)
症状: 后端日志在读取或写入 S3 时显示AccessDenied。
原因: LangSmith 服务账户缺少 IRSA 注解,或 S3 VPC 网关端点路由不正确。
修复
terraform.tfvars 中 create_langsmith_irsa_role = true,并且 Helm values 中的服务账户名称与 langsmith 匹配。
ElastiCache Redis 连接超时
症状: Pod 无法连接到 Redis。日志显示dial tcp: i/o timeout。
原因: ElastiCache 安全组不允许来自 EKS 节点安全组的入站 TCP 6379 流量。
修复
EKS 节点未自动扩缩容
症状: Pod 持续处于Pending 状态。节点数量未增加。
原因: 集群自动扩缩器缺少 IAM 权限、目标 ASG 设置错误,或节点组的 min_size = max_size。
修复
cert-manager 签发 Let’s Encrypt 证书失败
症状:kubectl get certificate -n langsmith 显示 READY=False。HTTP01 验证失败。
原因: ALB 未将端口 80 转发到 cert-manager 解析器 Pod,或该域名的 DNS 记录未指向 ALB。
修复
postgres_deletion_protection 阻止 terraform destroy
症状terraform.tfvars 中禁用删除保护,应用更改,然后执行销毁:
ESO 同步失败:langsmith-config secret 缺失
症状: Pod 卡在CreateContainerConfigError。kubectl get secret langsmith-config -n langsmith 返回 NotFound。
原因: ESO 同步是“全有或全无”的。如果 ExternalSecret 引用的任何一个 SSM 参数缺失,ESO 就会拒绝创建 Kubernetes Secret。所有 Pod 都会失败,包括那些与缺失参数无关的 Pod。
修复
describe 输出会显示哪个 remoteRef.key 失败。将其与 SSM 前缀 /langsmith/{name_prefix}-{environment}/ 进行匹配。
SSM 参数前缀不匹配
症状:manage-ssm.sh validate 通过,但 ESO 仍然无法同步。或者 setup-env.sh 将参数写入了一个与 ESO 期望不同的前缀下。
原因: SSM 前缀来源于 terraform.tfvars 中的 name_prefix 和 environment。如果这些值在初始设置后发生了更改,旧的参数会保存在旧的前缀下,而 ESO 会去新的前缀下查找。
修复
Terraform 验证拒绝 Postgres 密码
症状setup-env.sh 会自动生成符合要求的密码;如需手动更新:
私有 EKS 集群不可达(需要堡垒机)
症状: 当enable_public_eks_cluster = false 时,kubectl 和 terraform apply 超时。
原因: EKS API 端点是私有的。命令必须在 VPC 内部执行,可以通过堡垒主机或 VPN 连接。
修复
create_bastion = true 并重新应用,或者临时设置 enable_public_eks_cluster = true。
ALB 没有公共地址(内部方案)
症状:kubectl get ingress -n langsmith 显示了 ADDRESS,但它只在 VPC 内部可解析。
原因: 在 terraform.tfvars 中设置了 alb_scheme = "internal"。内部 ALB 只能从 VPC 内部(通过 VPN、对等连接或 PrivateLink)访问。
修复: 这是私有部署的有意设计。要使 ALB 可从公网访问:
Ingress 重建后 ALB 主机名更改
症状: LangSmith URL 停止工作。代理部署卡在DEPLOYING。DNS 记录或书签指向一个不再解析的旧 ALB 主机名。
原因: 删除 Kubernetes ingress(通过 helm uninstall、kubectl delete ingress 或删除命名空间)会解除 ALB。当 ingress 被重新创建时,会分配一个具有不同主机名的新 ALB。Helm values 中的 config.deployment.url 仍然指向旧主机名,导致运维健康检查失败,部署一直卡住。
如果 ALB 控制器创建了一个新的 ALB,而不是重用 Terraform 预置的那个,也会发生这种情况。这需要 group.name 注解与 load-balancer-arn 一起设置来防止。
预防措施
- 确保同时设置了
group.name和load-balancer-arn注解。当存在预置的 ALB 时,init-values.sh会自动完成此操作。 - 除非你计划更新所有依赖主机名的配置,否则不要删除 ingress。
- 避免不带
--server-side=false执行helm rollback。Ingress SSA 冲突可能触发删除/重建循环。
节点组扩缩容更改未被 Terraform 应用
症状: 在terraform.tfvars 中更改 min_size 或 max_size 后,terraform plan 显示 “No changes”。
原因: ASG 已被通过其他方式(AWS CLI、控制台或集群自动扩缩器)更改,且 Terraform 状态已反映新值。社区 EKS 模块会忽略 desired_size 的更改,以便自动扩缩器进行管理;min_size 和 max_size 应正常传播。
修复
诊断命令
集群访问
Pods
ALB 和 Ingress
TLS 和证书
ESO 和 Secrets
Helm
IRSA 和 IAM
LangSmith 部署
快速健康检查
Connect these docs to Claude, VSCode, and more via MCP for real-time answers.

