簡體   English   中英

嘗試從 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的 output 在此處輸入圖像描述

然后,我創建了 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 命令部署了它。 Output 用於kubectl describe services 在此處輸入圖像描述

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

While inside this pod, I ran the following the command: curl http://simple-server-svc:8080 and this was the output that I got: curl: (7) Failed to connect to simple-server-svc port 8080: Connection refused

為什么連接被拒絕?

當我運行curl http:localhost://8080時,我得到了正確的 output (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 命令來避免這樣的錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM