Knativeシステム内部暗号化の設定¶
警告
Knative Servingの暗号化機能`cluster-local-domain-tls`と`system-internal-tls`は実験段階です。ご注意ください。
始める前に¶
セキュアなHTTPS接続を有効にするには、以下の要件を満たす必要があります。
- Knative Servingがインストールされている必要があります。Servingコンポーネントのインストールの詳細については、Knativeインストールガイドを参照してください。
警告
この機能は現在、Kourierをネットワーク層として使用した場合のみサポートされています。
cert-managerのインストールと設定、および統合¶
まず、`cert-manager`とKnative cert-manager統合をインストールして設定する必要があります。詳細については、Knative cert-manager統合の設定を参照してください。
system-internal-tlsの有効化¶
`system-internal-tls`を有効にするには、`knative-serving`ネームスペースにある`config-network` ConfigMapを更新します。
-
`config-network` ConfigMapを編集するには、次のコマンドを実行します。
kubectl edit configmap config-network -n knative-serving
-
`data`セクションの下に`system-internal-tls: Enabled`属性を追加します。
apiVersion: v1 kind: ConfigMap metadata: name: config-network namespace: knative-serving data: ... system-internal-tls: Enabled ...
-
Knative cert-manager統合を開始するには、Knativeアクティベーターとコントローラーコンポーネントを再起動します。
kubectl rollout restart deploy/activator -n knative-serving kubectl rollout restart deploy/controller -n knative-serving
おめでとうございます!Knativeは、内部システムコンポーネント(Ingressコントローラー、アクティベーター、Queueプロキシ)間でTLSを使用するようになりました。
検証¶
-
Knativeサービスをデプロイします。
-
`kubectl get kcert -n <your-knative-service-namespace>`を使用して、証明書が作成され、準備完了かどうかを確認します。
-
Queueプロキシコンテナが起動時に証明書を読み取っているかどうかを確認するには、以下を実行します。
kubectl logs your-pod -n your-knative-service-namespace -c queue-proxy | grep -E 'certDir|Certificate|tls'
次のようになります。
{"severity":"INFO","timestamp":"2024-01-03T07:07:32.892810888Z","logger":"queueproxy","caller":"certificate/watcher.go:62","message":"Starting to watch the following directories for changes{certDir 15 0 /var/lib/knative/certs <nil>} {keyDir 15 0 /var/lib/knative/certs <nil>}","commit":"86420f2-dirty","knative.dev/key":"first/helloworld-00001","knative.dev/pod":"helloworld-00001-deployment-75fbb7d488-qgmxx"} {"severity":"INFO","timestamp":"2024-01-03T07:07:32.89397512Z","logger":"queueproxy","caller":"certificate/watcher.go:131","message":"Certificate and/or key have changed on disk and were reloaded.","commit":"86420f2-dirty","knative.dev/key":"first/helloworld-00001","knative.dev/pod":"helloworld-00001-deployment-75fbb7d488-qgmxx"} {"severity":"INFO","timestamp":"2024-01-03T07:07:32.894232939Z","logger":"queueproxy","caller":"sharedmain/main.go:282","message":"Starting tls server admin:8022","commit":"86420f2-dirty","knative.dev/key":"first/helloworld-00001","knative.dev/pod":"helloworld-00001-deployment-75fbb7d488-qgmxx"} {"severity":"INFO","timestamp":"2024-01-03T07:07:32.894268548Z","logger":"queueproxy","caller":"sharedmain/main.go:282","message":"Starting tls server main:8112","commit":"86420f2-dirty","knative.dev/key":"first/helloworld-00001","knative.dev/pod":"helloworld-00001-deployment-75fbb7d488-qgmxx"}
信頼¶
警告
信頼に関する簡単な注意事項として、cert-manager発行者が証明書の`Secret`の`ca.crt`フィールドにCAを直接配置することを許可している場合、Knativeは証明書に署名したCAを自動的に信頼します。それとは関係なく、クラスタ管理者は、Knative cert-manager統合の設定で説明されているように、**常に**信頼バンドルを提供する必要があります。これは、ローテーションの問題を回避するために、cert-managerのドキュメントでも強く推奨されています。