Docker Traefik-角度应用程序后端的代理

Docker Traefik-角度应用程序后端的代理,docker,nginx,proxy,traefik,Docker,Nginx,Proxy,Traefik,我已经用Nginx设置了一个代理,如下所示 server { listen 80; server_name localhost; location /api { proxy_pass https://api.mydomain.com/; } location / { root /usr/share/nginx/html; index ind

我已经用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;"]

这可以正常工作,但对于上述代理设置,需要使用Traefik替换Nginx。非常感谢您的帮助,因为我是traefik的新手。

如果您想从手动配置升级,可以按说明使用traefik。观察他如何使用docker标签来定义如何路由HTTP流量。
我个人使用docker(swarm,但不是必需的),我发现它更容易理解和使用

Traefik 2+,您需要配置2个路由器: -一个用于API -一个用于webapp

对于API代理,您将有如下规则:

rule = "Host(`example.com`) && Path(`/api`)"
而webapp通常只会拥有主机

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
---
apiVersion: v1
kind: Service
metadata:
  name: myapi-svc
  namespace: default
spec:
  externalName: api.mydomain.com
  type: ExternalName
如果API不在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
---
apiVersion: v1
kind: Service
metadata:
  name: myapi-svc
  namespace: default
spec:
  externalName: api.mydomain.com
  type: ExternalName

对于traefik,您在Kubernetes集群中使用它吗?如何配置Traefik?使用静态文件?或者通过其他方式?我在Kubernetes集群中使用它。好的,它是traefik版本1、7或2+(traefik在2.0版本的配置中改变了很多东西)它的traefik 2+API不在Kubernetes集群中@jmaitrehenry,这个配置文件也将在toml文件中,对吗?它的Traefik 2+version@maaz他们是库伯内特人。我只是假设你在库伯内特斯使用特拉菲克作为入口控制器。