使用Knative on ASM部署Serverless应用
阿里云服务网格ASM集成容器服务ACK、ACK Serverless上Knative的Serving能力,支持结合ACK或ACK Serverless部署管理Serverless应用服务。本文介绍如何使用Knative on ASM创建Knative服务。
前提条件
已创建v1.16及以上版本的ASM实例,并已将一个ACK或ACK Serverless集群添加到该实例中。具体操作,请参见创建ASM实例和添加集群到ASM实例。
重要创建ASM实例时,请确保在资源配置区域,启用数据面集群KubeAPI访问Istio资源已勾选(默认勾选),即已启用数据面KubeAPI访问Istio资源。
目标ACK或ACK Serverless集群已开启公网API Server,以便快速接入。
ASM实例和ACK或ACK Serverless集群需处于同一VPC、同一地域并使用同一交换机。
已为集群添加入口网关。本实例使用ASM入口网关作为集群网关。具体操作,请参见创建入口网关。
说明ASM网关支持为Knative提供Knative Revisions流量分发,支持gRPC服务、超时和重试、TLS证书和外部认证授权等功能。详细信息,请参见ASM网关概述。
步骤一:开启Knative on ASM功能
ASM实例版本为1.18.2.104以下
ASM实例版本为1.18.2.104及以上
步骤二:部署Knative服务
Knative on ASM支持通过ACK控制台和YAML配置文件两种方式部署Knative服务。您可以按需选择。
通过ACK控制台部署
登录容器服务管理控制台,在左侧导航栏单击集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择
。在服务管理页签右上角,单击创建服务,配置相关信息,然后单击创建。
配置项
说明
命名空间
选择该服务所属的命名空间。
服务名称
自定义该服务的名称。
镜像名称
单击选择镜像,在弹出的对话框中选择所需的镜像并单击确定。同时支持填写私有Registry。填写的格式为domainname/namespace/imagename:tag。本示例为registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go。
镜像版本
单击选择镜像版本。本示例为73fbdd56。
访问协议
支持HTTP和gRPC两种访问协议。
容器端口
设置暴露的容器访问端口,端口号必须介于1~65535。
通过YAML配置文件部署
将以下内容保存为hello.yaml。
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-go annotations: knative.k8s.alibabacloud/tls: "false" spec: template: spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/acs/helloworld-go:160e4dc8 ports: - containerPort: 8080 env: - name: TARGET value: "Knative"
使用kubectl连接到ACK集群,执行以下命令创建Knative Service,并等待Knative Service创建成功。
kubectl apply -f hello.yaml
执行以下命令,查看Knative服务列表。
kubectl get ksvc
预期输出:
NAME URL LATESTCREATED LATESTREADY READY REASON helloworld-go http://helloworld-go.default.example.com helloworld-go-00001 helloworld-go-00001 True
步骤三:获取访问网关地址
通过ACK控制台获取
登录容器服务管理控制台,在左侧导航栏单击集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择
。单击服务管理页签,然后在服务列表中单击目标服务名称,进入Knative服务详情页面。在基本信息区域,查看并获取访问网关及默认域名。
通过ASM控制台获取
登录ASM控制台,在左侧导航栏,选择 。
在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择
。在入口网关页面的服务地址区域,查看并获取访问网关地址。
步骤四:访问服务
Knative服务创建完成后,通过绑定Host域名与访问网关,可以直接访问服务地址。
将步骤三:获取访问网关地址中获取的访问网关地址与需要访问的域名进行Host绑定,在Hosts文件中添加绑定信息。
绑定示例代码如下。
说明请将
xx.xx.xxx.xx
替换为您实际的访问网关地址。xx.xx.xxx.xx helloworld-go.default.example.com
Host绑定完成后,通过域名直接访问服务。
命令行访问
curl http://helloworld-go.default.example.com # 预期输出 Hello Knative!
链接访问
在浏览器中直接访问
http://helloworld-go.default.example.com
。预期输出: