24.11. IPsec 暗号化の設定


IPsec を有効にすると、ノード間の内部 Pod 間のクラスタートラフィックと、Pod とクラスター外部の IPsec エンドポイント間の外部トラフィックの両方を暗号化できます。OVN-Kubernetes クラスターネットワーク上のノード間のすべての Pod 間ネットワークトラフィックが IPsec トランスポートモード で暗号化されます。

IPsec はデフォルトで無効にされています。クラスターのインストール中またはインストール後に有効にできます。クラスターのインストールの詳細は、OpenShift Container Platform インストールの概要 を参照してください。クラスターのインストール後に IPsec を有効にする必要がある場合は、IPsec ESP IP ヘッダーのオーバーヘッドを考慮して、まずクラスター MTU のサイズを変更する必要があります。

注記

IBM Cloud® 上の IPsec は NAT-T のみをサポートします。ESP の使用はサポートされていません。

OpenShift Container Platform クラスター上の IPsec には次のサポート制限があります。

  • OpenShift Container Platform 4.15 に更新する前に、IPsec を無効にする必要があります。IPsec を無効にした後、関連する IPsec デーモンセットも削除する必要があります。IPsec を無効にせずに更新すると、Pod 間通信が中断される可能性があるという既知の問題があります。(OCPBUGS-43323)

次のドキュメントの手順を使用して、次のことを行います。

  • クラスターのインストール後に IPSec を有効または無効にする
  • クラスターの外部にある IPsec エンドポイントのサポートを設定する
  • IPsec が異なるノード上の Pod 間のトラフィックを暗号化することを確認する

24.11.1. 前提条件

  • クラスター MTU のサイズを 46 バイト減らして、IPsec ESP ヘッダーにオーバーヘッドを追加している。クラスターが使用する MTU のサイズ変更の詳細は クラスターネットワークの MTU 変更 を参照してください。

24.11.2. IPsec が有効になっている場合のネットワーク接続要件

OpenShift Container Platform クラスターのコンポーネントが通信できるように、マシン間のネットワーク接続を設定する必要があります。すべてのマシンではクラスターの他のすべてのマシンのホスト名を解決できる必要があります。

表24.12 すべてのマシンからすべてのマシンへの通信に使用されるポート
プロトコルポート説明

UDP

500

IPsec IKE パケット

4500

IPsec NAT-T パケット

ESP

該当なし

IPsec Encapsulating Security Payload (ESP)

24.11.3. Pod 間のトラフィックの IPsec 暗号化

OpenShift Container Platform は、Pod 間のネットワークトラフィックの IPsec 暗号化をサポートします。

24.11.3.1. Pod 間の IPsec によって暗号化されるネットワークトラフィックフローのタイプ

IPsec を有効にすると、Pod 間の以下のネットワークトラフィックフローのみが暗号化されます。

  • クラスターネットワーク上の複数の異なるノードの Pod 間のトラフィック
  • ホストネットワークの Pod からクラスターネットワーク上の Pod へのトラフィック

以下のトラフィックフローは暗号化されません。

  • クラスターネットワーク上の同じノードの Pod 間のトラフィック
  • ホストネットワーク上の Pod 間のトラフィック
  • クラスターネットワークの Pod からホストネットワークの Pod へのトラフィック

暗号化されていないフローと暗号化されていないフローを以下の図に示します。

IPsec の暗号化および暗号化されていないトラフィックフロー

24.11.3.2. 暗号化プロトコルおよび IPsec モード

使用する暗号化は AES-GCM-16-256 です。整合性チェック値 (ICV) は 16 バイトです。鍵の長さは 256 ビットです。

使用される IPsec モードは トランスポートモード です。これは、元のパケットの IP ヘッダーに Encapsulated Security Payload (ESP) ヘッダーを追加してパケットデータを暗号化することで、エンドツーエンドの通信を暗号化するモードです。OpenShift Container Platform は現在、Pod 間通信に IPsec Tunnel モード を使用したり、サポートしたりしません。

24.11.3.3. セキュリティー証明書の生成およびローテーション

Cluster Network Operator (CNO) は、暗号化用に IPsec によって使用される自己署名の X.509 認証局 (CA) を生成します。各ノードの証明書署名要求 (CSR) は、CNO によって自動的に満たされます。

この CA は 10 年間有効です。個別のノード証明書は 5 年間有効で、4 年半が経過すると自動的にローテーションされます。

24.11.3.4. Pod 間の IPsec 暗号化の有効化

クラスター管理者は、クラスターのインストール後に Pod 間の IPsec 暗号化を有効にできます。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • cluster-admin 権限を持つユーザーとしてクラスターにログインしている。
  • クラスター MTU のサイズを 46 バイト減らして、IPsec ESP ヘッダーにオーバーヘッドを設けている。

手順

  • IPsec 暗号化を有効にするには、次のコマンドを入力します。

    $ oc patch networks.operator.openshift.io cluster --type=merge \
    -p '{"spec":{"defaultNetwork":{"ovnKubernetesConfig":{"ipsecConfig":{ }}}}}'

検証

  1. OVN-Kubernetes データプレーン Pod の名前を見つけるには、次のコマンドを入力します。

    $ oc get pods -n openshift-ovn-kubernetes -l=app=ovnkube-node

    出力例

    ovnkube-node-5xqbf                       8/8     Running   0              28m
    ovnkube-node-6mwcx                       8/8     Running   0              29m
    ovnkube-node-ck5fr                       8/8     Running   0              31m
    ovnkube-node-fr4ld                       8/8     Running   0              26m
    ovnkube-node-wgs4l                       8/8     Running   0              33m
    ovnkube-node-zfvcl                       8/8     Running   0              34m

  2. 次のコマンドを実行して、クラスターで IPsec が有効になっていることを確認します。

    $ oc -n openshift-ovn-kubernetes rsh ovnkube-node-<XXXXX> ovn-nbctl --no-leader-only get nb_global . ipsec

    ここでは、以下のようになります。

    <XXXXX>
    前の手順の Pod の文字のランダムなシーケンスを指定します。

    出力例

    true

24.11.3.5. IPsec 暗号化の無効化

クラスター管理者は、クラスターのインストール後に IPsec を有効にした場合にのみ、IPsec 暗号化を無効にできます。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • cluster-admin 権限を持つユーザーとしてクラスターにログインする。

手順

  1. IPsec 暗号化を無効にするには、次のコマンドを入力します。

    $ oc patch networks.operator.openshift.io/cluster --type=json \
      -p='[{"op":"remove", "path":"/spec/defaultNetwork/ovnKubernetesConfig/ipsecConfig"}]'
  2. オプション: IP パケットの IPsec ESP ヘッダーからのオーバーヘッドがなくなるため、クラスター MTU のサイズを 46 バイト増やすことができます。

24.11.4. 外部トラフィックの IPsec 暗号化

OpenShift Container Platform は、外部ホストへのトラフィックの IPsec 暗号化をサポートします。

IPsec 設定ファイル自体と TLS 証明書を含むカスタム IPsec 設定を指定する必要があります。

次の禁止事項が遵守されていることを確認してください。

  • カスタム IPsec 設定には、クラスターの Pod 間の IPsec 設定を干渉する可能性のある接続仕様を含めないようにしてください。
  • 提供された証明書バンドル内の証明書共通名 (CN) には、接頭辞 ovs_ を指定できません。この名前は、各ノードのネットワークセキュリティーサービス (NSS) データベース内の Pod 間の IPsec CN 名と衝突する可能性があるためです。
重要

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

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

24.11.4.1. 外部 IPsec エンドポイントの IPsec 暗号化の有効化

クラスター管理者は、クラスターと外部 IPsec エンドポイント間の IPsec 暗号化を有効化できます。この手順では Butane を使用してマシン設定を作成するため、butane コマンドがインストールされている必要があります。

注記

マシン設定を適用した後、Machine Config Operator はクラスター内の影響を受けるノードを再起動し、新しいマシン設定をロールアウトします。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • cluster-admin 権限を持つユーザーとしてクラスターにログインしている。
  • クラスター MTU のサイズを 46 バイト減らして、IPsec ESP ヘッダーにオーバーヘッドを設けている。
  • butane ユーティリティーをインストールした。
  • IPsec エンドポイント用の既存の PKCS#12 証明書と PEM 形式の CA 証明書があります。

手順

クラスター管理者は、外部 IPsec エンドポイントの IPsec サポートを有効化できます。

  1. ipsec-endpoint-config.conf という名前の IPsec 設定ファイルを作成します。この設定は次のステップで使用されます。詳細は、IPsec VPN 実装としての Libreswan を参照してください。
  2. 次の証明書ファイルを提供して、各ホストのネットワークセキュリティーサービス (NSS) データベースに追加します。これらのファイルは、後続の手順で Butane 設定の一部としてインポートされます。

    • left_server.p12: IPsec エンドポイントの証明書バンドル
    • ca.pem: 証明書に署名した認証局
  3. 次の 2 つの手順を使用して、クラスターに IPsec 設定を適用するマシン設定を作成します。

    1. IPsec 設定を追加するには、次の内容でコントロールプレーンとワーカーノードの Butane 設定ファイルを作成します。

      $ for role in master worker; do
        cat >> "99-ipsec-${role}-endpoint-config.bu" <<-EOF
        variant: openshift
        version: 4.14.0
        metadata:
          name: 99-${role}-import-certs-enable-svc-os-ext
          labels:
            machineconfiguration.openshift.io/role: $role
        openshift:
          extensions:
            - ipsec
        systemd:
          units:
          - name: ipsec-import.service
            enabled: true
            contents: |
              [Unit]
              Description=Import external certs into ipsec NSS
              Before=ipsec.service
      
              [Service]
              Type=oneshot
              ExecStart=/usr/local/bin/ipsec-addcert.sh
              RemainAfterExit=false
              StandardOutput=journal
      
              [Install]
              WantedBy=multi-user.target
          - name: ipsecenabler.service
            enabled: true
            contents: |
              [Service]
              Type=oneshot
              ExecStart=systemctl enable --now ipsec.service
      
              [Install]
              WantedBy=multi-user.target
        storage:
          files:
          - path: /etc/ipsec.d/ipsec-endpoint-config.conf
            mode: 0400
            overwrite: true
            contents:
              local: ipsec-endpoint-config.conf
          - path: /etc/pki/certs/ca.pem
            mode: 0400
            overwrite: true
            contents:
              local: ca.pem
          - path: /etc/pki/certs/left_server.p12
            mode: 0400
            overwrite: true
            contents:
              local: left_server.p12
          - path: /usr/local/bin/ipsec-addcert.sh
            mode: 0740
            overwrite: true
            contents:
              inline: |
                #!/bin/bash -e
                echo "importing cert to NSS"
                certutil -A -n "CA" -t "CT,C,C" -d /var/lib/ipsec/nss/ -i /etc/pki/certs/ca.pem
                pk12util -W "" -i /etc/pki/certs/left_server.p12 -d /var/lib/ipsec/nss/
                certutil -M -n "left_server" -t "u,u,u" -d /var/lib/ipsec/nss/
      EOF
      done
    2. 前の手順で作成した Butane ファイルをマシン設定に変換するには、次のコマンドを入力します。

      $ for role in master worker; do
        butane -d . 99-ipsec-${role}-endpoint-config.bu -o ./99-ipsec-$role-endpoint-config.yaml
      done
  4. マシン設定をクラスターに適用するには、次のコマンドを入力します。

    $ for role in master worker; do
      oc apply -f 99-ipsec-${role}-endpoint-config.yaml
    done
    重要

    Machine Config Operator (MCO) は各マシン設定プール内のマシンを更新するときに、各ノードを 1 つずつ再起動します。外部 IPsec 接続が使用可能になる前に、すべてのノードが更新されるまで待つ必要があります。

  5. 以下のコマンドを実行してマシン設定プールのステータスを確認します。

    $ oc get mcp

    正常に更新されたノードには、UPDATED=trueUPDATING=falseDEGRADED=false のステータスがあります。

    注記

    デフォルトで、MCO はプールごとに一度に 1 つのマシンを更新するため、移行にかかる合計時間がクラスターのサイズと共に増加します。

24.11.5. 関連情報

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.