Как у вас есть развертывание клиента общаться с развертыванием API в Kubernetes - PullRequest
0 голосов
/ 03 апреля 2020

Все, что я когда-либо получаю, это ошибки CORS на локальном хосте и в облаке. Это работает, если я вручную ввожу localhost или вручную получаю внешний IP-адрес службы и вводю его в файл развертывания k8s перед его развертыванием, но возможность автоматизировать это невозможно, если мне нужно запустить службы, получить внешний IP-адрес и затем поместите это в конфиги, прежде чем запускать каждый раз.

Служба API

apiVersion: v1
kind: Service
metadata:
  labels:
    app: api
  name: api-service
spec:
  ports:
  - port: 8080 # expose the service on internal port 80
    protocol: TCP
    targetPort: 8080 # our nodejs app listens on port 8080
  selector:
    app: api # select this application to service
  type: LoadBalancer
status:
  loadBalancer: {}

Служба клиента

apiVersion: v1
kind: Service
metadata:
  name: client-service
spec:
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
  selector:
    app: client
  type: LoadBalancer
status:
  loadBalancer: {}

Развертывание API

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: api
  name: api-deployment
spec:
  selector:
    matchLabels:
      app: api
  template:
    metadata:
      labels:
        app: api
    spec:
      containers:
      - image: mjwrazor/docker-js-stack-api:latest
        name: api-container
        imagePullPolicy: IfNotPresent
        resources: {}
        stdin: true
        tty: true
        workingDir: /app
        ports:
        - containerPort: 8080
        args:
        - npm
        - run
        - start
        envFrom:
        - configMapRef:
            name: server-side-configs
      restartPolicy: Always
      volumes: null
      serviceAccountName: ""
status: {}

Развертывание клиента

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: client
  name: client-deployment
spec:
  selector:
    matchLabels:
      app: client
  template:
    metadata:
      labels:
        app: client
    spec:
      restartPolicy: Always
      serviceAccountName: ""
      containers:
      - image: mjwrazor/docker-js-stack-client:latest
        name: client-container
        imagePullPolicy: IfNotPresent
        resources: {}
        ports:
        - containerPort: 80
status: {}

Я попытался добавить вход

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: app-ingress
  annotations:
    nginx.ingress.kubernetes.io/enable-cors: "true"
    nginx.ingress.kubernetes.io/cors-allow-methods: "PUT, GET, POST, DELETE, OPTIONS"
    nginx.ingress.kubernetes.io/cors-allow-origin: http://client-service.default
    nginx.ingress.kubernetes.io/cors-allow-credentials: "true"
spec:
  rules:
    - host: api-development.default
      http:
        paths:
          - backend:
              serviceName: api-service
              servicePort: 8080

Но и это не помогло. вот сервер. js

const express = require("express");
const bodyParser = require("body-parser");
const cors = require("cors");
const app = express();

app.use(bodyParser.json());

app.use(bodyParser.urlencoded({ extended: true }));

app.use(cors());

app.get("/", (req, res) => {
  res.json({ message: "Welcome" });
});

require("./app/routes/customer.routes.js")(app);

// set port, listen for requests
const PORT = process.env.PORT || 8080;
app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}.`);
});

Но, как я уже сказал, я пытаюсь разрешить эту проблему с помощью имен хостов служб и не должен использовать внешний IP, возможно ли это или сделал По пути я что-то неправильно понимаю.

Клиент отправляет запрос топора ios. Невозможно использовать переменные окружения, поскольку вы не можете внедрить переменные окружения из k8s после сборки проекта через веб-пакет и docker в образ. Я нашел действительно хакерский способ создания файла с глобальными переменными окна, а затем k8s перезаписал этот файл новыми переменными окна. Но опять же сначала я должен получить внешний IP-адрес API, а затем сделать это.

1 Ответ

1 голос
/ 08 апреля 2020

Как мы уже обсуждали в комментариях, вам нужно получить реальное доменное имя, чтобы оно работало, поскольку Automati c разрешение DNS в вашем случае в основном требует его.

...