Kubernetes中Pod内替换localhost为Service后19000端口连接被拒排查
排查连接被拒问题的关键原因及修复方案
让我帮你梳理一下导致http://fin-service:19000连接被拒的核心问题,主要是几处配置不匹配导致的:
1. Service与Pod的标签选择器不匹配
你的Service配置中,selector字段写的是fin-app,但Deployment的Pod模板里的标签是fin——Kubernetes的Service是通过标签选择器来关联Pod的,两者标签完全不匹配的话,Service根本找不到要转发流量的目标Pod,自然会出现连接拒绝。
2. Deployment未声明容器监听的全部端口
你的Deployment里只给容器声明了8090端口,但Service映射了8082、19000甚至后续配置用到的8092端口。虽然containerPort不是强制要求,但它是Kubernetes确认容器内应用端口的标识,同时也能避免网络策略或端口冲突问题,更重要的是要确保你的容器内的应用确实在这些端口上监听服务。
3. 配置中的adaptors端口未在Service中映射
你的应用配置里adaptors.endpoint用了8092端口,但当前Service没有这个端口的映射规则,后续访问这个地址也会出现同样的连接问题,需要提前补上。
修正后的配置示例
修正后的Service配置
kind: Service metadata: name: fin-service spec: type: ClusterIP ports: - port: 8090 targetPort: 8090 protocol: TCP name: http - port: 8082 targetPort: 8082 protocol: TCP name: expense-api - port: 19000 targetPort: 19000 protocol: TCP name: oss-provider - port: 8092 targetPort: 8092 protocol: TCP name: adaptors selector: app: fin # 与Deployment的Pod标签保持一致
修正后的Deployment配置
apiVersion: apps/v1 kind: Deployment metadata: name: fin namespace: {{ .Values.namespace }} labels: app: fin # 统一标签格式为键值对 spec: replicas: {{ .Values.replicaCount }} selector: matchLabels: app: fin # 与Pod模板标签一致 template: metadata: labels: app: fin # 与Service的selector匹配 spec: {{- with .Values.imagePullSecrets }} imagePullSecrets: {{- toYaml . | nindent 8 }} {{- end }} containers: - name: {{ .Values.containers.oss_messaginglayer.name }} image: {{ .Values.image.oss_messaginglayer.repository }} imagePullPolicy: {{ .Values.image.pullPolicy }} ports: - name: http containerPort: 8090 protocol: TCP - name: expense-api containerPort: 8082 protocol: TCP - name: oss-provider containerPort: 19000 protocol: TCP - name: adaptors containerPort: 8092 protocol: TCP
验证步骤
- 应用修正后的配置:
kubectl apply -f service.yaml -f deployment.yaml - 检查Service是否成功关联Pod:
如果kubectl get endpoints fin-serviceENDPOINTS列显示了Pod的IP和对应端口,说明关联成功。 - 进入Pod内部测试连通性:
若能正常返回响应,说明问题已解决。kubectl exec -it $(kubectl get pods -l app=fin -o jsonpath='{.items[0].metadata.name}') -- curl http://fin-service:19000
内容的提问来源于stack exchange,提问作者Bhargav Behara
相关产品推荐
相关产品推荐

