使用ASM网关实现HTTPS访问Knative服务

ASM网关支持HTTPS协议和动态加载证书功能。当您需要安全地访问和管理Knative构建的微服务时,可以使用ASM网关来实现HTTPS访问,通过对服务端点进行加密传输配置保护服务间的通信,提高整体架构的安全性和可靠性。

前提条件

创建证书与私钥

域名使用前,需要备案才能正常访问。本示例中使用域名aliyun.com生成证书和密钥,并保存为Secret。

说明

如果您已有针对aliyun.com可用的证书和私钥,请将证书命名为aliyun.com.crt,私钥命名为aliyun.com.key

如果您没有针对aliyun.com可用的证书和私钥,您可以使用OpenSSL,执行以下步骤生成证书和私钥。

  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

证书和私钥准备完成后,请在入口网关Pod所在的集群对应的KubeConfig环境下,执行以下命令,在istio-system命名空间中创建包含证书和私钥的Secret,并保存Secret名称。

kubectl create -n istio-system secret tls myexample-credential --key=aliyun.com.key --cert=aliyun.com.crt

开启HTTPS访问

  1. 将以下内容保存为default.yaml。

    apiVersion: istio.alibabacloud.com/v1beta1
    kind: ASMKnativeConfig
    metadata:
      name: default
    spec:
      enabled: true
      useExisting: true
      tag: 1.4.0
      domainConfig:
        domainName: aliyun.com # 替换为您使用的域名。
        credentialName: myexample-credential # 替换为您的Secret名称。
  2. 使用kubectl连接到服务网格,在命令行执行以下命令。

    kubectl apply -f default.yaml

使用HTTPS访问服务

  1. 更新Hosts文件,在Hosts文件中添加新域名的绑定信息。

    绑定代码示例如下。

    说明

    请将xx.xx.xxx.xx替换为您实际的访问网关地址。关于如何获取访问网关地址的具体操作,请参见获取访问网关地址

    xx.xx.xxx.xx helloworld-go.default.aliyun.com
  2. 访问HTTPS服务。

    • 命令行访问

      在命令行执行以下命令,通过证书访问HTTPS服务。

      curl -k --cert aliyun.com.crt --key aliyun.com.key https://helloworld-go.default.aliyun.com
      
      # 预期输出
      Hello Knative!
    • 链接访问

      在浏览器中直接访问https://helloworld-go.default.aliyun.com

      hello knative https访问

      说明

      由于使用了自签名证书,访问该服务时浏览器可能会提示该地址不安全,请勿担心。

相关操作

  • Knative on ASM提供基于流量的灰度发布能力。创建Knative服务时,Knative会为服务自动创建第一个修订版本Revision。后续每当Knative服务的配置发生变化时,Knative都会创建一个新修订版本,通过修改流量发往不同修订版本的分配比例来实现灰度发布功能。具体操作,请参见在Knative on ASM中基于流量灰度发布服务

  • Knative Serving为每个Pod注入QUEUE代理容器(queue-proxy)。该容器负责向Autoscaler报告业务容器的并发指标。接收到这些指标之后,Autoscaler会根据并发请求数及缩放算法,调整Deployment的Pod数量,从而实现自动扩缩容。具体操作,请参见基于流量请求数实现服务自动扩缩容