Как сделать HTTP-вызов для модуля, работающего в Docker Desktop (Kubernetes) - PullRequest
0 голосов
/ 22 мая 2019

Итак, у меня возникла проблема, когда я получаю сообщение ERR_CONNECTION_REFUSED, когда пытаюсь позвонить с моего внешнего интерфейса, который настроен как входной. Мой бэкэнд-экспресс-сервер работает на порту 5000 и настроен как ClusterIP. Я читал, что Docker для Mac локальный кластер ip такой же, как 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

Служба экспресс-обслуживания

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

Вот мой вызов API от Vue

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 Ответ

1 голос
/ 23 мая 2019

Я читал, что Docker для локального кластера Mac - это то же самое, что и localhost. Вот как я его установил

Сервисы внутри Docker для Mac Kubernetes не доступны напрямую для вашегорабочий стол.Существует много IP-адресов кластеров и только один localhost, поэтому, если бы они все были открыты, вы довольно быстро столкнулись бы с конфликтами портов на локальном хосте.

Docker для Mac будет автоматически предоставлять сервисы типа LoadBalancer на localhost.Концепция похожа на запуск 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 через вашу внутреннюю службу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...