HTTPS を使用するには
- コンテナが
$PORT
でリッスンし続ける必要があります TLS 証明書を提供する方法として、次のいずれかを選択する必要があります。
- マネージド TLS 証明書を使用する。この場合、TLS 証明書が必要に応じて自動的に作成され、自動的に更新されます。この機能は、サポートされる Google Kubernetes Engine バージョンで利用可能です。このページではこの機能について説明します。
- 独自の証明書を使用する。この場合、証明書の取得と更新をご自分で行う必要があります。制限事項で説明している特定の状況では、独自の証明書を使用する必要があります。
マネージド証明書を使用する場合、マネージド証明書機能を使用するためにカスタム ドメインのマッピングも必要になります。
HTTPS と HTTP の使用
マネージド証明書を使用する場合、デフォルトでは、マネージド証明書を使用するクラスタまたは Knative serving サービスが HTTP と HTTPS の両方のトラフィックに公開されます。HTTPS トラフィックだけに制限する必要がある場合は、HTTPS リダイレクトを有効にすると、すべてのトラフィックが HTTPS のみを使用するようになります。
トラブルシューティング
マネージド TLS 証明書の使用時に問題が発生した場合は、マネージド TLS のトラブルシューティングのページをご覧ください。
制限事項
マネージド TLS 証明書を使用する場合、次の点を考慮する必要があります。
- Google Cloud 上の Knative serving 限定公開クラスタでは、マネージド TLS 証明書が無効になり、サポートされません。
- マネージド証明書機能を使用するには、サービスを外部に公開する必要があります。クラスタ ローカルのサービスにしたり、Virtual Private Cloud で公開されるサービスにしたりすることはできません。
- マネージド証明書機能は Cloud Service Mesh でのみ動作します。Istio アドオンやその他の Istio 構成はサポートされていません。
- この機能は Let's Encrypt を使用しています。登録済みドメインごとの週あたりの TLS 証明書の初期割り当て上限は 50 です。Let's Encrypt のドキュメントの説明に沿って、割り当ての増加を依頼できます。
- オンプレミスや AWS などの他のプラットフォームで Knative serving クラスタを実行する場合、この機能は無効になります。この機能を使用するには、クラスタが Let's Encrypt にアクセスでき、Cloud Service Mesh Ingress サービスが公共インターネットに公開されていることを確認する必要があります。
始める前に
このページで説明する手順は次のことを前提としています。
- クラスタに Knative serving サービスをデプロイしている。
- ドメインを所有している。ドメインをお持ちでない場合は、Google または別のドメイン ベンダーからドメインを取得します。
- サービス用のドメイン マッピングを作成し、ドメイン マッピング ページの手順に沿って DNS レコードを更新している。
- Cloud DNS または任意の DNS サーバーを使用する。
クラスタ全体でマネージド TLS 証明書と HTTPS を無効にする
ConfigMap config-domainmapping
を更新することで、クラスタに関するマネージド TLS を無効にします。
kubectl patch cm config-domainmapping -n knative-serving -p '{"data":{"autoTLS":"Disabled"}}'
特定のドメイン マッピングに対してマネージド TLS と HTTPS を無効にする
必要に応じて、特定のドメイン マッピングに対してマネージド TLS を無効にすることができます。
アノテーション
domains.cloudrun.com/disableAutoTLS: "true"
を追加します。kubectl annotate domainmappings DOMAIN domains.cloudrun.com/disableAutoTLS=true
HTTPS が機能しないことを確認します。
curl https://DOMAIN
サービスで HTTP が使用されていることを確認します。
gcloud run domain-mappings describe --domain DOMAIN
DOMAIN は、独自のドメイン名に置き換えます。(例:
your-domain.com
)上記のコマンドで返された
url:
フィールドを確認します(URL はhttps
ではなくhttp
である必要があります)。
マネージド TLS 証明書と HTTPS を再度有効にする
マネージド TLS を再度有効にするには:
サービスのドメイン マッピングをまだ作成していない場合は、カスタム ドメインのマッピングのページの手順に沿って DNS レコードを更新します。
ConfigMap
config-domainmapping
を更新して、マネージド TLS 証明書と HTTPS を有効にします。kubectl patch cm config-domainmapping -n knative-serving -p '{"data":{"autoTLS":"Enabled"}}'
コマンドが正常に実行された後、数分待ってから、証明書機能が動作していることを次のように確認します。
kubectl get kcert
証明書の準備が整うと、次のようなメッセージが表示されます。
NAME READY REASON your-domain.com True
Kcert
の準備が整うまで 20 秒から 2 分かかります。問題が発生した場合は、証明書機能のトラブルシューティングの手順をご覧ください。
成功を確認する
次のコマンドを実行して、DNS レコードが発行されていることを確認します。
gcloud run domain-mappings describe --domain DOMAIN
DOMAIN は、独自のドメイン名に置き換えます。(例:
your-domain.com
)上記のコマンドで返された
url:
フィールドを確認します(URL はhttp
ではなくhttps
である必要があります)。上記のコマンドで返された IP アドレス(
resourceRecords:rrdata
の下)を確認し、コマンドhost DOMAIN
を実行したときに表示される値と比較します。両方の値が一致している必要があります。
Knative serving で HTTPS リダイレクトを有効にする
マネージド TLS 証明書機能を使用する場合、下位互換性の理由から、クラスタはデフォルトで HTTP と HTTPS の両方のトラフィックに公開されます。すべてのトラフィックに HTTPS のみを使用させるには、次のコマンドを実行することで、既存のドメイン マッピングに対して HTTPS リダイレクトが有効になります。
kubectl annotate domainmappings DOMAIN domains.cloudrun.com/httpsRedirect=Enabled
ここで、DOMAIN はドメイン マッピングの名前です。
関連トピック
- ドメイン マッピング、証明書の割り当て、注文ステータスと注文のタイムアウト、認可の失敗などを確認する方法については、マネージド TLS のトラブルシューティングをご覧ください。
- マネージド TLS 証明書の代わりに独自の TLS 証明書を使用する手順については、独自の TLS 証明書の使用をご覧ください。