kubernetes中的入口Nginx路由使用nginx反向代理从docker-compose转换

如何解决kubernetes中的入口Nginx路由使用nginx反向代理从docker-compose转换

我正试图从在docker-compose中运行某些服务到kubernetes,并努力从nginx反向代理迁移到入口nginx。该服务使用具有网络界面的h2o ai。我无法打开k8s版本的Web界面。

我认为我需要修改入口文件中的规范以正确路由,感谢任何有关如何执行此操作的指针。

在使用nginx作为反向代理的docker解决方案中,当我访问http://k8s-master:3002时,它会重定向到http://k8s-master:3002/flow/index.html并正确显示

对于k8s,(我在{{1}上以ingress-nginx-controller的身份运行NodePort),我尝试访问32000并收到如下错误消息:

https://k8s-master:32000/h2otest

更新:基于陈肯的评论

我将下面的入口更改为使用{"__meta":{"schema_version":3,"schema_name":"H2OErrorV3","schema_type":"H2OError"},"timestamp":1602674406013,"error_url":"Resource /h2otest","msg":"\n\nERROR MESSAGE:\n\nResource /h2otest not found\n\n","dev_msg":"\n\nERROR MESSAGE:\n\nResource /h2otest not found\n\n","http_status":404,"values":{},"exception_type":"water.exceptions.H2ONotFoundArgumentException","exception_msg":"\n\nERROR MESSAGE:\n\nResource /h2otest not found\n\n","stacktrace":["water.exceptions.H2ONotFoundArgumentException: Resource /h2otest not found"," water.api.RequestServer.response404(RequestServer.java:743)"," water.api.RequestServer.getResource(RequestServer.java:846)"," water.api.RequestServer.serve(RequestServer.java:465)"," water.api.RequestServer.doGeneric(RequestServer.java:301)"," water.api.RequestServer.doGet(RequestServer.java:225)"," javax.servlet.http.HttpServlet.service(HttpServlet.java:687)"," javax.servlet.http.HttpServlet.service(HttpServlet.java:790)"," org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:865)"," org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:535)"," org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)"," org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1317)"," org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203)"," org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473)"," org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201)"," org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1219)"," org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)"," org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126)"," org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)"," water.webserver.jetty9.Jetty9ServerAdapter$LoginHandler.handle(Jetty9ServerAdapter.java:130)"," org.eclipse.jetty.server.Server.handle(Server.java:531)"," org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:352)"," org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:260)"," org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:281)"," org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:102)"," org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118)"," org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:762)"," org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:680)"," java.lang.Thread.run(Thread.java:748)"]}

现在,当我键入nginx.ingress.kubernetes.io/rewrite-target: /$2时,它会重定向到:https://k8s-master:32000/h2otest

直接输入https://k8s-master:32000/flow/index.html即可。 如何修改规则,以便 https://k8s-master:32000/h2otest/flow/index.html 直接转到 https://k8s-master:32000/h2otest


以下包含每个版本的文件:

码头工人版本

https://k8s-master:32000/h2otest/flow/index.html

docker-compose.yml

services : test-h2o-svc: build: context: h2o dockerfile: Dockerfile image: test-h2o:3.30.1.1 restart: always networks: - testnet # ports: # - 54323:54321 test-reverse-proxy: image: nginx:alpine hostname: reverse-proxy restart: always ports: - 3002:3002 volumes: - "./nginx_files/nginx.conf:/etc/nginx/nginx.conf:rw" - "./nginx_files/sites-available/test.conf:/etc/nginx/conf.d/sites-available/test.conf:rw" - "./nginx_files/sites-available/test.conf:/etc/nginx/conf.d/sites-enabled/test.conf:rw" networks: - testnet networks: testnet: version: "3.5"

nginx.conf

user nginx; worker_processes 4; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 180; #gzip on; include /etc/nginx/conf.d/sites-enabled/*.conf; client_body_buffer_size 50M; client_max_body_size 2000M; }

test.conf

upstream link_h2o-svc { server test-h2o-svc:54321; } server { listen 3002; location / { proxy_pass http://link_h2o-svc; } } 用于容器:Dockerfile

test-h2o:3.30.1.1

k8s版本
FROM ubuntu:latest

ARG H2O_VERSION=3.30.1.1

RUN apt-get update \
    && apt-get install default-jdk unzip wget -y

RUN wget https://h2o-release.s3.amazonaws.com/h2o/rel-zeno/1/h2o-${H2O_VERSION}.zip \
    && unzip h2o-${H2O_VERSION}.zip

ENV H2O_VERSION ${H2O_VERSION}
CMD java -jar h2o-${H2O_VERSION}/h2o.jar

解决方法

我如何修改规则,以便https:// k8s-master:30439 / h2otest直接转到https:// k8s-master:30439 / h2otest / flow / index.html

这不是Nginx入口问题。像大多数其他入口一样,nginx-ingress可以通过SSL卸载来进行基于名称的虚拟主机和SNI(或基于SSL名称的虚拟主机)。开箱即用,无所不包。

尽管nginx-ingress可以进行一些基本的重写,但仅限于将/path/(.*)重写为/(.*)并将其传递到下一个容器以处理来自那里的流量。如果您想让它做更多的事情,那么您就可以为nginx-ingress编写配置映射了。 是的,您需要设置客户端主体大小等的注释,但是应用程序本身(而非入口)需要处理/h2otest-> /h2otest/flow/index.html重写(或/-> /flow/index.html

从您描述的布局来看, (nginx)ingress-> app

您可能需要将布局更改为(nginx)ingress-> nginx-> app,中间的nginx进行/-> /flow/index.html重写

一个忠告。如果您有机会使用基于名称的虚拟主机,而不要使用基于路径的虚拟主机(除非您有充分的理由,例如cors)基于路径。如今,许多应用程序只是假设它们位于/上,如果您在其他地方,则配置会变得“有趣”

,

Nginx反向代理将/h2otest重写为/,但是将/重定向到/flow/index.html。此时,nginx尚无处理/flow的规则,因此结果为404。

尝试删除路径,并改用根/

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test-ingress
  namespace: ns-test
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
        - path: /
          pathType: Prefix
          backend:
            serviceName: test-h2o-svc
            servicePort: 54321

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-