為Knative服務配置HTTPS認證訪問
如需在Knative服務中使用自訂網域名,推薦為自訂網域名配置一個HTTPS認證,提高資料轉送的安全性。Knative支援HTTPS服務訪問,將Knative服務安全地映射到自訂網域名。
前提條件
已在叢集中部署Knative,請參見部署Knative。
步驟一:建立Knative服務
-
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
-
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
-
在Knative頁面的服務管理頁簽,選擇命名空間為default,然後單擊使用模板建立,使用控制台的樣本模板建立Knative服務(helloworld-go服務),根據控制台指引完成服務的建立。
服務建立完成後,服務管理頁簽中顯示 helloworld-go 服務狀態為成功,預設網域名稱為
helloworld-go.default.example.com。服務訪問前,需將訪問服務的網域名稱與訪問網關進行 Host 綁定。
步驟二:配置HTTPS服務
HTTPS 配置方式取決於網關類型:
-
ALB 網關:認證由 AlbConfig 統一管理,通過 Annotation 開啟 TLS,無需手動處理認證檔案。
-
Kourier 網關:需手動建立認證 Secret,再通過 DomainMapping 將 Secret 與網域名稱綁定。
ALB
可在ALBConfig中指定認證,並在Knative服務中通過Annotationknative.k8s.alibabacloud/tls: "true"開啟TLS訪問。樣本如下。
在 Knative 服務中添加 TLS Annotation,並在 AlbConfig 中配置 443 監聽,即可開啟 HTTPS 訪問。
-
在 Knative 服務 YAML 中添加
knative.k8s.alibabacloud/tls: "true"Annotation。apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld namespace: default annotations: knative.k8s.alibabacloud/tls: "true" spec: template: spec: containers: - image: registry-vpc.cn-shenzhen.aliyuncs.com/knative-sample/helloworld-go:73fbdd56 # 替換地區為實際使用的地區。 env: - name: TARGET value: "Knative" -
在AlbConfig中添加443監聽,例如knative-internet,將 HTTPS 流量引入叢集。
apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: knative-internet spec: config: ... listeners: - port: 443 # 可選項包括 HTTP、HTTPS、QUIC protocol: HTTPS ... -
驗證服務可通過 HTTPS 訪問。
# 替換 alb-ppcate4ox6******.cn-beijing.alb.aliyuncs.com 為 ALB 網關地址 curl -H "Host: helloworld.knative.top" https://alb-ppcate4ox6******.cn-beijing.alb.aliyuncs.com -k預期輸出:
Hello Knative!
Kourier
Kourier 網關不內建認證管理,需先將 TLS 認證以 Secret 形式存入叢集,Secret 就緒後再通過 DomainMapping 將網域名稱與認證綁定。
1、建立認證 Secret
以下以 OpenSSL 自簽名的HTTPS認證為例。如已有 .pem 格式認證檔案,可跳過步驟 1,直接從步驟 2 開始。
自我簽署憑證僅用於測試,生產環境建議使用 CA 簽發的認證。
-
通過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
2、建立DomainMapping
在Knative 中,DomainMapping 是一個資來源物件,用於將一個網域名稱映射到一個或多個Knative服務。
Secret 就緒後,通過 DomainMapping 將自訂網域名與 Knative 服務綁定,並引用此前建立的 Secret 啟用 TLS 加密。
-
建立
helloworld.knative.top.yaml檔案,寫入以下 DomainMapping 配置。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 -
將 DomainMapping 應用到叢集。
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 -
驗證服務可通過自訂網域名訪問。
# 8.141.XX.XX為 Kourier 網關地址 curl -H "Host: helloworld-go.default.example.com" http://8.141.XX.XX -k預期輸出:
Hello Knative!
相關文檔
-
可配置探針(Probe),監測Knative服務的健康狀態和可用性,請參見在Knative中配置連接埠探測。
-
如果ECI執行個體需串連公網,則需綁定EIP,請參見為ECI綁定EIP實現公網訪問。