ASM网关支持HTTPS安全支持和证书动态加载功能,以此提高ASM网关的安全性。您可以在ASM网关的CLB侧绑定证书,创建HTTPS类型的监听。HTTPS请求将在CLB侧解密,然后以HTTP请求的形式发送给后端的网关Pod。本文介绍如何在ASM网关的CLB侧绑定证书,创建HTTPS类型的监听。
前提条件
步骤一:准备CLB需要的证书
已创建证书和私钥
如果您已拥有针对aliyun.com可用的证书和私钥,需要将私钥命名为aliyun.com.key,证书命名为aliyun.com.crt。
未创建证书和私钥
如果您未创建证书和私钥,可以通过openssl,参照以下步骤为aliyun.com生成证书和私钥。
执行以下命令,创建根证书和私钥。
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -subj '/O=myexample Inc./CN=aliyun.com' -keyout aliyun.root.key -out aliyun.root.crt
创建SSL证书。
在传统型负载均衡CLB控制台左侧导航栏,选择 。
在证书管理页面,单击创建证书。
在创建证书面板,选择阿里云签发证书,从证书列表最下方单击创建SSL证书。
在数字证书管理服务页面的左侧导航栏,选择证书管理 > SSL证书管理。
单击上传证书页签的上传证书,填写证书名称为aliyun.com,将生成的根证书和私钥对应上传到证书文件和证书私钥输入框中。单击确定,并忽略证书链的提示。
通过传统型负载均衡CLB控制台创建证书。具体操作,请参见选择阿里云签发证书。
步骤二:创建HTTPS类型的监听
ASM提供了自定义入口网关服务的功能,便于您通过YAML配置的方式定义相关功能参数。具体操作,请参见使用KubeAPI管理入口网关。
将以下内容,补充到ingressgateway.yaml文件中。
spec: .... ports: - name: http-0 port: 80 protocol: HTTP targetPort: 80 - name: https-1 port: 443 protocol: HTTPS targetPort: 80 .... serviceAnnotations: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id: "${YOUR_CERT_ID}" service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: 'https:443' .... serviceType: LoadBalancer
通过
serviceAnnotations
创建一个HTTPS类型的CLB。以443为端口的HTTPS请求将在CLB侧解密,然后以HTTP请求的形式发送给后端的Pod的80端口。YAML中${YOUR_CERT_ID}
由步骤一获取。执行以下命令,部署入口网关。
kubectl apply -f ingressgateway.yaml
步骤三:验证HTTPS监听是否成功
登录ASM控制台,在左侧导航栏,选择 。
在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择 。
在入口网关页面,查看目标网关的服务地址。
服务地址即为目标网关的IP地址。
执行以下命令,通过HTTPS协议访问productpage服务。
命令中
${替换成入口网关真实IP}
由上一步获取。curl -k -H Host:a.aliyun.com --resolve a.aliyun.com:443:${替换成入口网关真实IP} https://a.aliyun.com/productpage -I
示例输出:
HTTP/2 200 date: Fri, 13 Jan 2023 07:11:45 GMT content-type: text/html; charset=utf-8 content-length: 5294 vary: Accept-Encoding x-envoy-upstream-service-time: 23
加密流量经过CLB时被解密为明文,然后进入集群。该结果表明HTTPS监听配置成功。