9.9. cert-manager Operator for Red Hat OpenShift によるルート保護


OpenShift Container Platform では、シークレット経由で TLS 証明書を参照するための設定可能なオプションを提供するために、ルート API が拡張されました。外部管理証明書 を有効にすると、手動介入によるエラーを最小限に抑え、証明書管理プロセスを効率化し、OpenShift Container Platform ルーターが参照先の証明書を迅速に提供できるようになります。

9.9.1. クラスター内のルートを保護するための証明書の設定

次の手順は、cert-manager Operator for Red Hat OpenShift を Let’s Encrypt の ACME HTTP-01 チャレンジタイプとともに使用して、OpenShift Container Platform クラスター内のルートリソースを保護するプロセスを示しています。

前提条件

  • cert-manager Operator for Red Hat OpenShift のバージョン 1.14.0 以降がインストールされている。
  • ルートの作成と更新の両方に使用される routes/custom-host サブリソースに対する create 権限がある。
  • 公開する Service リソースがある。

手順

  1. 次のコマンドを実行して、HTTP-01 ソルバーを設定する Issuer を作成します。その他の ACME 発行者タイプについては、「ACME 発行者の設定」を参照してください。

    Issuer.yaml ファイルの例

    $ oc create -f - << EOF
    apiVersion: cert-manager.io/v1
    kind: Issuer
    metadata:
      name: letsencrypt-acme
      namespace: <namespace> 
    1
    
    spec:
      acme:
        server: https://acme-v02.api.letsencrypt.org/directory
        privateKeySecretRef:
          name: letsencrypt-acme-account-key
        solvers:
          - http01:
              ingress:
                ingressClassName: openshift-default
    EOF
    Copy to Clipboard Toggle word wrap

    1
    Issuer が配置されている namespace を指定します。ルートの namespace と同じである必要があります。
  2. 次のコマンドを実行して、ルートの Certificate オブジェクトを作成します。secretName は、cert-manager が発行および管理する TLS シークレットを指定し、次の手順のルートでも参照されます。

    $ oc create -f - << EOF
    apiVersion: cert-manager.io/v1
    kind: Certificate
    metadata:
      name: example-route-cert
      namespace: <namespace> 
    1
    
    spec:
      commonName: <hostname> 
    2
    
      dnsNames:
        - <hostname> 
    3
    
      usages:
        - server auth
      issuerRef:
        kind: Issuer
        name: letsencrypt-acme
      secretName: <secret_name> 
    4
    
    EOF
    Copy to Clipboard Toggle word wrap
    1
    Certificate リソースが配置されている namespace を指定します。ルートの namespace と同じである必要があります。
    2
    ルートのホスト名を使用して、証明書の共通名を指定します。
    3
    ルートのホスト名を、証明書の DNS 名に追加します。
    4
    証明書が含まれるシークレットの名前を指定します。
  3. 次のコマンドを使用して、参照先のシークレットを読み取る権限をルーターのサービスアカウントに付与するための Role を作成します。

    $ oc create role secret-reader \
      --verb=get,list,watch \
      --resource=secrets \
      --resource-name=<secret_name> \ 
    1
    
      --namespace=<namespace> 
    2
    Copy to Clipboard Toggle word wrap
    1
    アクセスを許可するシークレットの名前を指定します。これは、Certificate リソースで指定された secretName と一致する必要があります。
    2
    シークレットとルートの両方が配置されている namespace を指定します。
  4. 次のコマンドを実行して、ルーターのサービスアカウントを、新しく作成した Role リソースにバインドする RoleBinding リソースを作成します。

    $ oc create rolebinding secret-reader-binding \
      --role=secret-reader \
      --serviceaccount=openshift-ingress:router \
      --namespace=<namespace> 
    1
    Copy to Clipboard Toggle word wrap
    1
    シークレットとルートの両方が配置されている namespace を指定します。
  5. 次のコマンドを実行して、エッジ TLS 終端とカスタムホスト名を使用するサービスリソースのルートを作成します。ホスト名は、次のステップで Certificate リソースを作成するときに使用します。

    $ oc create route edge <route_name> \ 
    1
    
      --service=<service_name> \ 
    2
    
      --hostname=<hostname> \ 
    3
    
      --namespace=<namespace> 
    4
    Copy to Clipboard Toggle word wrap
    1
    ルートの名前を指定します。
    2
    公開するサービスを指定します。
    3
    ルートのホスト名を指定します。
    4
    ルートが配置されている namespace を指定します。
  6. 次のコマンドを使用して、ルートの .spec.tls.externalCertificate フィールドを更新し、以前に作成したシークレットを参照し、cert-manager が発行した証明書を使用します。

    $ oc patch route <route_name> \ 
    1
    
      -n <namespace> \ 
    2
    
      --type=merge \
      -p '{"spec":{"tls":{"externalCertificate":{"name":"<secret_name>"}}}}' 
    3
    Copy to Clipboard Toggle word wrap
    1
    ルート名を指定します。
    2
    シークレットとルートの両方が配置されている namespace を指定します。
    3
    証明書が含まれるシークレットの名前を指定します。

検証

  • 次のコマンドを実行して、証明書が作成され、使用できる状態になっていることを確認します。

    $ oc get certificate -n <namespace> 
    1
    
    $ oc get secret -n <namespace> 
    2
    Copy to Clipboard Toggle word wrap
    1 2
    シークレットとルートの両方が存在する namespace を指定します。
  • 次のコマンドを実行して、ルーターが参照された外部証明書を使用していることを確認します。コマンドは、ステータスコード 200 OK を返すはずです。

    $ curl -IsS https://<hostname> 
    1
    Copy to Clipboard Toggle word wrap
    1
    ルートのホスト名を指定します。
  • 次のコマンドを実行して、サーバー証明書の subjectsubjectAltNameissuer が、すべて curl verbose 出力から期待されるとおりであることを確認します。

    $ curl -v https://<hostname> 
    1
    Copy to Clipboard Toggle word wrap
    1
    ルートのホスト名を指定します。

    これでルートは、cert-manager が発行した参照シークレットの証明書で正常に保護されました。cert-manager は証明書のライフサイクルを自動的に管理します。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat