Все, что я когда-либо получаю, это ошибки 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, а затем сделать это.