首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何对Docker Desktop中运行的pod进行HTTP调用(Kubernetes)

如何对Docker Desktop中运行的pod进行HTTP调用(Kubernetes)
EN

Stack Overflow用户
提问于 2019-05-23 02:24:57
回答 1查看 938关注 0票数 0

所以我有一个问题,当我试图从我的前端进行呼叫时,我得到了ERR_CONNECTION_REFUSED,它被设置为入口。我的后端express服务器在5000端口上运行,并被设置为ClusterIP。我已经阅读了mac本地集群的docker,ip与localhost是相同的,所以我就是这样设置的。

我确信我有正确的文件和网络。我只是不确定将API调用指向后端的位置。它也是localhost吗?我将在下面包含这些文件。

前端部署

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: frontend-deployment
spec:
  selector:
    matchLabels:
      app: frontend
  template:
    metadata:
      labels:
        app: frontend
    spec:
      containers:
      - name: frontend-container
        image: mrich6347/vue-frontend:5
        resources:
          requests:
            memory: "32Mi"
            cpu: "100m"
          limits:
            memory: "128Mi"
            cpu: "500m"
        ports:
        - containerPort: 8080

前端服务

代码语言:javascript
复制
apiVersion: v1
    kind: Service
    metadata:
      name: frontend-service
    spec:
      type: ClusterIP
      selector:
        app: frontend
      ports:
      - port: 8080
        targetPort: 8080

Express服务器部署

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: express-server-deployment
spec:
  selector:
    matchLabels:
      app: express-server
  template:
    metadata:
      labels:
        app: express-server
    spec:
      containers:
      - name: express-server
        image: mrich6347/express-server:5
        resources:
          requests:
            memory: "32Mi"
            cpu: "100m"
          limits:
            memory: "128Mi"
            cpu: "500m"
        ports:
        - containerPort: 5000

Express服务器服务

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  name: express-server-service
spec:
  type: ClusterIP
  selector:
    app: express-server
  ports:
  - port: 5000
    targetPort: 5000

下面是我从vue发出的api调用

代码语言:javascript
复制
export default {
  name: 'app',
  components: {
    HelloWorld
  },
  created: async () => {
    console.log("SERVER IS UP")
    let res = await axios.get("http://127.0.0.1:5000/test");
    console.log(res)
  }
}

最后是我的简单的express API

代码语言:javascript
复制
const app = require('express')();
var cors = require('cors')

app.use(cors())

app.get("/test", (req, res) => {
    res.send("WORKING!")
})


app.listen(5000, () => {
    console.log("Server is up on 5000")
})

入口控制器

代码语言:javascript
复制
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: traffic-router
  annotations:
    ingress.kubernetes.io/rewrite-target: /


spec:
  rules:
    - http:
        paths:
          - path: /
            backend:
              serviceName: frontend-service
              servicePort: 8080
EN

回答 1

Stack Overflow用户

发布于 2019-05-23 08:14:42

我读过mac本地集群的docker,ip和localhost是一样的,所以我就是这么设置的。

Docker for Mac Kubernetes中的服务不能直接用于您的桌面。有许多集群IP,但只有一个localhost,所以如果它们都暴露了,你会很快在本地主机上遇到端口冲突。

Docker for Mac将自动在localhost上公开LoadBalancer类型的服务。其概念类似于运行docker run -p 80:30843 ...。请参阅此入口控制器上的EXTERNAL-IP

代码语言:javascript
复制
$ kubectl get service m-nginx-nginx-ingress-controller
NAME                               TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
m-nginx-nginx-ingress-controller   LoadBalancer   10.108.201.47   localhost     80:30843/TCP,443:31419/TCP   22h
代码语言:javascript
复制
$ curl http://localhost:80
default backend - 404

因为听起来您已经有了前端服务的入口控制器,所以重用该入口并将另一个主机名或URI路径映射到您的后端服务是最容易的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56262861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档