Я изо всех сил пытаюсь сделать Http-вызовы из внешнего интерфейса в бэкэнд-приложение в Кубернетесе.
Так что в основном у меня есть правила развертывания, обслуживания и доступа как для внешнего, так и для внутреннего приложения, а служба внешнего интерфейса может ' t подключиться к бэкэнд-сервису.
Это сообщение об ошибке, которое я получаю
GET http://spring-boot-vuejs: 8080 / api / courses net :: ERR_NAME_NOT_RESOLVED
Я пытаюсь создать простое веб-приложение, используя Vuejs в качестве внешнего интерфейса и загрузку Spring в качестве внутреннего интерфейса. Бэкэнд предоставляет конечную точку API REST для / api / courses / *, а внешний интерфейс потребляет ее.
Я развернул два отдельных модуля: один для внешнего интерфейса и один для внутреннего интерфейса в голометаллическом кластере Kubernetes . Я также установил Nginx входной контроллер .
, если я запускаю оба docker образа на локальном компьютере, все работает нормально, потому что я использую "http://localhost: 8080"как конечная точка бэкэнда, но как только я разверну приложения в Kubernetes, они больше не будут работать, поскольку могут разрешать имя службы" http://spring-boot-vuejs: 8080"
I уже упоминалось о проблемах, упомянутых здесь , здесь , здесь но ни одна из них не помогла мне.
Ниже приведены соответствующие файлы yaml. Пожалуйста, исправьте меня, если я делаю ошибку в любых файлах yaml или правилах входа.
Backend:
apiVersion: apps/v1
kind: Deployment
metadata:
name: spring-boot-vuejs
labels:
app: spring-boot-vuejs
spec:
replicas: 1
selector:
matchLabels:
app: spring-boot-vuejs
template:
metadata:
labels:
app: spring-boot-vuejs
spec:
containers:
- name: spring-boot-vuejs
imagePullPolicy: ifNotPresent
image: <my docker hub username>/spring-boot-vuejs:0.0.1
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: spring-boot-vuejs
labels:
app: spring-boot-vuejs
spec:
clusterIP: None
ports:
- port: 8080
targetPort: 8080
protocol: TCP
name: spring-boot-vuejs
selector:
app: spring-boot-vuejs
Правила входа
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: spring-boot-vuejs
annotations:
kubernetes.io/ingress.class: nginx
spec:
backend:
serviceName: default-http-backend
servicePort: 80
rules:
- host: spring-boot-vuejs
- http:
paths:
- path: /api/.*
backend:
serviceName: spring-boot-vuejs
servicePort: 8080
Файлы Yaml для интерфейса
Развертывание и обслуживание
apiVersion: apps/v1
kind: Deployment
metadata:
name: vuejs-frontend
labels:
app: vuejs-frontend
spec:
replicas: 1
selector:
matchLabels:
app: vuejs-frontend
template:
metadata:
labels:
app: vuejs-frontend
spec:
containers:
- name: vuejs-frontend
imagePullPolicy: ifNotPresent
image: <my dockerhub username>/vuejs-frontend:0.0.1
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: vuejs-frontend
labels:
app: vuejs-frontend
spec:
clusterIP: None
ports:
- port: 8080
targetPort: 8080
protocol: TCP
name: vuejs-frontend
selector:
app: vuejs-frontend
Входные правила
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: vuejs-frontend
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
backend:
serviceName: default-http-backend
servicePort: 80
rules:
- host: spring-boot-vuejs
- http:
paths:
- path: /
backend:
serviceName: vuejs-frontend
servicePort: 8080