ASM网关支持HTTPS协议和动态加载证书功能。在使用Knative on ASM时,可以通过ASM网关来实现HTTPS访问。本文将演示如何使用ASM网关来实现HTTPS访问Knative服务。
本系列文章包括以下部分:
使用ASM管理Knative服务(1):Knative on ASM概述
使用ASM管理Knative服务(2):使用Knative on ASM部署Serverless应用
使用ASM管理Knative服务(3):在Knative on ASM中使用自定义域名
使用ASM管理Knative服务(4):使用ASM网关实现HTTPS访问Knative服务
使用ASM管理Knative服务(5):在Knative on ASM中基于流量灰度发布服务
使用ASM管理Knative服务(6):基于流量请求数实现服务自动扩缩容
前提条件
- 已使用Knative on ASM创建Knative服务。具体操作,请参见使用Knative on ASM快速部署Serverless应用
- 使用自定义域名aliyun.com, 参见在Knative on ASM中使用自定义域名
创建证书与私钥
使用域名时需要备案才能正常访问。本示例中使用aliyun.com生成证书和私钥,并保存为Secret。
如果您已经拥有针对aliyun.com可用的证书和私钥,需要将密钥命名为aliyun.com.key
,证书命名为aliyun.com.crt
。如果没有,可以通过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
3) 在入口网关Pod所在的集群对应的KubeConfig环境下,执行以下命令,在istio-system命名空间中创建包含证书和私钥的Secret。
kubectl create -n istio-system secret tls myexample-credential --key=aliyun.com.key --cert=aliyun.com.crt
开启HTTPS访问
1) 将以下内容中的domainName字段修改为您使用的域名(本示例中为aliyun.com),credentialName为上一步中创建的Secret名称(本示例中为myexample-credential)。完成后保存为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
2) 使用kubectl连接到服务网格,在命令行执行以下命令:
kubectl apply -f default.yaml
使用HTTPS访问服务
1) 更新Hosts文件,在Hosts文件中添加新域名的绑定信息。绑定样例如下(请将xx.xx.xxx.xx替换为您的网关ip):
xx.xx.xxx.xx helloworld-go.default.aliyun.com
2) 在命令行执行以下命令,通过证书访问HTTPS服务。
curl -k --cert aliyun.com.crt --key aliyun.com.key https://helloworld-go.default.aliyun.com
# 预期输出
# Hello Knative!
3) 或者在浏览器中直接访问https://helloworld-go.default.aliyun.com (浏览器可能会提示该地址不安全,无须担心,这是由于我们使用了自签名证书)