我正在尝试在 Google Kubernetes Engine 上创建一个运行 nginx、RStudio 服务器和两个 Shiny 应用程序的集群,遵循并适应本指南 https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer.
我有 4 个工作负载,在 UI 中都是绿色的,通过以下方式部署:
kubectl run nginx --image=nginx --port=80
kubectl run rstudio --image gcr.io/gcer-public/persistent-rstudio:latest --port 8787
kubectl run shiny1 --image gcr.io/gcer-public/shiny-googleauthrdemo:latest --port 3838
kubectl run shiny5 --image=flaviobarros/shiny-wordcloud --port=80
然后它们全部通过以下方式暴露为节点端口:
kubectl expose deployment nginx --target-port=80 --type=NodePort
kubectl expose deployment rstudio --target-port=8787 --type=NodePort
kubectl expose deployment shiny1 --target-port=3838 --type=NodePort
kubectl expose deployment shiny5 --target-port=80 --type=NodePort
..用户界面中都是绿色的。
然后我部署了这个 Ingress 后端
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: r-ingress
spec:
rules:
- http:
paths:
- path: /
backend:
serviceName: nginx
servicePort: 80
- path: /rstudio/
backend:
serviceName: rstudio
servicePort: 8787
- path: /shiny1/
backend:
serviceName: shiny1
servicePort: 3838
- path: /shiny5/
backend:
serviceName: shiny5
servicePort: 80
结果是 nginx 路由工作得很好,我可以从家里看到“欢迎来到 nginx”网页,但我得到的其他三个路径:
- /rstudio/ -
Input/output error
- /shiny1/ - 找不到页面(闪亮的 404 页面)
- /shiny5/ - 找不到页面(闪亮的 404 页面)
RStudio 和 Shiny 工作负载在通过单个负载均衡器公开时都可以工作,分别映射到 8787 和 3838。
谁能指出我哪里出错了?
Qs:
- Dockerfile 是否需要进行调整,以便在请求“/”时它们都在端口 80 上给出 200 状态?我需要更换健康检查器吗?我尝试更改 RStudio 登录页面(如果您未登录,则将 302 更改为 /auth-sign-in),但没有成功
- RStudio 和 Shiny 都需要 websockets - 这会影响吗?
- 是否需要启用会话关联性?我尝试用 IP 添加它,但出现同样的错误。
正如拉狄克建议的那样,ingress.kubernetes.io/rewrite-target: /
需要重写您的请求。但是,GKE 入口控制器目前不支持此功能,这也是您收到 404 响应的原因。
相反,在 GKE 上,您必须使用nginx 入口控制器 https://github.com/kubernetes/ingress-nginx/blob/master/deploy/README.md.
然后,您将能够为您的 rstudio 和遵守重写规则的闪亮图像配置入口:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: r-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- backend:
serviceName: rstudio
servicePort: 8787
path: /rstudio/*
- backend:
serviceName: shiny1
servicePort: 3838
path: /shiny1/*
- backend:
serviceName: shiny5
servicePort: 80
path: /shiny5/*
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)