目前大部分应用,都会提供 HTTP 访问能力,如果希望帮助客户直接集成 HTTPS 的证书和域名绑定,可以参考本文档。
架构设计
按照下面的架构,来制作一个支持 HTTPS 访问的安装包。


声明安装参数
在 pacakge.yaml 声明安装参数如下:
args:- name: app_certificationlabel: SSL 证书widget: certificate-selectoptional: true- name: app_domainlabel: 域名widget: domain-inputoptional: truecertId: ${app_certification.certId}
对应安装表单效果:


通过 certificate-select 和 domain-input 声明了两个参数,分别接收客户的证书和域名输入。域名组件绑定证书 ID,可以帮助用户选择或者输入跟证书兼容的域名。
声明资源栈
在 variable.tf 添加两个变量,接收安装参数:
variable "app_certification" {type = object({certId = string})}variable "app_domain" {type = object({domain = string})}
在 deployment.tf,声明 CLB 的实例、监听器和相应转发规则:
# 声明 CLB 实例resource "tencentcloud_clb_instance" "open_clb" {# 负载均衡实例的网络类型,OPEN:公网,INTERNAL:内网network_type = "OPEN"# 安全组security_groups = [var.sg.security_group.id]# VPCvpc_id = var.app_target.vpc.id# 子网subnet_id = var.app_target.subnet.id# 启用默认放通,即 Target 放通来自 CLB 的流量load_balancer_pass_to_target = true}# 声明 CLB HTTPS 监听器resource "tencentcloud_clb_listener" "https_listener" {clb_id = tencentcloud_clb_instance.open_clb.idlistener_name = "https_listener"# CLB 监听 443 端口,支持 HTTPS 访问port = 443protocol = "HTTPS"# 这里使用安装参数里声明的证书certificate_id = var.app_certification.certIdcertificate_ssl_mode = "UNIDIRECTIONAL"}# 声明 CLB 转发规则resource "tencentcloud_clb_listener_rule" "https_rule" {clb_id = tencentcloud_clb_instance.open_clb.idlistener_id = tencentcloud_clb_listener.https_listener.id# 这里配置为安装参数声明的域名,意思是当请求是这个域名的请求时,进行转发domain = var.app_domain.domain# 哪个路径转发,这里配置根路径,全站转发url = "/"}# 声明 CLB 后端服务绑定,将命中转发规则的流量,转发到 CVMresource "tencentcloud_clb_attachment" "clb_backend" {clb_id = tencentcloud_clb_instance.open_clb.idlistener_id = tencentcloud_clb_listener.https_listener.idrule_id = tencentcloud_clb_listener_rule.api_https_rule.idtargets {# CVM 实例ID(需替换成真实的实例ID)instance_id = tencentcloud_instance.demo_cvm[0].id# 假设我们的 CVM 打开的是 3000 的 http 端口port = 3000# 权重weight = 100}}
原理
CLB 这个产品设计是用作负载均衡,但也支持用作证书卸载。它对客户提供 HTTPS 的端口,然后,后端转发到软件的 HTTP 端口。


CLB 的几个资源,对应控制台界面如上图。其中,证书是挂在监听器中的:


完整示例
其他方案