今天突然接到百度云的邮件和短信,说我的 rainwu.cn 网站存在网站无法访问的问题,要求我在 2022-07-01 14:00:00 前完成整改:
至于不整改会怎样,邮件里没说,短信里说会停止接入。我通过邮件里的客服电话咨询了一下,客服说他么那边访问不了我的网站,问我是不是没解析对地址,我在自己的电脑浏览器和手机浏览器尝试了一下,都很OK,我让客服在网址前面加上 https
尝试了一下,客服说可以了。所以这是因为我们没有配置 http
地址暴露的问题,因为我采用的是 kubernetes 的 ingress 对外暴露的网址,在配置 ingress 的时候并没有配置 http
协议,只配置了 https
协议,这样就导致了外部客户端访问 http
地址的时候会请求失败,在网上查询了一下解决方案,可以新增加一个 http
协议的 ingress,为 ingress 配置增加如下注解(annotations)来解决这个问题:
nginx.ingress.kubernetes.io/ssl-redirect: 'true'
nginx.ingress.kubernetes.io/permanent-redirect-code: '308'
配置了 ssl-redirect
可以实现 http 强制跳转至 https,通过增加上面的注解可以实现 http 强制跳转至 https,因为某些浏览器不一定支持 308 状态,所以还要配置 permanent-redirect-code
参数。
Kubesphere 控制台配置如下:
1、创建一条新的应用路由(ingress):
2、添加两条新的路由规则,分别是 rainwu.cn
和 www.rainwu.cn
, 协议都选择 http ,添加完成后选择“下一步”,
3、在 高级配置 中 添加元数据,添加刚才提到的两条注解,如下图,最后点击 创建 按钮。
该 ingress 配置的 yaml 文件如下:
kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
name: halo-http-ingress
namespace: halo-project
annotations:
kubesphere.io/creator: admin
nginx.ingress.kubernetes.io/permanent-redirect-code: '308'
nginx.ingress.kubernetes.io/ssl-redirect: 'true'
spec:
rules:
- host: rainwu.cn
http:
paths:
- path: /
pathType: ImplementationSpecific
backend:
service:
name: halo
port:
number: 8090
- host: www.rainwu.cn
http:
paths:
- path: /
pathType: ImplementationSpecific
backend:
service:
name: halo
port:
number: 8090