SANなしはNG?OpenShift での Ingress証明書設定とクラスタ影響まとめ

【OpenShift 4.14】Ingressのカスタム証明書設定とSAN・チェーン証明書の注意点まとめ

OpenShift Container Platform(OCP)では、セキュアな通信を実現するためにデフォルトで証明書が組み込まれています。しかし、企業のセキュリティポリシーや証明書統合管理の観点から、独自に用意した証明書(カスタム証明書)をIngressに設定したいというケースも少なくありません。

本記事では、OpenShift 4.14 環境においてカスタム証明書を導入する際に注意すべき点、特に「SANの必須化」と「チェーン証明書の必要性」に加え、証明書適用時の設定にはまったので記録として残します。


目次

1. SANなし証明書はエラーに
verify certificate: x509: certificate relies on legacy Common Name field, use SANs instead

OpenShift 4.10以降(Kubernetes 1.23ベース)では、Subject Alternative Name(SAN)なしの証明書はTLS検証時にエラーとなります。これはKubernetes本体がCommon Name(CN)フィールドの使用を非推奨とした仕様変更に基づくものです。

実際に、以下のようなエラーが oc get co コマンドで表示されるケースがあります:verify certificate: x509: certificate relies on legacy Common Name field, use SANs instead

対応策:SAN付きのCSRを作成する

OpenSSLでSAN付きのCSRを生成するには、以下のような openssl.cnf を用意し、コマンドを実行します:

# openssl.cnf

[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[ v3_req ]
subjectAltName = @alt_names
[alt_names]
DNS.1 = example.apps.ocp.local DNS.2 = *.apps.ocp.local

CSR作成

openssl req -new -key tls.key -out tls.csr \
-subj “/C=JP/ST=Tokyo/L=Chiyoda/O=ExampleOrg/CN=*.apps.ocp.local” \
-config openssl.cnf






2. チェーン証明書が必要なケース

多くの企業では、中間CAとルートCAを経由した証明書チェーンを採用しています。OpenShiftにこれらを適用する際、必ずチェーン構成の証明書として結合しておく必要があります。

チェーン証明書の作成




$ cat server.crt intermediate.crt rootCA.crt > fullchain.crt

この fullchain.crt を Ingress 用のカスタム証明書として利用します。これを怠ると、通信先のクライアント(WebブラウザやクライアントPod)側で証明書検証が失敗します。

3. 証明書適用時のクラスタ影響

カスタム証明書の適用は基本的に以下の2ステップに分かれます:

ステップ1:CA証明書の設定(proxy/cluster変更)

  • proxy/cluster オブジェクトにカスタムCAを設定
  • ノードに設定を反映するため、MachineConfigPoolによるローリングアップデート(=ノード再起動)が発生
  • このため、クラスターの安定運用時に実施が必要

ステップ2:Ingress証明書の設定

  • ingresscontroller/default にカスタム証明書を設定
  • この設定変更により、router-default Podが再起動される

oc patch ingresscontroller default -n openshift-ingress-operator \
–type=merge -p \
‘{“spec”:{“defaultCertificate”:{“name”:”custom-ingress-cert”}}}’






4. カスタム証明書適用の手順概要

  1. SAN付きでCSRを作成し、CAへ署名依頼
  2. サーバ証明書+中間証明書+ルート証明書で fullchain.crt を作成
  3. 以下のようなSecretを作成:

oc create secret tls custom-ingress-cert \
–cert=fullchain.crt –key=tls.key \
-n openshift-ingress





  1. proxy/cluster にCAを設定し、クラスタへ反映
  2. ingresscontroller/default をpatchし、カスタム証明書を指定
  3. router-default Podの再起動後、証明書が反映されることを確認
  4. oc get co コマンドですべてのクラスターオペレーターが正常であることを確認
  5. (追加)WEBコンソールに接続する端末にCA証明書を設定し、コンソール接続時に警告が出ないことを確認

5. よくあるトラブルと回避策

トラブル内容原因対応策
認証エラー発生SANなし証明書SANありの証明書で再発行
ブラウザで警告が出るチェーン証明書でないfullchain形式に統合する
クラスタの負荷が増えるproxy変更によりノード再起動メンテナンス時間帯に適用
証明書反映されないSecret名の指定ミスoc describe で設定を確認

まとめ

OpenShiftにカスタム証明書を導入する際には、SANを必ず設定し、チェーン証明書を用いることが今や前提条件です。さらに、証明書の適用はクラスタ全体に影響を与える可能性があるため、適用タイミングと手順を慎重に選定する必要があります。

OCPはセキュアかつ柔軟なプラットフォームですが、こうした証明書の扱いには一定の専門性が求められます。運用チームとしては、証明書の正しい作成・適用・更新管理まで一連の流れを理解し、確実にメンテナンスできる体制を整えておくことが重要です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次