为ELB Ingress配置HTTP重定向到HTTPS
Ingress支持将HTTP协议的访问请求转发至HTTPS协议的监听器上。配置Ingress重定向到重定向到HTTPS的示例如下,本示例将访问example.com/test的HTTP请求重定向至HTTPS 443端口。
前提条件
- Ingress为后端工作负载提供网络访问,因此集群中需提前部署可用的工作负载。若您无可用工作负载,可参考创建无状态负载(Deployment)、创建有状态负载(StatefulSet)或创建守护进程集(DaemonSet)部署工作负载。
- 您需要为上述工作负载配置Service,ELB Ingress支持的Service类型请参见ELB Ingress支持的Service类型。
约束与限制
- ELB Ingress高级转发策略仅支持使用独享型ELB。
- ELB Ingress高级转发策略支持的集群版本为v1.23.14-r0、v1.25.9-r0、v1.27.6-r0、v1.28.4-r0及以上。
配置HTTP重定向到HTTPS
您可以使用以下方式配置HTTP重定向到HTTPS。
- 登录CCE控制台,单击集群名称进入集群。
- 选择左侧导航栏的“服务”,在右侧选择“路由”页签,单击右上角“创建路由”。
- 设置Ingress参数。
本示例中展示配置HTTP重定向到HTTPS的关键参数,其余参数可按需配置,详情请参见通过控制台创建ELB Ingress。
表1 关键参数说明 参数
配置说明
示例
名称
自定义Ingress名称。
ingress-test
负载均衡器
选择对接的ELB实例或自动创建ELB实例。本例中仅支持选择“独享型”。
独享型ELB
监听器配置
- 前端协议:可选择“HTTP”或“HTTPS”。
- 对外端口:ELB监听器的端口。
- 重定向至HTTPS:开启后进行HTTPS端口配置。
- 对外端口:HTTPS协议的端口。
- 证书来源:支持TLS密钥和ELB服务器证书。
- 服务器证书:使用在ELB服务中创建的证书。
如果您没有可选择的ELB证书,可前往ELB服务创建,详情请参见创建证书。
- 前端协议:“HTTP”
- 对外端口:80
- 重定向至HTTPS:开启
- 对外端口:443
- 证书来源:ELB服务器证书
- 服务器证书:cert-test
转发策略配置
- 域名:实际访问的域名地址,不配置时可通过IP地址访问Ingress。请确保所填写的域名已注册并备案,一旦配置了域名规则后,必须使用域名访问。
- 路径匹配规则:支持前缀匹配、精确匹配、正则匹配,请按需选择。
- 路径:后端应用对外提供访问的路径,此处添加的访问路径要求后端应用内存在相同的路径,否则转发无法生效。
- 目标服务名称:请选择已有Service或新建Service。页面列表中的查询结果已自动过滤不符合要求的Service。
- 目标服务访问端口:可选择目标Service的访问端口。
- 域名:无需填写
- 路径匹配规则:正则匹配
- 路径:/
- 目标服务名称:nginx
- 目标服务访问端口:80
图1 配置HTTP重定向到HTTPS
图2 重定向至HTTPS的端口配置
- 配置完成后,单击“确定”。
Ingress重定向到HTTPS监听器可通过注解实现,示例如下:
- 请参见通过kubectl连接集群,使用kubectl连接集群。
- 创建名为“ingress-test.yaml”的YAML文件,此处文件名可自定义。
vi ingress-test.yaml
以关联已有ELB为例,YAML配置文件如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: test-redirect-listener namespace: default annotations: kubernetes.io/elb.id: df76342f-e898-402a-bac8-bde5bf974da8 kubernetes.io/elb.class: performance kubernetes.io/elb.listen-ports: '[{"HTTP":80},{"HTTPS":443}]' # 多端口配置 kubernetes.io/elb.ssl-redirect: 'true' # 开启HTTP重定向到HTTPS kubernetes.io/elb.tls-certificate-ids: 6cfb43c9de1a41a18478b868e34b0a82 # HTTPS监听器服务端证书 spec: rules: - host: '' http: paths: - path: / backend: service: name: test-service port: number: 80 property: ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH pathType: ImplementationSpecific ingressClassName: cce
表2 关键参数说明 参数
是否必填
参数类型
描述
kubernetes.io/elb.listen-ports
是
string
多端口监听配置。配置后不支持修改。
格式为json字符串格式,例如:
[{"HTTP":80},{"HTTPS":443}]
参数说明:端口号范围 1~65535
kubernetes.io/elb.ssl-redirect
是
string
是否开启HTTP重定向到HTTPS。
格式说明:支持字段 "true" 和 "false"
参数说明:"true" 表示开启重定向能力,"false"或参数不存在表示不开启重定向能力
该注解不能和灰度发布的注解一起配置。
- 创建Ingress。
kubectl create -f ingress-test.yaml
回显如下,表示Ingress服务已创建。
ingress/test-redirect-listener created
- 查看已创建的Ingress。
kubectl get ingress
回显如下,表示Ingress服务创建成功。
NAME CLASS HOSTS ADDRESS PORTS AGE test-redirect-listener cce * 121.**.**.** 80 10s