Knative Service にカスタムドメイン名を使用する場合は、データ転送のセキュリティを向上させるため、カスタムドメイン名に HTTPS 証明書を設定することを推奨します。Knative では、DomainMapping を設定することで HTTPS 証明書を指定でき、Knative Service をカスタムドメイン名へ安全にマッピングできます。
前提条件
Container Compute Service (ACS) クラスターに Knative がデプロイされていること。詳細については、「Knative のデプロイ」をご参照ください。
ステップ 1: Knative Service の作成
-
コンテナコンピューティングサービス (ACS) コンソールにログインします。左側のナビゲーションペインで、[クラスター]をクリックします。
-
[クラスター] ページで、ターゲットクラスターの名前をクリックします。 クラスター詳細ページの左側のナビゲーションペインで、[アプリケーション] > [Knative] を選択します。
-
[Knative] ページの [サービス] タブで、[名前空間] を default に設定し、[テンプレートから作成] をクリックして、コンソールのサンプルテンプレートから Knative サービス (
helloworld-goサービス) を作成します。指示に従って作成を完了します。サービスが作成されると、そのステータスが「サービス」タブで成功と表示され、デフォルトのドメイン名はhelloworld-go.default.example.comになります。サービスにアクセスする前に、アクセスドメイン名をホストとしてイングレスゲートウェイにバインドする必要があります。
ステップ 2: HTTPS サービスの設定
HTTPS の設定方法は、ゲートウェイタイプによって異なります。
-
ALB ゲートウェイ:証明書は AlbConfig で一元管理されます。アノテーションを使用して TLS を有効にするため、証明書ファイルを手動で処理する必要はありません。
-
Kourier ゲートウェイ:証明書 Secret を手動で作成し、DomainMapping を使用して Secret をドメイン名にバインドする必要があります。
ALB
AlbConfig に証明書を指定し、knative.k8s.alibabacloud/tls: "true" アノテーションを使用すると、Knative Service で TLS アクセスを有効にできます。 次の例をご参照ください。
HTTPS アクセスを有効にするには、Knative Service に TLS アノテーションを追加し、AlbConfig でポート 443 にリスナーを設定します。
-
Knative Service の YAML に
knative.k8s.alibabacloud/tls: "true"アノテーションを追加します。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 (例:
knative-internet) にポート 443 のリスナーを追加し、HTTPS トラフィックをクラスターにルーティングします。apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: knative-internet spec: config: ... listeners: - port: 443 # 有効な値: HTTP、HTTPS、QUIC protocol: HTTPS ... -
Service に 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 Service の 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 はドメイン名を 1 つ以上の Knative Service にマッピングするリソースオブジェクトです。Secret の準備ができたら、DomainMapping を使用してカスタムドメイン名を Knative Service にバインドし、以前に作成した Secret を参照して TLS 暗号化を有効にします。
-
以下の内容で
helloworld.knative.top.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ブロックでは、使用するSecretを指定します。 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 -
カスタムドメイン名経由で Service にアクセスできることを確認します。
# 8.141.XX.XX は Kourier ゲートウェイのアドレスです。 curl -H "Host: helloworld.knative.top" https://8.141.XX.XX -k想定される出力:
Hello Knative!