如您需要在Knative服務中使用自定義域名,推薦您為自定義域名配置一個HTTPS證書,提高數據傳輸的安全性。Knative支持通過配置DomainMapping的方式指定HTTPS證書,將Knative服務安全地映射到自定義域名。
前提條件
已在ACS集群中部署Knative。具體操作,請參見部署Knative。
步驟一:創建Knative服務
登錄容器計算服務控制臺,在左側導航欄選擇集群。
在集群頁面,單擊目標集群ID,然后在左側導航欄,選擇
。在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中配置端口探測。