Kourier是一个基于Envoy架构实现的轻量级网关,提供Knative Revisions流量分发,支持gRPC服务、超时和重试、TLS证书和外部认证授权等功能。本文介绍如何在Knative中使用Kourier网关。
步骤一:部署Kourier网关
- 登录容器服务管理控制台,在左侧导航栏中选择集群。
- 在集群列表页面中,单击目标集群名称,然后在左侧导航栏中,选择。
- 在组件管理页签的add-on组件区域,单击Kourier右侧操作列下的部署,然后在弹出框单击确定。
当Kourier的状态显示为已部署,表示部署成功。
步骤二:通过Kouier网关访问服务
场景一:通过Kourier网关访问HTTP服务
本文以创建helloworld-go服务进行访问测试为例,具体步骤如下:
- 使用以下YAML内容,创建helloworld-go.yaml文件。
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服务。
kubectl apply -f helloworld-go.yaml
- 执行以下命令,查看服务列表。
预期输出:
NAME URL LATESTCREATED LATESTREADY READY REASON
helloworld-go http://helloworld-go.default.example.com helloworld-go-msq9q helloworld-go-msq9q True
由预期输出得到,服务列表中存在
helloworld-go,表示服务部署成功。
- 执行以下命令,获取服务访问IP。
kubectl -n knative-serving get svc kourier
预期输出:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kourier LoadBalancer 172.21.4.211 47.107.XXX.XXX 80:31711/TCP,443:31637/TCP 47h
由预期输出得到,服务访问IP为
47.107.XXX.XXX
。
- 执行以下命令,访问HTTP服务。
curl -H "host: helloworld-go.default.example.com" http://47.107.XXX.XXX -v
预期输出:
Hello Knative!
由预期输出得到,访问HTTP服务成功。
场景二:通过Kourier网关访问HTTPS服务
- 创建证书。
- 执行以下命令,生成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命名空间下名称为kourier-control的Deployment,配置证书信息。
kubectl -n knative-serving edit deploy kourier-control
...
spec:
containers:
- env:
- name: CERTS_SECRET_NAMESPACE
value: knative-serving
- name: CERTS_SECRET_NAME
value: kourier-cert
...
保存上述修改后,kourier-control会重新启动。部分参数说明如下:
CERTS_SECRET_NAMESPACE
:替换为证书Secret所在的命名空间。
CERTS_SECRET_NAME
:替换为证书Secret名称。
- 执行以下命令,查看kourier-control状态。
kubectl -n knative-serving get po kourier-control-54888647cc-w6gqr
预期输出:
NAME READY STATUS RESTARTS AGE
kourier-control-54888647cc-w6gqr 1/1 Running 0 10s
- 执行以下命令,通过证书访问HTTPS服务。
curl -H "host: helloworld-go.default.example.com" -k --cert tls.crt --key tls.key https://47.107.XXX.XXX -v
预期输出:
HTTP/1.1 200 OK
由预期输出得到,返回
200 OK
,表示访问HTTPS服务成功。