今天突然接到百度云的邮件和短信,说我的 rainwu.cn 网站存在网站无法访问的问题,要求我在 2022-07-01 14:00:00 前完成整改:
image-1655458669361
至于不整改会怎样,邮件里没说,短信里说会停止接入。我通过邮件里的客服电话咨询了一下,客服说他么那边访问不了我的网站,问我是不是没解析对地址,我在自己的电脑浏览器和手机浏览器尝试了一下,都很OK,我让客服在网址前面加上 https 尝试了一下,客服说可以了。所以这是因为我们没有配置 http 地址暴露的问题,因为我采用的是 kubernetesingress 对外暴露的网址,在配置 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):
image-1655458803001
2、添加两条新的路由规则,分别是 rainwu.cnwww.rainwu.cn , 协议都选择 http ,添加完成后选择“下一步”,
image-1655458833416
image-1655458842681
3、在 高级配置添加元数据,添加刚才提到的两条注解,如下图,最后点击 创建 按钮。
image-1655458886293

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