全部產品
Search
文件中心

Container Service for Kubernetes:為Knative服務配置HTTPS認證訪問

更新時間:Nov 19, 2024

如您需要在Knative服務中使用自訂網域名,推薦您為自訂網域名配置一個HTTPS認證,提高資料轉送的安全性。Knative支援通過配置DomainMapping的方式指定HTTPS認證,將Knative服務安全地映射到自訂網域名。

前提條件

已在叢集中部署Knative,請參見部署Knative

步驟一:建立Knative服務

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇應用 > Knative

  3. Knative頁面的服務管理頁簽,選擇命名空間default,然後單擊使用模板建立,選擇使用容器控制台的樣本模板建立Knative服務(helloworld-go服務),根據控制台指引完成服務的建立。

    image.png

步驟二:建立Secret認證

在Knative中,使用Secret儲存和管理敏感資訊,例如密鑰、密碼和認證等。本步驟使用OpenSSL建立一個自簽名的HTTPS認證,並將認證和私密金鑰檔案編碼為Base64格式,然後以Secret的形式儲存到叢集中。以下以自我簽署憑證為例,介紹如何建立Secret認證。

  1. 執行以下命令,通過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
  2. 步驟1中的knativetop-key.pemknativetop-cert.pem檔案內容進行Base64編碼。

    • 執行以下命令,將knativetop-key.pem進行Base64編碼。

      cat knativetop-key.pem | base64

      預期輸出:

      a25hdGl2ZXRvcC1r******
    • 執行以下命令,將knativetop-cert.pem進行Base64編碼。

      cat knativetop-cert.pem | base64

      預期輸出:

      a25hdGl2ZXRvcC1jZ******==
  3. 執行以下命令,建立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服務,使得應用程式可以通過這個網域名稱進行訪問。

  1. 執行以下命令,建立helloworld.knative.top.yaml檔案。

    vim helloworld.knative.top.yaml
  2. 在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
  3. 執行以下命令,將helloworld.knative.top.yaml中定義的資源應用到Kubernetes叢集中。

    kubectl apply -f helloworld.knative.top.yaml

    預期輸出:

    domainmapping.serving.knative.dev/helloworld.knative.top created
  4. 執行以下命令,驗證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!

相關文檔