繁体   English   中英

如何使用 nginx.ingress.kubernetes.io/rewrite-target:在 ingress-nginx

[英]how to use nginx.ingress.kubernetes.io/rewrite-target: in ingress-nginx

我在 Kubernetes 中运行节点微服务应用程序

我想要https://app.domain.com/vehicle/api/v1/...。 必须 go 到https://app.domain.com/api/v1/...。

如果我使用如下所示的重写目标注释,我的主页将变为空白,如您在此处看到的在此处输入图像描述

如果我删除该注释,那么我的主页将按预期出现

这是我的入口 yaml 文件,带有重写注释

apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: ingress-srv
      annotations:
        kubernetes.io/ingress.class: nginx
        nginx.ingress.kubernetes.io/proxy-body-size: "0"
        nginx.ingress.kubernetes.io/proxy-connect-timeout: "360"
        nginx.ingress.kubernetes.io/proxy-read-timeout: "360"
        nginx.ingress.kubernetes.io/proxy-send-timeout: "360"
        nginx.ingress.kubernetes.io/rewrite-target: /$2
    spec:
      tls:
      - hosts:
        - app.domain.com
        secretName: app-ssl
      defaultBackend:
        service:
          name: app-webapp-service
          port:
            number: 80
      rules:
      - host: app.domain.com
        http:
          paths:
          - path: /vehicle(/|$)(.*)
            pathType: Prefix
            backend:
              service:
                name: app-vehicle-service
                port:
                  number: 5001
           - path: /*
        pathType: Prefix
        backend:
          service:
            name: app-webapp-service
            port:
              number: 80

这是我的 Dockerfile 用于 React(前端),如果需要做任何更改,请建议

FROM node:12.18.3 AS build

ENV CI=false
ENV WDS_SOCKET_PORT=0

WORKDIR /app

COPY ["package.json", "package-lock.json", "./"]

RUN npm install --production

COPY . .

RUN npm run build:development

FROM nginx:alpine

COPY --from=build /app/build /usr/share/nginx/html

COPY --from=build /app/nginx-custom.conf /etc/nginx/conf.d/default.conf

这是我的 nginx-custom.conf

server {
  listen 80;
  location / {
    root /usr/share/nginx/html;
    index index.html index.htm;
    try_files $uri $uri/ /index.html =404;
  }
}

如果需要在任何文件中进行任何更改,请提出建议

您将需要编写两个单独的清单,第一个用于套接字应用程序,另一个用于基于路径的路由。

  1. 我想要https://app.domain.com/vehicle/socket.io/eio.... 到 go 到https://app.domain.com/socket.io/eio....
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-socket
  annotations:
    nginx.ingress.kubernetes.io/server-snippets: |
      location / {
        proxy_set_header Upgrade $http_upgrade;
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-Host $http_host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header Connection "upgrade";
        proxy_cache_bypass $http_upgrade;
      }
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.org/websocket-services: socket-svc-name
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "360"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "360"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "360"
spec:
  ingressClassName: nginx
  rules:
  - host: app.domain.com
    http:
      paths:
      - backend:
          service:
            name: socket-svc-name
            port:
              number: 80
        path: /.*
        pathType: Prefix

注意:在您的 LoadBalancer 侦听器配置中,它必须侦听 TCP/80、SSL/443 而不是 HTTP/80、HTTPS/443 并通过 TCP/SSL 协议而不是 HTTP/HTTPS 转发请求,因为 Socket 应用程序在 WSS 协议上运行。

  1. https://app.domain.com/vehicle/api/v1/...。 必须 go 到https://app.domain.com/vehicle/api/v1/...。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-srv
  annotations:
    nginx.ingress.kubernetes.io/configuration-snippet: |
      more_set_headers "Access-Control-Allow-Origin: *";
    nginx.ingress.kubernetes.io/cors-allow-credentials: "true"
    nginx.ingress.kubernetes.io/cors-allow-methods: PUT, GET, POST, OPTIONS, DELETE, PATCH
    nginx.ingress.kubernetes.io/cors-allow-origin: '*'
    nginx.ingress.kubernetes.io/enable-cors: "true"
    nginx.ingress.kubernetes.io/use-regex: "true"
spec:
  ingressClassName: nginx
  rules:
  - host: app.domain.com
    http:
      paths:
      - backend:
          service:
            name: app-vehicle-service
            port:
              number: 5001
        path: /vehicle/api/v1/.*
        pathType: Prefix

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM