Kourier是一个基于Envoy架构实现的轻量级网关,提供Knative Revisions流量分发,支持gRPC服务、超时和重试、TLS证书和外部认证授权等功能。本文介绍如何在Knative中使用Kourier网关。
前提条件
已创建ACK Serverless集群或Kubernetes托管版集群。具体操作,请参见创建ACK Serverless集群、创建Kubernetes托管版集群。
ACK Serverless集群已开启PrivateZone。具体操作,请参见服务发现DNS。
已部署Knative。具体操作,请参见部署Knative。
步骤一:部署Kourier网关
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在组件管理页签的add-on组件区域,单击Kourier右侧操作列下的部署,然后在弹出框单击确定。
若Kourier的状态显示为已部署,表示部署成功。
步骤二:通过Kouier网关访问服务
本文以创建helloworld-go服务进行访问测试为例。
场景一:通过Kourier网关访问HTTP服务
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在Knative页面的服务管理页签下,选择命名空间为default,然后单击使用模板创建,将以下YAML示例粘贴至模板,最后单击创建。
创建一个名为
helloworld-go
的服务。apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-go spec: template: spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56 env: - name: TARGET value: "Knative"
若目标服务的状态列显示成功,表明服务已部署成功。
在服务管理页面的默认域名和访问网关列,分别获取
helloworld-go
服务的域名和网关地址。执行以下命令,访问
helloworld-go
服务。curl -H "host: helloworld-go.default.example.com" http://8.141.XX.XX # 网关IP和域名请以您的实际数据为准。
预期输出:
Hello Knative!
预期输表明,访问HTTP服务成功。
场景二:通过Kourier网关访问HTTPS服务
创建一个名为
helloworld-go
的服务。具体操作,请参见步骤3。
创建证书。
执行以下命令,生成TLS证书。
openssl genrsa -out tls.key 4096 openssl req -subj "/CN=*.example.com/L=*.example.com" -sha256 -new -key tls.key -out tls.csr echo subjectAltName = DNS:helloworld-go.default.example.com,DNS:helloworld-go.default.example.cn > extfile.cnf openssl x509 -req -days 3650 -sha256 -in tls.csr -signkey tls.key -out tls.crt -extfile extfile.cnf
执行以下命令,根据生成的TLS证书文件创建集群的Secret。
kubectl -n knative-serving create secret tls kourier-cert --key tls.key --cert tls.crt
执行以下命令,查看
knative-serving
命名空间下是否存在名为net-kourier-controller
的Deployment。kubectl get deployments -n knative-serving
执行以下命令,配置证书信息。
kubectl -n knative-serving edit deployment net-kourier-controller
在
net-kourier-controller
配置信息页面,为如下参数添加Value值。CERTS_SECRET_NAMESPACE
:添加证书Secret所在的命名空间。CERTS_SECRET_NAME
:添加证书Secret名称。
... spec: containers: - env: - name: CERTS_SECRET_NAMESPACE value: knative-serving - name: CERTS_SECRET_NAME value: kourier-cert ...
执行以下命令,查看net-kourier-controllerd的状态。
kubectl -n knative-serving get po
预期输出:
NAME READY STATUS RESTARTS AGE net-kourier-controller-****** 1/1 Running 0 10s
执行以下命令,通过证书访问HTTPS服务。
curl -H "host: helloworld-go.default.example.com" -k --cert tls.crt --key tls.key //8.141.XX.XX # 网关IP和域名请以您的实际数据为准。
预期输出:
Hello Knative!
预期输出表明,访问HTTPS服务成功。