Traefik - прокси для бэкэнда для приложения angular - PullRequest
0 голосов
/ 21 апреля 2020

Я настроил прокси с Nginx, который выглядит следующим образом

    server {
       listen       80;
       server_name  localhost;

       location /api {
          proxy_pass https://api.mydomain.com/;
       }

       location / {
         root   /usr/share/nginx/html;
         index  index.html index.htm;      
       }

       error_page   500 502 503 504  /50x.html;
       location = /50x.html {
          root   /usr/share/nginx/html;
       }
    }

мой Dockerfile

       FROM node:12-alpine as builder
       WORKDIR /workspace
       COPY ./package.json ./
       RUN npm install
       COPY . .
      RUN npm run build

      FROM nginx
      COPY ./nginx/default.conf /etc/nginx/conf.d/default.conf
      COPY --from=builder /app/www /usr/share/nginx/html
      EXPOSE 80
      CMD ["nginx", "-g", "daemon off;"]

Это отлично работает, но хочет заменить Nginx на Traefik для указанных выше настроек прокси. Любая помощь будет высоко ценится, так как я очень плохо знаком с traefik.

Ответы [ 2 ]

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

В Traefik 2+ вам необходимо настроить 2 маршрутизатора: - Один для API - Один для веб-приложения

Для прокси API у вас будет правило, например:

rule = "Host(`example.com`) && Path(`/api`)"

И веб-приложение будет иметь хост как правило

rule = "Host(`example.com`)"

Для kubernetes вы можете сделать это во входном файле следующим образом:

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: simpleingressroute
  namespace: default
spec:
  entryPoints:
    - web
  routes:
  - match: Host(`example.com`) && PathPrefix(`/api`)
    kind: Rule
    services:
    - name: mywebapp-svc
      port: 80
  - match: Host(`example.com`)
    Kind: Rule
    services:
    - name: myapi-svc
      port: 80

Если API не находится внутри кластер kubernetes, вы можете определить правило для использования внешнего сервиса, например:

---
apiVersion: v1
kind: Service
metadata:
  name: myapi-svc
  namespace: default
spec:
  externalName: api.mydomain.com
  type: ExternalName
0 голосов
/ 21 апреля 2020

Если вы хотите выйти из этой ручной конфигурации, вы можете использовать Traefik, как описано здесь . Посмотрите, как он использует docker метки , чтобы определить, как маршрутизировать трафик HTTP c. Я лично использую caddy docker proxy in docker (рой, но не обязателен), который, как мне кажется, легче понять и использовать

...