カスタムドメイン名を使用して Knative サービスを公開する場合、データ転送を保護するためにドメイン名に証明書を構成することをお勧めします。Knative では、DomainMapping を使用して、HTTPS 経由でサービスにアクセスするための証明書を構成できます。
前提条件
Knative が ACS クラスタにデプロイされていること。詳細については、Knative のデプロイを参照してください。
手順 1: Knative サービスを作成する
ACS コンソールにログオンします。左側のナビゲーションペインで、クラスタをクリックします。
クラスタページで、管理するクラスタを見つけて、その ID をクリックします。クラスタ詳細ページの左側のナビゲーションペインで、 を選択します。
サービスタブのKnativeページで、名前空間をdefault に設定し、テンプレートから作成をクリックします。コンソールで提供されているサンプルテンプレートから helloworld-go という名前の Knative サービスを作成し、作成をクリックします。helloworld-go という名前のサービスが作成されます。

手順 2: Secret として管理される証明書を作成する
Knative では、Secret を使用して、キー、パスワード、証明書などの機密情報を保存および管理します。この例では、OpenSSL を使用して自己署名証明書を作成します。証明書ファイルと秘密鍵ファイルは 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 keyBase64 を使用して、手順 1 の
knativetop-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******==
次のコマンドを実行して、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 サービスにマッピングすることで、アプリケーションがドメイン名を使用してサービスにアクセスできるようにすることができます。
次のコマンドを実行して、
helloworld.knative.top.yamlという名前のファイルを作成します。vim helloworld.knative.top.yamlvi エディタを開き、次の 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次のコマンドを実行して、
helloworld.knative.top.yamlファイルで定義されているリソースを ACK クラスタにデプロイします。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
手順 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 -kMSE
# 8.141.XX.XX は MSE Ingress のアドレスです。
curl -H "host: helloworld-go.default.example.com" https://8.141.XX.XX -kASM
# 8.141.XX.XX は ASM Ingress のアドレスです。
curl -H "host: helloworld-go.default.example.com" http://8.141.XX.XX -k期待される出力:
Hello Knative!参考資料
プローブを構成して、Knative サービスのヘルスステータスと可用性を監視できます。詳細については、Knative でのポートプローブの構成を参照してください。