AWS EKS中Pod启动失败:Startup probe连接拒绝排查求助
问题排查:AWS EKS Pod启动探针失败(连接拒绝8081端口)
在AWS EKS集群部署应用时,Pod无法启动,报错Startup probe failed: dial tcp 10.0.3.237:8081: connect: connection refused。调整探针initialDelaySeconds参数后问题依旧。应用需使用8081端口,已排查的安全组配置包括:NAT实例添加8081端口入站/出站规则、LB默认安全组允许8081端口从0.0.0.0/0入站、EKS托管工作负载安全组配置入站规则且出站全通,但均无效。
排查建议
排查容器内部端口监听状态:
- 通过
kubectl exec -it <pod-name> -- sh进入容器,执行netstat -tulpn或ss -tulpn检查8081端口是否被应用实际监听;若缺少工具,可临时安装(如apt install net-tools)或用nc -zv localhost 8081测试本地连接。 - 确认应用配置是否绑定
0.0.0.0而非仅127.0.0.1,后者会导致集群内无法访问端口。
- 通过
优化探针配置合理性:
- 当前启动探针
failureThreshold:3结合periodSeconds:10,总等待时长仅30秒,若应用启动较慢,可调高failureThreshold(如设为10,总等待100秒),避免因启动耗时过长触发探针失败。 - 检查
readinessProbe使用HTTPS协议,但需确认应用是否真的在8081端口提供HTTPS服务,若实际为HTTP,会导致探针失败进而影响Pod状态。
- 当前启动探针
验证NetworkPolicy限制:
- 检查集群中是否存在NetworkPolicy资源,是否阻止了kubelet(探针发起方)访问Pod的8081端口。可临时删除相关策略测试,或添加允许kubelet访问的规则。
检查节点安全组配置:
- 确认EKS节点安全组是否允许集群Pod CIDR段的所有流量入站,kubelet与Pod间的通信未被阻止。
测试跨Pod网络连通性:
- 在同一节点的其他Pod中,执行
nc -zv 10.0.3.237 8081(替换为报错中的Pod IP),若无法连通,问题出在Pod内部或节点到Pod的网络;若能连通,需排查kubelet的访问限制。
- 在同一节点的其他Pod中,执行
相关配置片段
部署YAML片段
spec: enableServiceLinks: false containers: - name: {{ .Chart.Name }} image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" imagePullPolicy: IfNotPresent ports: - containerPort: 8081 {{- if .Values.probes.enabled }} readinessProbe: httpGet: scheme: HTTPS path: /healthz port: 8081 failureThreshold: 3 initialDelaySeconds: 30 periodSeconds: 10 livenessProbe: tcpSocket: port: 8081 failureThreshold: 6 initialDelaySeconds: 30 periodSeconds: 10 startupProbe: tcpSocket: port: 8081 failureThreshold: 3 initialDelaySeconds: 30 periodSeconds: 10 {{- end }}
测试Pod配置
apiVersion: v1 kind: Pod metadata: name: goproxy labels: app: goproxy spec: containers: - name: goproxy image: registry.k8s.io/goproxy:0.1 ports: - containerPort: 8081 readinessProbe: tcpSocket: port: 8081 initialDelaySeconds: 5 periodSeconds: 10 livenessProbe: tcpSocket: port: 8081 initialDelaySeconds: 15 periodSeconds: 20
内容的提问来源于stack exchange,提问作者Avocado
相关产品推荐
相关产品推荐

