使用HTTP设置Kuberentes集群RStudio和Shiny的负载平衡入口会导致错误页面

Mar*_*keD 6 rstudio-server kubernetes google-kubernetes-engine kubernetes-health-check

我正在尝试在Google Kubernetes Engine上创建一个运行nginx,RStudio服务器和两个Shiny应用程序的集群,遵循并修改本指南.

我有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
Run Code Online (Sandbox Code Playgroud)

然后它们通过以下方式暴露为节点端口:

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
Run Code Online (Sandbox Code Playgroud)

..在UI中都是绿色的.

然后我部署了这个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
Run Code Online (Sandbox Code Playgroud)

结果是nginx路由工作得很好,我可以在家看到"欢迎来到nginx"网页,但我得到的其他三条路径:

  • / rstudio/ - Input/output error
  • / shiny1/ - 找不到页面(Shiny 404页面)
  • / shiny5/ - 找不到页面(Shiny 404页面)

RStudio和Shiny工作负载在通过单个负载均衡器进行曝光时均有效,分别映射到8787和3838.

谁能指出我哪里错了?

QS:

  • 是否需要调整Dockerfiles,以便在请求"/"时它们在端口80上都给出200状态?我需要更换健康检查员吗?我尝试更改RStudio登录页面(如果您没有登录,则将302改为/ auth-sign-in)但没有运气
  • RStudio和Shiny都需要websockets - 这会影响这个吗?
  • 会话亲和力是否需要开启?我尝试添加IP,但错误相同.

小智 4

正如拉德克(Radek)建议的那样,ingress.kubernetes.io/rewrite-target: /需要重写您的请求。但是,GKE 入口控制器目前不支持此功能,这也是您收到 404 响应的原因。

相反,在 GKE 上,您必须使用nginx 入口控制器

然后,您将能够为 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/*
Run Code Online (Sandbox Code Playgroud)