# 通过反向代理访问 Kuboard

# 为何使用反向代理

为了方便用户能够快速地了解和测试 Kuboard,Kuboard 使用了 http 协议,在生产环境中,为了获得更强的安全性,请务必为 Kuboard 配置 HTTPS。最便捷的方式是使用 Kubernetes Ingress 进行配置并启用 HTTPS;用户也可以使用自己配置的 Nginx 将请求反向代理到 Kuboard,在 Nginx 上配置 HTTPS。

# 配置反向代理时的注意事项

在为 Kuboard 配置反向代理时,需要注意:

  • WebContextRoot
    • Kuboard 需要使用根路径进行访问,即 https://yourkuboard.yourcompany.com/,而不能是 https://yourcompany.com/kuboard/ 这样的二级路径;
  • 启用 WebSocket
    • Kuboard 中终端和日志的功能需要用到 WebSocket,需要在您的反向代理中配置 WebSocket,才能正常使用 Kuboard 的终端和日志功能;
  • PassHeader
    • Kuboard 的 Portforward v2.0.1 功能需要用到 SPDY 协议,需要您的反向代理能够支持此协议,并将 Upgrade,Connection,Authorization 这几个 Header 传递给 Kuboard。

# 配置样例

# Ingress 配置

本章节假设您使用 nginx-ingress (opens new window) 作为您的 Ingress Controller,其他类型的 Ingress 控制器(如 traefik,ingress-nginx 等)请自行参考其官方文档,了解如何启用 WebSocket 并配置 PassHeader

  • 第 9 行,通过 nginx.org/proxy-pass-headers 设置 PassHeader
  • 第 10 行,为 kuboard Service 开启 WebSocket
  • 第 29 行,将 Web 的根路径映射到 kuboard








 
 


















 





---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
    k8s.kuboard.cn/displayName: kuboard
    k8s.kuboard.cn/workload: kuboard
    nginx.com/sticky-cookie-services: serviceName=kuboard srv_id expires=1h path=/
    nginx.org/proxy-pass-headers: 'Upgrade,Connection,Authorization'
    nginx.org/websocket-services: kuboard
  creationTimestamp: '2020-03-21T01:35:08Z'
  generation: 3
  labels:
    k8s.kuboard.cn/layer: monitor
    k8s.kuboard.cn/name: kuboard
  name: kuboard
  namespace: kube-system
  resourceVersion: '25838555'
  selfLink: /apis/networking.k8s.io/v1beta1/namespaces/kube-system/ingresses/kuboard
  uid: b7903125-9a95-4562-b45a-b506359b5c19
spec:
  rules:
    - host: demo.kuboard.cn
      http:
        paths:
          - backend:
              serviceName: kuboard
              servicePort: http
            path: /
  tls:
    - hosts:
        - demo.kuboard.cn
      secretName: demo.kuboard.cn
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

# Nginx 配置

如果您使用 nginx 作为反向代理,配置文件样例如下所示:







 
 
 




 
 
 










server {
  listen  80;
  server_name kuboard.yourdomain.com;   # 替换成你的域名
  location / {
    proxy_pass  http://192.168.2.39:32567;  # 替换成你的节点地址
    proxy_http_version 1.1;
    proxy_pass_header Authorization;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    # proxy_set_header X-Forwarded-Proto https; # 如果您在反向代理上启用了 HTTPS
  }
  location /k8s-ws/ {
    proxy_pass  http://192.168.2.39:32567;  # 替换成你的节点地址
    proxy_http_version 1.1;
    proxy_pass_header Authorization;
    proxy_set_header Upgrade "websocket";
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    # proxy_set_header X-Forwarded-Proto https; # 如果您在反向代理上启用了 HTTPS
  }
  gzip on;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
更新时间: 2020-07-25 21:08:14