Kubernetes中Pod应用无法连接及启动探针超时问题求助
问题分析:Applicare应用无法访问及启动探针超时问题
问题背景
通过以下YAML配置在Kubernetes中部署了Applicare应用(包含Namespace、ConfigMap、Deployment、Service、HPA、PodDisruptionBudget),但无法访问Pod内的服务,执行kubectl describe pod -n applicare applicare-db4dcb7c7-6zzzw得到启动探针超时错误。
部署YAML配置
--- apiVersion: v1 kind: Namespace metadata: name: applicare labels: name: applicare --- apiVersion: v1 data: app.properties: | applicare.dbVendor=MySql applicare.autoPersist=true applicare.useSNMP=0 applicare.stuckthread.max=600 applicare.updateUrl=http\://support.arcturustech.com applicare.systemUser=JFUuyKJT1Ls\= applicare.smtp_auth_pwd=Ni2Bih3nCUU\= applicare.useRSTATD=1 applicare.blackboxSaveType=all applicare.invokeRSTATD=1 applicare.enableChartScrollbar=true heapTracker.interval=240 applicare.serverPort=8880 applicare.serverSSL=true applicare.dbDriverClass=com.mysql.jdbc.Driver applicare.SMTPSSL=false applicare.adminName=AdminServer applicare.dbPassword=Applicare01$1 applicare.alertDuration=3 applicare.dbUsername=applicare01 applicare.smtp_host=localhost applicare.dburl=jdbc\:mysql\://192.168.1.209\:3306/applicarenew?allowPublicKeyRetrieval\=true&useSSL\=false applicare.smtp_auth_user=test applicare.custAlertClass= applicare.serverIP=192.168.1.209 applicare.agentJobInterval=1 applicare.dbTestSQL=SELECT 1 applicare.smtp_from= applicare.enable_readonly_mode=false applicare.sendMailTo=test@localhost.com applicare.alertMonitorJobInterval=1 applicare.alertOn=1 applicare.intellitrace.auto_refresh=60000 applicare.SMTPPort=25 applicare.enable_server_time=false applicare.systemPassword=JFUuyKJT1Ls\= applicare.serverName= applicare.httpErrorCode=400 applicare.monitorOn=1 applicare.ipLocUpdate.jobInterval=60 applicare.alertClearanceNotificationDuration=3 applicare.logDir=/usr/local/Applicare/logs applicare.dataSource=Applicare-DataSource applicare.minTimeBetweenAlerts=5 kind: ConfigMap metadata: name: applicare-config namespace: applicare --- apiVersion: apps/v1 kind: Deployment metadata: namespace: applicare labels: run: applicare name: applicare spec: replicas: 3 selector: matchLabels: run: applicare template: metadata: annotations: labels: run: applicare spec: containers: - image: 'applicare:latest' imagePullPolicy: Never name: applicare resources: requests: memory: "2000Mi" cpu: "200m" limits: memory: "5000Mi" cpu: "2000m" volumeMounts: - name: app-config mountPath: /usr/local/Applicare/Applicare.props subPath: app.properties livenessProbe: httpGet: path: /applicare/login/console.jsp port: 8880 failureThreshold: 5 periodSeconds: 60 # terminationGracePeriodSeconds: 200 initialDelaySeconds: 180 startupProbe: httpGet: path: /applicare/login/console.jsp port: 8880 failureThreshold: 3 periodSeconds: 90 volumes: - name: app-config configMap: name: applicare-config --- apiVersion: v1 kind: Service metadata: namespace: applicare name: applicare-service spec: selector: run: applicare ports: - port: 8880 targetPort: 8880 name: port1 - port: 8984 targetPort: 8983 name: port2 --- apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: applicare namespace: applicare spec: maxReplicas: 3 minReplicas: 1 scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: applicare metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 80 - type: Resource resource: name: memory target: type: Utilization averageUtilization: 97 --- apiVersion: policy/v1 kind: PodDisruptionBudget metadata: name: applicare-pdb namespace: applicare spec: minAvailable: 1 selector: matchLabels: run: applicare
错误信息
Warning Unhealthy 14m kubelet Startup probe failed: Get "http://10.1.0.82:8880/applicare/login/console.jsp": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
排查结论与修复建议
这个问题是YAML配置错误+应用网络监听/启动逻辑问题共同导致的,并非单一的端口开放问题,核心问题点及修复步骤如下:
1. 最紧急的配置冲突:SSL与探针协议不匹配
- ConfigMap中
applicare.serverSSL=true启用了HTTPS,但Deployment的探针用的是httpGet(HTTP协议),直接导致探针无法与应用建立连接,引发超时。 - 修复:要么将探针改为HTTPS模式(添加
scheme: HTTPS到httpGet配置),要么临时设置applicare.serverSSL=false验证基础连通性。
2. 应用监听地址错误
- ConfigMap中
applicare.serverIP=192.168.1.209指定了固定物理IP作为监听地址,导致应用仅绑定该IP,而Pod的IP是集群内部的10.1.0.82,Kubelet无法从Pod IP访问应用端口。 - 修复:将
applicare.serverIP改为0.0.0.0,让应用监听容器内所有网卡地址。
3. 启动探针参数不合理
- 当前
startupProbe的failureThreshold=3、periodSeconds=90,总超时窗口仅270秒,如果Applicare应用启动时需要初始化数据库连接、加载大量资源,可能还未就绪就被判定启动失败。 - 修复:调大参数,比如设置
failureThreshold=5、periodSeconds=60,给应用更长的启动缓冲时间。
4. 数据库连通性验证
- 需确认Pod能否访问配置的MySQL地址
192.168.1.209:3306,如果数据库网络不通,应用会卡在启动阶段,无法响应探针请求。 - 验证方式:执行
kubectl exec -n applicare <pod-name> -- telnet 192.168.1.209 3306,或直接在Pod内尝试连接数据库。
内容的提问来源于stack exchange,提问作者anandarc
相关产品推荐
相关产品推荐

