Я пытаюсь найти лучший способ интегрировать Istio в свое приложение, которое состоит из интерфейса React (обслуживается Nginx) и Django Rest Framework API. Мне удалось заставить его работать, используя следующие файлы конфигурации nginx и istio-specifici c kubernetes:
server {
listen 80;
root /app/build;
location / {
try_files $uri $uri/ /index.html;
}
}
# Source: myapp/gateway.yaml
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: myapp-gateway
spec:
selector:
istio: ingressgateway # use istio default controller
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- '*'
- port:
number: 443
name: https
protocol: HTTP
hosts:
- '*'
---
# Source: myapp/virtual-service.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: myapp
spec:
hosts:
- '*'
gateways:
- myapp-gateway
http:
- match:
- port: 80
route:
- destination:
host: frontend-svc
port:
number: 80
- match:
- port: 443
route:
- destination:
host: backend-svc
port:
number: 8000
И интерфейс может попасть в бэкэнд на localhost:443
. Обратите внимание: я обслуживаю серверную часть на порту 443 (вместо 8000) из-за некоторой проблемы, связанной с тем, что шлюз istio не работает ни с одним портом, кроме 80 и 443 .
Несмотря на это, это подход раскрывает ОБЕИ интерфейс и серверную часть за пределами кластера, что кажется излишним. Есть ли способ настроить это так, чтобы явно отображался только интерфейс, и я мог проксировать серверную часть через интерфейс? Либо с помощью istio, либо nginx?
Я могу быть далеко, но звучит так, как будто это может быть сложно, потому что клиент делает вызов бэкэнду. Мне нужно было найти способ сделать вызов внутри кластера и вернуть его клиенту?