Kubernetes中Pod1无法与Pod3通信(ScrapyRT连接失败)
问题排查与解决方案
核心问题分析
从你的配置和报错信息来看,主要存在两个关键问题:
1. 服务名称拼写错误
你的Python代码中调用的服务名称是getcookie-14805-service.default,但实际Kubernetes中创建的服务名称是getcookie-service(从kubectl get svc输出可确认)。错误的服务名会导致DNS解析失败,直接引发连接拒绝错误。
2. ScrapyRT 可能仅监听本地回环地址
Pod3的日志仅在容器内部执行curl localhost:14805时才会生成,而外部访问服务无日志输出,说明ScrapyRT可能只绑定了127.0.0.1,导致集群内其他Pod无法访问该应用。
分步解决
步骤1:修正Pod1中的服务调用地址
将Python代码里的endpoint中的服务名改为正确的getcookie-service:
# 原错误地址 # endpoint = 'http://getcookie-14805-service.default/crawl.json?spider_name=getCookie&url=http://images.google.com/' # 修正后的地址(同命名空间下可省略.default) endpoint = 'http://getcookie-service/crawl.json?spider_name=getCookie&url=http://images.google.com/'
步骤2:配置ScrapyRT监听所有网络接口
修改Pod3的Deployment配置,添加SCRAPYRT_HOST环境变量,让ScrapyRT监听0.0.0.0:
# getcookie-14805-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: getcookie-pod labels: app: getcookie-pod spec: replicas: 1 selector: matchLabels: app: getcookie-pod template: metadata: labels: app: getcookie-pod spec: containers: - name: getcookie-pod image: privaterepo/myproject-scrapy:latest imagePullPolicy: Always ports: - containerPort: 14805 envFrom: - secretRef: name: scrapy-env env: - name: SCRAPYRT_PORT value: "14805" # 添加以下环境变量 - name: SCRAPYRT_HOST value: "0.0.0.0" imagePullSecrets: - name: docker-credentials
重新部署Pod3:
kubectl apply -f getcookie-14805-deployment.yaml
步骤3:验证连通性
- 在Pod1中测试服务DNS解析:
nslookup getcookie-service
应返回服务的ClusterIP(10.106.14.183)。
- 测试端口连通性:
telnet getcookie-service 80
如果能成功连接,说明网络通路正常;若仍拒绝连接,可直接测试Pod3的IP:
# 先获取Pod3的IP kubectl get pods getcookie-pod-59b8575ffc-8dcqb -o jsonpath='{.status.podIP}' # 在Pod1中curl该IP的14805端口 curl http://<pod3-ip>:14805
若直接curl PodIP也失败,需检查ScrapyRT的启动命令是否强制绑定了127.0.0.1,可能需要修改镜像内的启动脚本。
内容的提问来源于stack exchange,提问作者rom
相关产品推荐
相关产品推荐

