You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

验证步骤

  1. 应用修正后的配置:
    kubectl apply -f service.yaml -f deployment.yaml
    
  2. 检查Service是否成功关联Pod:
    kubectl get endpoints fin-service
    
    如果ENDPOINTS列显示了Pod的IP和对应端口,说明关联成功。
  3. 进入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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 21:42:33