在云端环境使用Kubernetes与SLB(负载均衡器)搭建HTTPS时,有多种实现的方式:
- 在SLB上配置HTTPS,SLB通过HTTP直接访问到集群内的具体服务(SLB负责处理HTTPS)
- 在SLB上配置TCP 443端口到Ingress的映射,SLB通过TCP将流量转发到Ingress,在容器集群内为具体服务配置Ingress路由,并配置TLS证书(Ingress负责处理HTTPS)
- 在SLB上配置HTTPS 443端口到Ingress的映射,SLB通过HTTP将流量转发到Ingress,在容器集群内为具体服务配置Ingress路由(SLB负责处理HTTPS)
阿里云的Kubernetes文档里,介绍了第一种和第二种方式的配置,但是没有第三种配置的方法:在Kubernetes中实现HTTPS安全访问。
经过一些尝试,发现在容器服务Kubernetes的环境基础上,可以通过自行更新Ingress Service的配置,实现第三种配置,步骤如下:
- 在SLB上传SSL证书(如果使用了阿里云SSL证书服务,可直接在证书服务控制台将证书推送到SLB),记录证书在SLB的id
- 在容器服务 - Kubernetes控制台,进入“服务”,将命名空间切换为“kube-system”,更新nginx-ingress-lb服务配置,做以下修改:
将服务端口443映射到容器端口80
在注解中添加参数 service.beta.kubernetes.io/alicloud-loadbalancer-cert-id,对应值为步骤1记录的证书id;添加参数service.beta.kubernetes.io/alicloud-loadbalancer-protocol-port,对应值为"https:443"
- 配置相应的ingress路由,配置好域名,此时就可以在浏览器中通过https协议访问到相应的路由了。