在ASM网关的CLB侧创建HTTPS监听

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生成证书和私钥。

  1. 执行以下命令,创建根证书和私钥。

    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
  2. 执行以下命令,为aliyun.com服务器生成证书和私钥。

    openssl req -out aliyun.com.csr -newkey rsa:2048 -nodes -keyout aliyun.com.key -subj "/CN=aliyun.com/O=myexample organization"
    openssl x509 -req -days 365 -CA aliyun.root.crt -CAkey aliyun.root.key -set_serial 0 -in aliyun.com.csr -out aliyun.com.crt
  3. 通过传统型负载均衡CLB控制台创建证书。具体操作,请参见选择阿里云签发证书

    配置HTTPS监听时,您可以直接使用SSL证书服务中的证书,也可以上传第三方签发的服务器证书和CA证书。

步骤二:创建HTTPS类型的监听

ASM提供了自定义入口网关服务的功能,便于您通过YAML配置的方式定义相关功能参数。具体操作,请参见使用KubeAPI管理入口网关

  1. 使用以下内容,创建ingressgateway.yaml文件。

    通过serviceAnnotations创建一个HTTPS类型的CLB。以443为端口的HTTPS请求将在CLB侧解密,然后以HTTP请求的形式发送给后端的Pod的80端口。YAML中${YOUR_CERT_ID}步骤一获取。

    apiVersion: istio.alibabacloud.com/v1beta1
    kind: IstioGateway
    metadata:
      name: ingressgateway
      namespace: istio-system
    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
  2. 执行以下命令,部署IstioGateway。

    kubectl apply -f ingressgateway.yaml

步骤三:验证HTTPS监听是否成功

  1. 登录ASM控制台,在左侧导航栏,选择服务网格 > 网格管理

  2. 网格管理页面,单击目标实例名称,然后在左侧导航栏,选择ASM网关 > 入口网关

  3. 入口网关页面,查看目标网关的服务地址

    服务地址即为目标网关的IP地址。

  4. 执行以下命令,通过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监听配置成功。