すべてのプロダクト
Search
ドキュメントセンター

Container Compute Service:HTTPS 経由で Knative サービスにアクセスするための証明書を構成する

最終更新日:Dec 27, 2024

カスタムドメイン名を使用して Knative サービスを公開する場合、データ転送を保護するためにドメイン名に証明書を構成することをお勧めします。Knative では、DomainMapping を使用して、HTTPS 経由でサービスにアクセスするための証明書を構成できます。

前提条件

Knative が ACS クラスタにデプロイされていること。詳細については、Knative のデプロイを参照してください。

手順 1: Knative サービスを作成する

  1. ACS コンソールにログオンします。左側のナビゲーションペインで、クラスタをクリックします。

  2. クラスタページで、管理するクラスタを見つけて、その ID をクリックします。クラスタ詳細ページの左側のナビゲーションペインで、アプリケーション > Knative を選択します。

  3. サービスタブのKnativeページで、名前空間default に設定し、テンプレートから作成をクリックします。コンソールで提供されているサンプルテンプレートから helloworld-go という名前の Knative サービスを作成し、作成をクリックします。helloworld-go という名前のサービスが作成されます。

    image.png

手順 2: Secret として管理される証明書を作成する

Knative では、Secret を使用して、キー、パスワード、証明書などの機密情報を保存および管理します。この例では、OpenSSL を使用して自己署名証明書を作成します。証明書ファイルと秘密鍵ファイルは 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. Base64 を使用して、手順 1knativetop-key.pem ファイルと knativetop-cert.pem ファイルをエンコードします。

    • 次のコマンドを実行して、Base64 を使用して knativetop-key.pem ファイルをエンコードします。

      cat knativetop-key.pem | base64

      期待される出力:

      a25hdGl2ZXRvcC1r******
    • 次のコマンドを実行して、Base64 を使用して knativetop-cert.pem ファイルをエンコードします。

      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

手順 3: DomainMapping を作成する

DomainMapping は、Knative のリソースオブジェクトです。DomainMapping は、ドメイン名を 1 つ以上の 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 ブロックは、使用するシークレットを指定します
      tls:
        secretName: secret-tls
  3. 次のコマンドを実行して、helloworld.knative.top.yaml ファイルで定義されているリソースを ACK クラスタにデプロイします。

    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

手順 4: HTTPS 経由で Knative サービスにアクセスする

次のコマンドを実行して、HTTPS 経由で Knative サービスにアクセスします。

ALB

AlbConfig のポート 443 にリスナーを追加します。次のコードは、knative-internet のポート 443 にリスナーを追加する例を示しています。

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 Ingress のアドレスです。
curl -H "host: helloworld.knative.top" https://alb-ppcate4ox6******.cn-beijing.alb.aliyuncs.com -k

MSE

# 8.141.XX.XX は MSE Ingress のアドレスです。
curl -H "host: helloworld-go.default.example.com" https://8.141.XX.XX -k

ASM

# 8.141.XX.XX は ASM Ingress のアドレスです。
curl -H "host: helloworld-go.default.example.com" http://8.141.XX.XX -k

期待される出力:

Hello Knative!

参考資料

プローブを構成して、Knative サービスのヘルスステータスと可用性を監視できます。詳細については、Knative でのポートプローブの構成を参照してください。