【问题标题】:Getting Connection refused while trying to access service from kubernetes pod尝试从 kubernetes pod 访问服务时连接被拒绝
【发布时间】:2023-03-12 10:21:01
【问题描述】:

我是 kubernetes 的新手,我正在尝试通过使用 AWS EKS 部署一个简单的节点服务器来学习它。 (kubernetes 已经设置为与创建的 AWS EKS 集群通信)

这是我的简单节点文件的代码 (server.js)

const express = require('express')
const app = express()
const port = 8080

app.get('/', (req, res) => {
 res.send('Hello World!')
})

app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`)
})

Dockerfile 的外观如下:

FROM node:12
# Create app directory
WORKDIR /usr/src/app
# Install app dependencies
COPY package*.json ./
RUN npm ci
# Bundle app source
COPY . .
EXPOSE 8080
CMD [ "node", "server.js" ]

我可以通过创建 docker 映像在本地运行上述服务器。

现在,为了部署此服务器,我遵循以下步骤:
首先,我将上面的图片推送到了 doceker hub (aroraankit7/simple-server) 其次,我创建了一个 deployment.yaml 文件,如下所示:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: simple-server-app
  labels:
    app: simple-server-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: simple-server-app
   template:
     metadata:
       labels:
         app: simple-server-app
     spec:
       containers:
       - name: simple-server
         image: aroraankit7/simple-server:v1
         ports:
         - containerPort: 8080

第三,我使用 kubectl apply 命令部署了它。这是kubectl get pods 的输出

然后,我创建了 service.yaml 文件。这是它的外观:

apiVersion: v1
kind: Service
metadata:
name: simple-server-svc
labels:
  run: simple-server
spec:
  ports:
  - port: 8080
    targetPort: 8080
    protocol: TCP
  selector:
    run: simple-server

然后我使用 kubectl apply 命令部署了它。 kubectl describe services 的输出:

接下来,我使用以下命令登录我的 pod:kubectl -it exec simple-server-app-758dfb88f4-4cfmp bash

在这个 pod 中,我运行了以下命令:curl http://simple-server-svc:8080,这是我得到的输出:curl: (7) Failed to connect to simple-server-svc port 8080: Connection refused

为什么连接被拒绝?

当我运行 curl http:localhost://8080 时,我得到了正确的输出(在本例中为 Hello World!)

【问题讨论】:

  • 如果您查看服务描述中的Endpoints,您会看到<none>...这是因为您使用了错误的选择器...将您的服务选择器更改为@ 987654339@ 然后当你运行kubectl describe 你应该看到2个端点????

标签: node.js docker kubernetes amazon-eks kubernetes-pod


【解决方案1】:

您的服务未绑定到部署。您需要将 service.yaml 中的选择器修改为以下内容:

apiVersion: v1
kind: Service
metadata:
 name: simple-server-svc
 labels:
  run: simple-server
spec:
  ports:
  - port: 8080
    targetPort: 8080
    protocol: TCP
  selector:
    app: simple-server-app

你可以使用 kubectl expose 命令来避免这样的错误。

【讨论】:

  • 谢谢@Sunitha “app”和“run”有什么区别?
  • 标签随意选择,但Service需要匹配Pods。
猜你喜欢
  • 1970-01-01
  • 2019-05-06
  • 1970-01-01
  • 1970-01-01
  • 2020-09-07
  • 2021-01-20
  • 2021-07-08
  • 2019-06-01
  • 1970-01-01
相关资源
最近更新 更多