Knative支持通过配置DomainMapping方式指定HTTPS证书。本文介绍如何配置HTTPS证书访问。
前提条件
已在Knative中配置ALB或MSE网关。具体操作,请参见在Knative中使用ALB网关、在Knative中使用MSE网关。
在Knative中配置ALB或MSE网关后,可以通过DomainMapping指定HTTPS证书访问。
步骤一:创建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
的安全访问。执行以下命令,创建
secret-tls.yaml
文件。vim secret-tls.yaml
在vi编辑器中添加以下YAML内容,保存后退出编辑器。
apiVersion: v1 kind: Secret metadata: name: secret-tls type: kubernetes.io/tls data: # the data is abbreviated in this example tls.crt: a25hdGl2ZXRvcC1jZ******== # Base64编码后的knativetop-cert.pem。 tls.key: a25hdGl2ZXRvcC1r****** # Base64编码后的knativetop-key.pem。
执行以下命令,将
secret-tls.yaml
中定义的资源应用到Kubernetes集群中。kubectl apply -f secret-tls.yaml
预期输出:
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/v1alpha1 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
# 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
预期输出:
Hello Knative!