如您需要在Knative服务中使用自定义域名,推荐您为自定义域名配置一个HTTPS证书,提高数据传输的安全性。Knative支持通过配置DomainMapping的方式指定HTTPS证书,将Knative服务安全地映射到自定义域名。
前提条件
已在集群中部署Knative,请参见部署Knative。
步骤一:创建Knative服务
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在Knative页面的服务管理页签,选择命名空间为default,然后单击使用模板创建,选择使用容器控制台的示例模板创建Knative服务(helloworld-go服务),根据控制台指引完成服务的创建。
步骤二:创建Secret证书
在Knative中,使用Secret存储和管理敏感信息,例如密钥、密码和证书等。本步骤使用OpenSSL创建一个自签名的HTTPS证书,并将证书和私钥文件编码为Base64格式,然后以Secret的形式存储到集群中。以下以自签名证书为例,介绍如何创建Secret证书。
执行以下命令,通过OpenSSL创建自签名证书。
openssl genrsa -out knativetop-key.pem 4096 openssl req -subj "/CN=helloworld.knative.top" -sha256 -new -key knativetop-key.pem -out knativetop.csr echo subjectAltName = DNS:helloworld.knative.top > extfile.cnf openssl x509 -req -days 3650 -sha256 -in knativetop.csr -signkey knativetop-key.pem -out knativetop-cert.pem -extfile extfile.cnf
预期输出:
Signature ok subject=CN = helloworld.knative.top Getting Private key
将步骤1中的
knativetop-key.pem
和knativetop-cert.pem
文件内容进行Base64编码。执行以下命令,将
knativetop-key.pem
进行Base64编码。cat knativetop-key.pem | base64
预期输出:
a25hdGl2ZXRvcC1r******
执行以下命令,将
knativetop-cert.pem
进行Base64编码。cat knativetop-cert.pem | base64
预期输出:
a25hdGl2ZXRvcC1jZ******==
执行以下命令,创建Secret。
Secret可以用于Knative服务的TLS配置中,以实现对域名
helloworld.knative.top
的安全访问。kubectl create secret tls secret-tls --key knativetop-key.pem --cert knativetop-cert.pem
预期输出:
secret/secret-tls created
步骤三:创建DomainMapping
在Knative 中,DomainMapping是一个资源对象,用于将一个域名映射到一个或多个Knative服务。通过创建DomainMapping,您可以将一个自定义的域名映射到一个Knative服务,使得应用程序可以通过这个域名进行访问。
执行以下命令,创建
helloworld.knative.top.yaml
文件。vim helloworld.knative.top.yaml
在vi编辑器中添加以下YAML内容,保存后退出编辑器。
apiVersion: serving.knative.dev/v1beta1 kind: DomainMapping metadata: name: helloworld.knative.top namespace: default spec: ref: name: helloworld-go kind: Service apiVersion: serving.knative.dev/v1 # tls block specifies the secret to be used tls: secretName: secret-tls
执行以下命令,将
helloworld.knative.top.yaml
中定义的资源应用到Kubernetes集群中。kubectl apply -f helloworld.knative.top.yaml
预期输出:
domainmapping.serving.knative.dev/helloworld.knative.top created
执行以下命令,验证DomainMapping。
kubectl get domainmapping helloworld.knative.top
预期输出:
NAME URL READY REASON helloworld.knative.top https://helloworld.knative.top True
步骤四:访问HTTPS服务
执行以下命令,访问HTTPS服务。
ALB
在AlbConfig中添加443监听,例如knative-internet,配置如下。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: knative-internet
spec:
config:
...
listeners:
- port: 443
protocol: HTTPS # protocol的可选项为HTTP、HTTPS、QUIC。
...
执行访问:
# alb-ppcate4ox6******.cn-beijing.alb.aliyuncs.com为ALB网关地址。
curl -H "host: helloworld.knative.top" https://alb-ppcate4ox6******.cn-beijing.alb.aliyuncs.com -k
MSE
# 8.141.XX.XX为MSE网关地址。
curl -H "host: helloworld-go.default.example.com" https://8.141.XX.XX -k
ASM
# 8.141.XX.XX为ASM网关地址。
curl -H "host: helloworld-go.default.example.com" http://8.141.XX.XX -k
预期输出:
Hello Knative!
相关文档
您可以配置探针(Probe),监测Knative服务的健康状态和可用性,请参见在Knative中配置端口探测。
如果您的ECI实例有连接公网的需求,您需要绑定EIP,请参见为ECI绑定EIP实现公网访问。