首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用nginx.ingress.kubernetes.io/重写-目标:ingress

如何使用nginx.ingress.kubernetes.io/重写-目标:ingress
EN

Stack Overflow用户
提问于 2022-07-28 08:19:48
回答 1查看 147关注 0票数 0

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

我要https://app.domain.com/vehicle/api/v1/...。一定要去https://app.domain.com/api/v1/...

如果我使用重写目标注释,如下面所示,我的主页将变为空白,您可以在这里看到。

如果我删除那个注释,那么我的主页就会像预期的那样来了。

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

代码语言:javascript
复制
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 (前端),如果需要做任何更改,请建议

代码语言:javascript
复制
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

代码语言:javascript
复制
server {
  listen 80;
  location / {
    root /usr/share/nginx/html;
    index index.html index.htm;
    try_files $uri $uri/ /index.html =404;
  }
}

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

EN

回答 1

Stack Overflow用户

发布于 2022-07-28 09:16:17

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

  1. 我想要https://app.domain.com/vehicle/socket.io/eio....。去https://app.domain.com/socket.io/eio.....

代码语言:javascript
复制
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协议上运行。

  1. https://app.domain.com/vehicle/api/v1/....必须去https://app.domain.com/vehicle/api/v1/....

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73149472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档