尝试从 kubernetes pod 访问服务时获取连接被拒绝
Getting Connection refused while trying to access service from kubernetes pod
我是 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
的输出:
接下来,我使用以下命令登录了我的 pods: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!在这种情况下)
您的服务未绑定到部署。您需要将 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 命令来避免这样的错误。
我是 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
的输出:
接下来,我使用以下命令登录了我的 pods: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!在这种情况下)
您的服务未绑定到部署。您需要将 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 命令来避免这样的错误。