6.7. 外部トラフィックの IPsec 暗号化の設定


クラスター管理者は、IPsec を使用して外部トラフィックを暗号化するには、PKCS#12 証明書の提供を含め、ネットワークインフラストラクチャーに IPsec を設定する必要があります。この手順では Butane を使用してマシン設定を作成するため、ただし、ツール インストールしておく必要があります。

注記

マシン設定を適用すると、Machine Config Operator (MCO)はクラスター内のノードを再起動して新規マシン設定をロールアウトします。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • ローカル コンピューターに butane ツールがインストールされている。
  • NMState Operator がクラスターにインストールされている。
  • cluster-admin 権限を持つユーザーとしてクラスターにログインしている。
  • IPsec エンドポイント用の既存の PKCS#12 証明書と、Privacy Enhanced Mail (PEM)形式の CA 証明書がある。
  • クラスターで Full または External モードの IPsec が有効になっている。
  • OVN-Kubernetes ネットワークプラグインの ovnKubernetesConfig.gatewayConfig 仕様で、routingViaHost パラメーターを true に設定する。

手順

  1. NMState Operator ノードネットワーク設定ポリシーを使用して IPsec 設定を作成します。詳細は、nmstatectl を使用した IPsec ベースの VPN 接続の設定 を 参照してください。

    1. IPsec エンドポイントであるクラスターノードの IP アドレスを特定するために、次のコマンドを入力します。

      $ oc get nodes
      Copy to Clipboard Toggle word wrap
    2. 次の例のように、NMState Operator のノードネットワーク設定ポリシーを持つ ipsec-config.yaml という名前のファイルを作成します。NodeNetworkConfigurationPolicy オブジェクトの概要は、The Kubernetes NMState project を参照してください。

      NMState IPsec トランスポート設定の例

      apiVersion: nmstate.io/v1
      kind: NodeNetworkConfigurationPolicy
      metadata:
        name: ipsec-config
      spec:
        nodeSelector:
          kubernetes.io/hostname: "<hostname>"
        desiredState:
          interfaces:
          - name: <interface_name>
            type: ipsec
            libreswan:
              left: <cluster_node>
              leftid: '%fromcert'
              leftrsasigkey: '%cert'
              leftcert: left_server
              leftmodecfgclient: false
              right: <external_host>
              rightid: '%fromcert'
              rightrsasigkey: '%cert'
              rightsubnet: <external_address>/32
              ikev2: insist
              type: transport
      Copy to Clipboard Toggle word wrap

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

      kubernetes.io/hostname
      ポリシーを適用するホスト名を指定します。このホストは、IPsec 設定の左側のホストとして機能します。
      name
      ホスト上に作成するインターフェイスの名前を指定します。
      left
      クラスター側で IPsec トンネルを終了するクラスターノードのホスト名を指定します。この名前は、提供された PKCS#12 証明書の SAN [Subject 代替名] に一致する必要があります。
      right
      host.example.com などの外部ホスト名を指定します。この名前は、提供した PKCS#12 証明書の SAN [Subject Alternate Name] と一致する必要があります。
      rightsubnet

      外部ホストの IP アドレス (10.1.2.3/32 など) を指定します。

      NMState IPsec トンネル設定の例

      apiVersion: nmstate.io/v1
      kind: NodeNetworkConfigurationPolicy
      metadata:
        name: ipsec-config
      spec:
        nodeSelector:
          kubernetes.io/hostname: "<hostname>"
        desiredState:
          interfaces:
          - name: <interface_name>
            type: ipsec
            libreswan:
              left: <cluster_node>
              leftid: '%fromcert'
              leftmodecfgclient: false
              leftrsasigkey: '%cert'
              leftcert: left_server
              right: <external_host>
              rightid: '%fromcert'
              rightrsasigkey: '%cert'
              rightsubnet: <external_address>/32
              ikev2: insist
              type: tunnel
      Copy to Clipboard Toggle word wrap

    3. IPsec インターフェイスを設定するために、次のコマンドを入力します。

      $ oc create -f ipsec-config.yaml
      Copy to Clipboard Toggle word wrap
  2. 以下の証明書ファイルを指定して、各ホストの Network Security Services (NSS)データベースに追加します。これらのファイルは、次の手順で Butane 設定の一部としてインポートされます。

    • left_server.p12: IPsec エンドポイントの証明書バンドル
    • ca.pem: 証明書に署名した認証局
  3. 証明書をクラスターに追加するためにマシン設定を作成します。
  4. マウントされたシークレットファイルからパスワードを読み取ります。

    $ password=$(cat run/secrets/<left_server_password>)
    Copy to Clipboard Toggle word wrap
    • left_server_password:: パスワードを含むファイルの名前。このファイルはマウントされたシークレットに存在します。
  5. 以下のコマンドを入力して、Red Hat Enterprise Linux (RHEL)にプレパッケージされている pk12util ツールを使用して、PKCS# 12 ファイルを保護するパスワードを指定します。<password> の 値をパスワードに 置き換えるようにしてください。

    $ pk12util -W "<password>" -i /etc/pki/certs/left_server.p12 -d /var/lib/ipsec/nss/
    Copy to Clipboard Toggle word wrap
  6. コントロールプレーンとコンピュートノードの Butane 設定ファイルを作成するには、次のコマンドを入力します。

    注記

    設定ファイルで指定する Butane のバージョン は、OpenShift Container Platform のバージョンと同じである必要があり、末尾は常に 0 です。たとえば、4.17.0 です。Butane の詳細は、「Butane を使用したマシン設定の作成」を参照してください。

    $ for role in master worker; do
      cat >> "99-ipsec-${role}-endpoint-config.bu" <<-EOF
      variant: openshift
      version: 4.17.0
      metadata:
        name: 99-${role}-import-certs
        labels:
          machineconfiguration.openshift.io/role: $role
      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
      storage:
        files:
        - 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
    Copy to Clipboard Toggle word wrap
  7. 前の手順で作成した Butane ファイルをマシン設定に変換するには、以下のコマンドを入力します。

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

    $ for role in master worker; do
      oc apply -f 99-ipsec-${role}-endpoint-config.yaml
    done
    Copy to Clipboard Toggle word wrap
    重要

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

検証

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

    $ oc get mcp
    Copy to Clipboard Toggle word wrap

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

    注記

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

  2. IPsec マシン設定が正常にロールアウトされたことを確認するために、次のコマンドを入力します。

    1. IPsec マシン設定の作成を確認します。

      $ oc get mc | grep ipsec
      Copy to Clipboard Toggle word wrap

      出力例

      80-ipsec-master-extensions        3.2.0        6d15h
      80-ipsec-worker-extensions        3.2.0        6d15h
      Copy to Clipboard Toggle word wrap

    2. IPsec 拡張機能をコントロールプレーンノードに適用していることを確認します。

      $ oc get mcp master -o yaml | grep 80-ipsec-master-extensions -c
      Copy to Clipboard Toggle word wrap
    3. コンピュートノードへの IPsec 拡張機能の適用を確認します。出力例には 2 と表示されます。

      $ oc get mcp worker -o yaml | grep 80-ipsec-worker-extensions -c
      Copy to Clipboard Toggle word wrap
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat