我在Kubernetes中运行了节点微服务应用程序。
我要https://app.domain.com/vehicle/api/v1/...。一定要去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 for 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;
}
}如果需要在任何文件中进行任何更改,请建议
发布于 2022-07-28 09:16:17
您需要编写两个单独的清单,一个用于套接字应用程序,另一个用于基于路径的路由。
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和通过LoadBalancer/SSL协议转发请求,而不是HTTP/HTTPS,因为套接字应用程序在WSS协议上运行。
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: Prefixhttps://stackoverflow.com/questions/73149472
复制相似问题