Я изо всех сил пытаюсь совершать Http-вызовы из внешнего приложения в серверное приложение в Kubernetes.
Итак, в основном у меня есть правила развертывания, обслуживания и входа как для внешнего, так и для серверного приложения, и интерфейсный сервис не может подключиться к серверной службе.
Это сообщение об ошибке, которое я получаю
ПОЛУЧИТЬ http://spring-boot-vuejs:8080/api/courses net :: ERR_NAME_NOT_RESOLVED
Я пытаюсь создать простое веб-приложение, используя Vuejs в качестве внешнего интерфейса и загрузку Spring как серверную часть. Бэкэнд предоставляет REST api в конечной точке / api / course / *, а интерфейс потребляет его.
Я развернул два отдельных модуля: один для внешнего интерфейса, а другой - для внутреннего в голом железном кластере Kubernetes. Я также установил контроллер входящего трафика Nginx.
если я запустил оба образа докеров на своем локальном компьютере, все будет работать нормально, потому что я использую "http://localhost:8080" в качестве конечной точки серверной части, но в тот момент, когда я развертываю приложения в Kubernetes, он больше не будет работать, поскольку может разрешать имя службы "http://spring-boot-vuejs:8080 "
Я уже упоминал о проблемах, упомянутых здесь, здесь, здесь, но ни один из них мне не помог.
Ниже приведены соответствующие файлы yaml. Пожалуйста, поправьте меня, если я ошибаюсь в каких-либо файлах yaml или правилах входа.
Бэкэнд:
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
ngress-nginx nginx-ingress-controller-6879cf6459-8cg44 1/1 Running 0 64d
Служба Nginxingress-nginx ingress-nginx NodePort 10.105.123.73 <none> 80:32372/TCP,443:30907/TCP 64d
- person rakesh   schedule 20.04.2020kubectl exec pod/<frontend-pod-name> cat /etc/resolv.conf
Что это вернет? Вы должны увидеть список поисковых доменов кластера k8s? - person TuxInvader   schedule 20.04.2020/etc/resolv.conf
на интерфейсном модуле.# cat /etc/resolv.conf nameserver 10.96.0.10 search vuejs.svc.cluster.local svc.cluster.local cluster.local lswv130.leasewebcloud.com options ndots:5
Я удалил вход для серверной части - person rakesh   schedule 21.04.2020kubectl get pods -o wide
, а также для служб и конечных точек? Я не заметил селекторов, когда отвечал - person Nick   schedule 21.04.2020kubectl get pods,svc,ep,ingress
, 2.kubectl describe ingress
, 3.kubectl logs <your_frontend>
(при свертывании изнутри и вне кластера) - person Mark   schedule 28.04.2020