如您需要在Knative服務中使用自訂網域名,推薦您為自訂網域名配置一個HTTPS認證,提高資料轉送的安全性。Knative支援通過配置DomainMapping的方式指定HTTPS認證,將Knative服務安全地映射到自訂網域名。
前提條件
已在叢集中部署Knative,請參見部署Knative。
步驟一:建立Knative服務
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在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實現公網訪問。