【发布时间】:2018-06-13 10:31:55
【问题描述】:
我正在将我当前的服务迁移到 Kubernetes。目前后端服务通过 mod_cluster 解决。 mod 集群管理器在 httpd 上运行,mod_cluster 客户端在启动时自动向 httpd/mod_cluster 管理器注册其 Web 上下文
user-->ingress-rule--> httpd [running mod_cluster manager]--> Jboss[mod_cluster clients]
我通过以下入口规则解析我的用户界面
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: httpd
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
spec:
rules:
- host: myk8s.myath.myserv.com
http:
paths:
- path: /
backend:
serviceName: httpd
servicePort: 443
tls:
- hosts:
- myk8s.myath.myserv.com
这很好用,可以解析 UI,可以登录并解析所有静态内容等。
Mod 集群公开myservice 等服务。我禁用了 mod_cluster 并创建了一个 Kubernetes 服务 myservice 解析到后端 Pod 认为 Ingress 规则将请求尽可能远地获取 httpd 然后 httpd 将能够通过 Kubernetes 解析后端服务但我得到 404s我无法解决myservice
服务可以通过如下的反向代理规则来解决,但这不是首选的解决方案
# Redirect to myjbossserv
ProxyPass /myservice/services/command/ http://myjbossserv:8080/myservice/services/command/ <-----myjbossserv is a service registered in kubernetes
ProxyPassReverse /myservice/services/command/ http://myjbossserv:8080/myservice/services/command/
非常感谢任何帮助
【问题讨论】:
-
404 表示后端成功处理了您的请求,但没有找到数据。您可能在 jboss 路径中配置错误,或者请求与 jboss 预期的不同。
-
您能否提供服务列表并描述您的
httpd服务是否一切正常? -
你部署了入口控制器吗?
-
嗨@NickRak 1。是的,我已经部署了入口控制器,入口规则部署在2之上。如果我启用mod集群,我可以看到请求到达httpd。然后 httpd/mod_cluster manager 解析后端服务,例如 myservice 3。如果我禁用 modcluster manager,我可以看到请求到达 httpd,然后 httpd 尝试解析静态内容 /var/www/myservice 但不能。它不会尝试解析服务。 4. 如果我使用反向代理规则而不是 mod_cluster 它可以工作!但这不是很“云原生”
-
@NickRak addeddum:我已将工作 Revers 代理规则添加到主 qn...
标签: docker nginx kubernetes reverse-proxy mod-cluster