如何对在Docker桌面(Kubernetes)中运行的Pod进行HTTP调用

时间:2019-05-22 18:24:57

标签: docker kubernetes devops

因此,当我尝试从设置为Ingress的前端拨打电话时,出现了ERR_CONNECTION_REFUSED的问题。我的后端快速服务器在端口5000上运行,并设置为ClusterIP。我已经阅读了Mac本地群集ip的docker与localhost相同的内容,这就是我的设置方法。

我相信我的文件和网络连接正确。我只是不确定将API调用定向到哪里。它也是localhost吗?我将包含以下文件。

前端部署

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

前端服务

apiVersion: v1
    kind: Service
    metadata:
      name: frontend-service
    spec:
      type: ClusterIP
      selector:
        app: frontend
      ports:
      - port: 8080
        targetPort: 8080

快速服务器部署

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服务器服务

apiVersion: v1
kind: Service
metadata:
  name: express-server-service
spec:
  type: ClusterIP
  selector:
    app: express-server
  ports:
  - port: 5000
    targetPort: 5000

这是我从vue发出的api调用

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

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")
})

入口控制器

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

1 个答案:

答案 0 :(得分:0)

  

我已经阅读了mac本地群集ip的docker与localhost相同的内容,所以我如何设置它

Docker for Mac Kubernetes内部的服务无法直接在您的桌面上使用。群集IP有很多,只有一个localhost,因此,如果它们全部公开,您将很快在localhost上遇到端口冲突。

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

$ 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
$ curl http://localhost:80
default backend - 404

听起来您已经为前端服务提供了一个入口控制器,最简单的方法是重用该入口并将另一个主机名或URI路径映射到后端服务。