He configurado un proxy con Nginx que es el siguiente
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; } }mi 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;"]Esto funciona bien, pero quiere reemplazar Nginx con Traefik para la configuración de proxy anterior. Cualquier ayuda sería muy apreciada ya que soy muy nuevo en traefik.
Con Traefik 2+, debe configurar 2 enrutadores: - Uno para la API - Uno para la aplicación web
Para el proxy API, tendrá una regla como:
rule = "Host(`example.com`) && Path(`/api`)"Y la aplicación web solo tendrá el host como regla
rule = "Host(`example.com`)"Para kubernetes, puede hacerlo en un ingreso como ese:
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: 80Si la API no está dentro del clúster de kubernetes, puede definir la regla para usar un servicio externo como ese:
--- apiVersion: v1 kind: Service metadata: name: myapi-svc namespace: default spec: externalName: api.mydomain.com type: ExternalNamesi desea avanzar desde esa configuración manual, puede usar Traefik como se describe aquí . Observe cómo usa las etiquetas acoplables para definir cómo enrutar el tráfico HTTP. Yo personalmente uso caddy docker proxy en docker (swarm, pero no es obligatorio) que encuentro más fácil de entender y usar