【问题标题】:Kubernetes error when forwarding a port - Connection refused转发端口时出现 Kubernetes 错误 - 连接被拒绝
【发布时间】:2022-05-04 22:32:38
【问题描述】:

我正在尝试使用以下命令端口转发我的 kubernetes 服务(通过 minikube):

kubectl port-forward svc/hapi-fhir-server 8080:8080 --address=0.0.0.0

但在尝试到达localhost:8080 后,我收到以下错误:"....... an error occurred forwarding 8080 -> 8080: error forwarding port 8080 to pod {PodID, uid ....:E connect(5, AF=2 127.0.0.1:8080, 16): Connection refused"

我通过以下命令检查了 pod 正在侦听的端口 kubectl get pod hapi-fhir-server-666b846cbf-lhmr4 --template="{{(index (index .spec.containers 0).ports 0).containerPort}}" 得到答案 8080

如果这有帮助,我的服务和部署文件(已删除不相关的行)

apiVersion: apps/v1
kind: Deployment
metadata:
  ....
spec:
  replicas: 2
  selector:
    ....
  template:
      ....
    spec:
      containers:
        - image: .........
          name: hapi-fhir-server
          ports:
            - containerPort: 8080
          resources: {}
      restartPolicy: Always
status: {}
apiVersion: v1
kind: Service
metadata:
  ....
spec:
  type: NodePort
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080
      nodePort: 32069
  selector:
    app: hapi-fhir-server
status:
  loadBalancer: {}

使用的映像是一个 HAPI FHIR 服务器,具有以下配置,在 Apache Tomcat (server.xml) 上运行:

<Connector port="${server.port}" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" 
               maxThreads="${server.tomcat.max-threads}"
               minSpareThreads="${server.tomcat.min-spare-threads}" /> 

server.port 是 8080。

即使在阅读了文档或类似的问题(例如:Kubernetes Port Forwarding - Connection refused)之后,我似乎也无法找到为什么会发生这种情况的准确答案。

有什么我遗漏、没有正确执行或我没有想到的吗?笔记:我对 Kubernetes 比较陌生。

【问题讨论】:

  • 8080 可能已经在您的机器上打开了吗?
  • @IvanAracki 在我提出问题之前,我已经通过命令netstat -a 进行了检查。我找不到已在 8080 上使用的端口。但是,我确实检查了如果该端口已在使用中的错误消息:Unable to listen on port 8080: Listeners failed to create with the following errors: [unable to create listener: Error listen tcp4 0.0.0.0:8080: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.]
  • 您确定您的 Dockerfile 正在使用您的首选端口吗?
  • 好吧,这确实是问题所在,我没有在 Dockerfile 中公开端口

标签: kubernetes tomcat kubectl portforwarding hapi


【解决方案1】:

显然 Kubernetes 或服务器配置没有问题,而是 Dockerfile 没有暴露端口 8080,现在它通过以下方式进行:

# Dockerfile
......
EXPOSE 8080
......

感谢 IvanAracki 通过 cmets 向我指出了这一点。

【讨论】: