検索

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

download PDF

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

重要

cert-manager Operator for Red Hat OpenShift を使用してルートを保護する機能は、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビューの機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

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

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

前提条件

  • cert-manager Operator for Red Hat OpenShift 1.14.0 以降がインストールされている。
  • RouteExternalCertificate フィーチャーゲートを有効にした。
  • routes/custom-host サブリソースに対する create および update 権限がある。
  • 公開する Service リソースがある。

手順

  1. 次のコマンドを実行して、エッジ TLS Termination とカスタムホスト名を使用して、Service リソースの Route リソースを作成します。ホスト名は、次の手順で Certificate リソースを作成するときに使用されます。

    $ oc create route edge <route_name> \ 1
      --service=<service_name> \ 2
      --hostname=<hostname> \ 3
      --namespace=<namespace> 4
    1
    ルートの名前を指定します。
    2
    公開するサービスを指定します。
    3
    ルートのホスト名を指定します。
    4
    ルートが配置されている namespace を指定します。
  2. 次のコマンドを実行して、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

    1
    Issuer が配置されている namespace を指定します。ルートの namespace と同じである必要があります。
  3. 次のコマンドを実行して、ルートの 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
    1
    Certificate リソースが配置されている namespace を指定します。ルートの namespace と同じである必要があります。
    2
    ルートのホスト名を使用して、証明書の共通名を指定します。
    3
    ルートのホスト名を、証明書の DNS 名に追加します。
    4
    証明書が含まれるシークレットの名前を指定します。
  4. 次のコマンドを使用して、参照されたシークレットを読み取るためのルーターサービスアカウント権限を付与する Role を作成します。

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

    $ oc create rolebinding secret-reader-binding \
      --role=secret-reader \
      --serviceaccount=openshift-ingress:router \
      --namespace=<namespace> 1
    1
    シークレットとルートの両方が配置されている 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
    1
    ルート名を指定します。
    2
    シークレットとルートの両方が配置されている namespace を指定します。
    3
    証明書が含まれるシークレットの名前を指定します。

検証

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

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

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

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

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

9.9.2. 関連情報

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.