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

Container Service for Kubernetes:HTTPS経由でサービスにアクセスするKnativeの証明書を設定する

最終更新日:Nov 22, 2024

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

前提条件

Knativeはクラスターにデプロイされています。 詳細については、「」「Knativeのデプロイ」をご参照ください。

手順1: Knativeサービスの作成

  1. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. クラスターページで、管理するクラスターの名前をクリックし、アプリケーション > Knative左側のナビゲーションウィンドウに表示されます。

  3. Knativeページの [サービス] タブで、名前空間デフォルトに設定し、[テンプレートから作成] をクリックします。 helloworldという名前のKnativeサービスを作成する-コンソールにあるサンプルテンプレートから移動し、[作成] をクリックします。 次に、helloworld-goという名前のサービスが作成されます。

    image.png

ステップ2: シークレットとして管理される証明書を作成する

Knativeでは、秘密はキー、パスワード、証明書などの機密情報の保存と管理に使用されます。 この例では、OpenSSLを使用して自己署名証明書を作成します。 証明書と秘密鍵ファイルは、Base64を使用してエンコードされ、クラスター内のシークレットに保存されます。 次の例は、シークレットとして管理される自己署名証明書を作成する方法を示しています。

  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. 手順1knativetop-key.pemおよびknativetop-cert.pemファイルをエンコードするには、Base64を使用します。

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

      cat knativetop-key.pem | base64

      期待される出力:

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

      cat knativetop-cert.pem | base64

      期待される出力:

      a25hdGl2ZXRvcC1jZ******==
  3. 次のコマンドを実行して、シークレットを作成します。

    シークレットは、ドメイン名helloworld. Knative. topに安全にアクセスするために、knative ServiceのTLS設定で使用できます。

    kubectl create secret tls secret-tls --key knativetop-key.pem --cert knativetop-cert.pem

    期待される出力:

    secret/secret-tls created

ステップ3: DomainMappingの作成

DomainMappingsは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 block specifies the secret to be used
      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 # Valid values for protocol: HTTP, HTTPS, and QUIC.
  ...

次のコマンドを実行して、アクセステストを実行します。

# alb-ppcate4ox6******.cn-beijing.alb.aliyuncs.com is the address of the ALB Ingress. 
curl -H "host: helloworld.knative.top" https://alb-ppcate4ox6******.cn-beijing.alb.aliyuncs.com -k

MSE

# 8.141.XX.XX is the address of the MSE Ingress. 
curl -H "host: helloworld-go.default.example.com" https://8.141.XX.XX -k

ASM

# 8.141.XX.XX is the address of the ASM Ingress. 
curl -H "host: helloworld-go.default.example.com" http://8.141.XX.XX -k

期待される出力:

Hello Knative!

関連ドキュメント