Skip to main content

前端使用 HTTP

介绍如何配置前端访问协议为 HTTP

平台部署后默认打开了 TLS 服务端(单向)认证,使用 HTTPS 协议进行浏览器访问前端界面。本文介绍如何配置使用 HTTP 协议访问前端。

编辑 onecloudcluster spec

首先需要编辑 oc.spec.web.useHTTP 属性,该属性默认为 false ,需要设置为 true ,操作如下:

$ kubectl edit oc -n onecloud

搜 useHTTP 关键字,进行如下编辑:

spec:
web:
@@ -1122,7 +1122,7 @@
key: node-role.kubernetes.io/master
- effect: NoSchedule
key: node-role.kubernetes.io/controlplane
- useHTTP: false
+ useHTTP: true
webconsole:
affinity:
nodeAffinity:

删除旧的 web configmap

web 组件的 configmap 其实是一个 nginx 配置,该配置不会重新生成,需要删除后由 operator 新建,操作如下:

# 删除 web 组件的 configmap
$ kubectl delete configmap -n onecloud $(kubectl get configmap -n onecloud | grep web | grep -v console | awk '{print $1}')
configmap "default-web" deleted

# 等待 15s 后,该 configmap 会新建,查看生成的内容
$ kubectl get configmap -n onecloud $(kubectl get configmap -n onecloud | grep web | grep -v console | awk '{print $1}')
NAME DATA AGE
default-web 1 28s

# 查看其中是否有 80 端口配置,有的话就没有问题了
$ kubectl get configmap -n onecloud $(kubectl get configmap -n onecloud | grep web | grep -v console | awk '{print $1}') -o yaml | grep 'listen 80'
listen 80 default_server;

重启 web 组件

更新完 web 组件的 configmap 后,需要重启 web 组件的 deployment ,命令为:

# 重启 web deployment
$ kubectl rollout restart deployment -n onecloud $(kubectl get deployment -n onecloud | grep web | grep -v console | awk '{print $1}')
deployment.extensions/default-web restarted

# 等待 pod 变为 Running
$ kubectl get pods -n onecloud | grep web | grep -v console
default-web-5bfb6c578b-mdh9w 3/3 Running 0 58s

更新 ingress

web 组件的 service 是使用 ingress 暴露出去的,ingress 默认也不会刷新,需要删除再次创建,操作如下:

$ kubectl delete ingress -n onecloud $(kubectl get ingress -n onecloud | grep web | awk '{print $1}')
ingress.extensions "default-web" deleted

查看重建的 ingress 规则,已经路由到 80 端口即可:

$ kubectl get ingress -n onecloud $(kubectl get ingress -n onecloud | grep web | awk '{print $1}') -o yaml | grep -i port
onecloud.yunion.io/last-applied-configuration: '{"rules":[{"http":{"paths":[{"backend":{"serviceName":"default-web","servicePort":80},"path":"/"}]}}],"tls":[{"secretName":"default-certs"}]}'
servicePort: 80

配置 traefik ingress controller

如果是使用 helm 部署的集群,就不用执行该步骤了,ingress controller 的实现和具体的 k8s 部署平台有关,现在 web 服务已经是使用 HTTP 协议了。

下面的步骤仅适用于使用 ocboot 部署的平台,需要设置 traefik ingress controller ,把 http 重定向到 https 这个配置关掉。

K3s 默认使用 Traefik v2 作为 ingress controller,配置方式与 K8s 不同。

在第一个控制节点编辑 traefik 的 DaemonSet 配置文件:

$ vim /var/lib/rancher/k3s/server/manifests/traefik-ds.yaml

找到容器的 args 部分,注释掉 --entrypoints.web.http.redirections.entrypoint.to=websecure 这一行:

containers:
- args:
- --entrypoints.web.address=:80/tcp
- --entrypoints.websecure.address=:443/tcp
- - --entrypoints.web.http.redirections.entrypoint.to=websecure
+ #- --entrypoints.web.http.redirections.entrypoint.to=websecure
- --entrypoints.web.http.redirections.entrypoint.scheme=https
- --entrypoints.web.http.redirections.entrypoint.permanent=true

保存后 K3s 会自动检测到 manifests 目录的变更并重新部署 traefik,无需手动重启。

至此 HTTP 所有配置完成。