6.6. IPsec 暗号化の設定
IPsec を有効にすると、ノード間の内部 Pod 間のクラスタートラフィックと、Pod とクラスター外部の IPsec エンドポイント間の外部トラフィックの両方を暗号化できます。OVN-Kubernetes クラスターネットワーク上のノード間のすべての Pod 間ネットワークトラフィックが、トランスポートモード の IPsec で暗号化されます。
IPsec はデフォルトで無効にされています。クラスターのインストール中またはインストール後に IPsec を有効にできます。クラスターのインストールの詳細は、OpenShift Container Platform インストールの概要 を参照してください。
libreswan
および NetworkManager-libreswan
パッケージの OpenShift Container Platform バージョンが異なる場合にクラスターを OpenShift Container Platform 4.19 にアップグレードすると、2 回連続してコンピュートノードの再起動操作が発生します。最初の再起動では、Cluster Network Operator (CNO) が IPsec 設定をコンピューティングノードに適用します。2 回目の再起動では、Machine Config Operator (MCO) が最新のマシン設定をクラスターに適用します。
CNO と MCO の更新を 1 つのノードの再起動に結合するには、次のタスクを実行します。
-
クラスターをアップグレードする前に、コンピュートノードをグループ化する
MachineConfigPools
カスタムリソース (CR) でpaused
パラメーターをtrue
に設定します。 -
クラスターをアップグレードした後、パラメーターを
false
に設定します。
詳細は、コントロールプレーンのみの更新の実行 を参照してください。
OpenShift Container Platform クラスター上の IPsec には次のサポート制限があります。
- IBM Cloud® では、IPsec は NAT-T のみをサポートします。このプラットフォームでは、Encapsulating Security Payload (ESP) はサポートされていません。
- クラスターが Red Hat OpenShift Container Platform の Hosted Control Plane を使用している場合、IPsec は、Pod 間のトラフィックや外部ホストへのトラフィックの IPsec 暗号化でサポートされません。
- 1 つ以上のネットワークインターフェイスが Open vSwitch (OVS) に接続されている場合、ネットワークインターフェイスでの ESP ハードウェアオフロードの使用はサポートされません。クラスターに対して IPsec を有効にすると、OVS に接続されたインターフェイスで IPsec が使用されるようになります。デフォルトでは、OpenShift Container Platform は、OVS に接続されたすべてのインターフェイスで ESP ハードウェアオフロードを無効にします。
- OVS に接続されていないネットワークインターフェイスに対して IPsec を有効にした場合、クラスター管理者は、OVS に接続されていない各インターフェイスで ESP ハードウェアオフロードを手動で無効にする必要があります。
-
IPsec は Red Hat Enterprise Linux (RHEL) コンピュートノードではサポートされていません。これは、各コンピュートノードに存在するホストと
ovn-ipsec
コンテナー間のlibreswan
非互換性の問題が原因です。(OCPBUGS-53316) を参照してください。
次のリストは、IPsec ドキュメントの主要なタスクの概要を示しています。
- クラスターのインストール後に IPsec を有効または無効にする
- クラスターと外部ホスト間のトラフィックの IPsec 暗号化を設定する
- IPsec が異なるノード上の Pod 間のトラフィックを暗号化することを確認する
6.6.1. 動作モード リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform クラスターで IPsec を使用する場合、以下の動作モードから選択できます。
Mode | 説明 | デフォルト |
---|---|---|
| トラフィックは暗号化されません。これはクラスターのデフォルトです。 | はい |
| Pod 間のトラフィックが、「Pod 間の IPsec によって暗号化されるネットワークトラフィックフローのタイプ」の説明のとおりに暗号化されます。IPsec に必要な設定手順を完了すると、外部ノードへのトラフィックを暗号化できます。 | いいえ |
| IPsec に必要な設定手順を完了すると、外部ノードへのトラフィックを暗号化できます。 | いいえ |
6.6.2. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
外部ホストへのトラフィックを暗号化するために IPsec をサポートする場合は、次の前提条件が満たされていることを確認してください。
-
OVN-Kubernetes ネットワークプラグインが、ローカルゲートウェイモード (
ovnKubernetesConfig.gatewayConfig.routingViaHost=true
) で設定されている。 NMState Operator がインストールされている。この Operator は、IPsec 設定を指定するために必要です。詳細は、Kubernetes NMState Operator を参照してください。
注記NMState Operator は、Google Cloud Platform (GCP) で IPsec を設定する場合にのみサポートされます。
-
ブタンツール (
butane
) がインストールされている。Butane をインストールするには、Butane のインストール を参照してください。
これらの前提条件は、証明書をホストの NSS データベースに追加するために、および外部ホストと通信するように IPsec を設定するために必要です。
6.6.3. IPsec が有効になっている場合のネットワーク接続要件 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform クラスターのコンポーネントが通信できるように、マシン間のネットワーク接続を設定する必要があります。すべてのマシンではクラスターの他のすべてのマシンのホスト名を解決できる必要があります。
プロトコル | ポート | 説明 |
---|---|---|
UDP |
| IPsec IKE パケット |
| IPsec NAT-T パケット | |
ESP | 該当なし | IPsec Encapsulating Security Payload (ESP) |
6.6.4. Pod 間のトラフィックの IPsec 暗号化 リンクのコピーリンクがクリップボードにコピーされました!
Pod 間のトラフィックの IPsec 暗号化は、次のセクションで、暗号化される Pod 間のトラフィック、使用される暗号化プロトコルの種類、および X.509 証明書の処理の仕組みを説明します。以下のセクションは、クラスターと外部ホスト間の IPsec 暗号化には適用されません。この種の暗号化は、特定の外部ネットワークインフラストラクチャーに合わせて手動で設定する必要があります。
6.6.4.1. Pod 間の IPsec によって暗号化されるネットワークトラフィックフローのタイプ リンクのコピーリンクがクリップボードにコピーされました!
IPsec を有効にすると、Pod 間の以下のネットワークトラフィックフローのみが暗号化されます。
- クラスターネットワーク上の複数の異なるノードの Pod 間のトラフィック
- ホストネットワークの Pod からクラスターネットワーク上の Pod へのトラフィック
以下のトラフィックフローは暗号化されません。
- クラスターネットワーク上の同じノードの Pod 間のトラフィック
- ホストネットワーク上の Pod 間のトラフィック
- クラスターネットワークの Pod からホストネットワークの Pod へのトラフィック
暗号化されていないフローと暗号化されていないフローを以下の図に示します。
6.6.4.2. 暗号化プロトコルおよび IPsec モード リンクのコピーリンクがクリップボードにコピーされました!
使用する暗号化は AES-GCM-16-256
です。整合性チェック値 (ICV) は 16
バイトです。鍵の長さは 256
ビットです。
使用される IPsec モードは トランスポートモード です。これは、元のパケットの IP ヘッダーに Encapsulated Security Payload (ESP) ヘッダーを追加してパケットデータを暗号化することで、エンドツーエンドの通信を暗号化するモードです。OpenShift Container Platform は現在、Pod 間通信に IPsec Tunnel モード を使用したり、サポートしたりしません。
6.6.4.3. セキュリティー証明書の生成およびローテーション リンクのコピーリンクがクリップボードにコピーされました!
Cluster Network Operator (CNO) は、暗号化用に IPsec によって使用される自己署名の X.509 認証局 (CA) を生成します。各ノードの証明書署名要求 (CSR) は、CNO によって自動的に満たされます。
この CA は 10 年間有効です。個別のノード証明書は 5 年間有効で、4 年半が経過すると自動的にローテーションされます。
6.6.5. 外部トラフィックの IPsec 暗号化 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform は、TLS 証明書を使用した外部ホストへのトラフィックの IPsec 暗号化をサポートします。TLS 証明書は管理者が提供する必要があります。
6.6.5.1. サポート対象のプラットフォーム リンクのコピーリンクがクリップボードにコピーされました!
この機能は次のプラットフォームでサポートされています。
- ベアメタル
- Google Cloud Platform (GCP)
- Red Hat OpenStack Platform (RHOSP)
- VMware vSphere
Red Hat Enterprise Linux (RHEL) ワーカーノードがある場合、これらのプラットフォームは外部トラフィックの IPsec 暗号化をサポートしません。
クラスターが Red Hat OpenShift Container Platform の Hosted Control Plane を使用している場合、外部ホストへのトラフィックを暗号化するための IPsec の設定はサポートされません。
6.6.5.2. 制限事項 リンクのコピーリンクがクリップボードにコピーされました!
次の禁止事項が遵守されていることを確認してください。
- 外部トラフィックの IPsec を設定する場合、IPv6 設定は現在 NMState Operator によってサポートされません。
-
提供する証明書バンドル内の証明書共通名 (CN) には、接頭辞
ovs_
を指定できません。この名前は、各ノードのネットワークセキュリティーサービス (NSS) データベース内の Pod 間の IPsec CN 名と競合する可能性があるためです。
6.6.6. IPsec 暗号化の有効化 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、Pod 間の IPsec 暗号化、クラスターと外部 IPsec エンドポイント間の IPsec 暗号化を有効にできます。
次のいずれかのモードで IPsec を設定できます。
-
Full
: Pod 間のトラフィックおよび外部トラフィックの暗号化 -
External
: 外部トラフィックの暗号化
IPsec を Full
モードで設定する場合は、「外部トラフィックの IPsec 暗号化の設定」手順も完了する必要があります。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてクラスターにログインしている。 -
クラスター MTU のサイズを
46
バイト減らして、IPsec ESP ヘッダーにオーバーヘッドを設けている。
手順
IPsec 暗号化を有効にするには、次のコマンドを入力します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 外部ホストへのトラフィックを暗号化するには
External
を指定します。Pod 間のトラフィックを暗号化し、必要に応じて外部ホストへのトラフィックを暗号化するにはFull
を指定します。デフォルトでは、IPsec は無効になっています。
- 「外部トラフィックの IPsec 暗号化の設定」手順を完了して、IPsec を使用して外部トラフィックを暗号化します。
検証
OVN-Kubernetes データプレーン Pod の名前を見つけるには、次のコマンドを入力します。
oc get pods -n openshift-ovn-kubernetes -l=app=ovnkube-node
$ oc get pods -n openshift-ovn-kubernetes -l=app=ovnkube-node
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、クラスターで IPsec が有効になっていることを確認します。
注記クラスター管理者は、IPsec が
Full
モードで設定されている場合に、クラスター上の Pod 間で IPsec が有効になっていることを確認できます。この手順では、クラスターと外部ホストの間で IPsec が機能しているかどうかは検証されません。oc -n openshift-ovn-kubernetes rsh ovnkube-node-<XXXXX> ovn-nbctl --no-leader-only get nb_global . ipsec
$ oc -n openshift-ovn-kubernetes rsh ovnkube-node-<XXXXX> ovn-nbctl --no-leader-only get nb_global . ipsec
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<XXXXX>
には、上記ステップの Pod のランダムな文字シーケンスを指定します。
出力例
true
true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.6.7. 外部トラフィックの IPsec 暗号化の設定 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、IPsec を使用して外部トラフィックを暗号化するには、PKCS#12 証明書の提供を含め、ネットワークインフラストラクチャーに IPsec を設定する必要があります。この手順では Butane を使用してマシン設定を作成するため、butane
コマンドがインストールされている必要があります。
マシン設定を適用した後、Machine Config Operator はクラスター内の影響を受けるノードを再起動し、新しいマシン設定をロールアウトします。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
ローカルコンピューターに
butane
ユーティリティーがインストールされている。 - NMState Operator がクラスターにインストールされている。
-
cluster-admin
権限を持つユーザーとしてクラスターにログインしている。 - IPsec エンドポイント用の既存の PKCS#12 証明書と PEM 形式の CA 証明書があります。
-
クラスターで
Full
またはExternal
モードの IPsec が有効になっている。 -
OVN-Kubernetes ネットワークプラグインが、ローカルゲートウェイモード (
ovnKubernetesConfig.gatewayConfig.routingViaHost=true
) で設定されている。
手順
NMState Operator ノードネットワーク設定ポリシーを使用して IPsec 設定を作成します。詳細は、IPsec VPN 実装としての Libreswan を参照してください。
IPsec エンドポイントであるクラスターノードの IP アドレスを特定するために、次のコマンドを入力します。
oc get nodes
$ oc get nodes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次の例のように、NMState Operator のノードネットワーク設定ポリシーを含む
ipsec-config.yaml
という名前のファイルを作成します。NodeNetworkConfigurationPolicy
オブジェクトの概要は、The Kubernetes NMState project を参照してください。NMState IPsec トランスポート設定の例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ポリシーを適用するホスト名を指定します。このホストは、IPsec 設定の左側のホストとして機能します。
- 2
- ホスト上に作成するインターフェイスの名前を指定します。
- 3
- クラスター側の IPsec トンネルを終端するクラスターノードのホスト名を指定します。この名前は、提供した PKCS#12 証明書の SAN
[Subject Alternate Name]
と一致する必要があります。 - 4
- 外部ホスト名 (
host.example.com
など) を指定します。この名前は、提供した PKCS#12 証明書の SAN[Subject Alternate Name]
と一致する必要があります。 - 5
- 外部ホストの IP アドレス (
10.1.2.3/32
など) を指定します。
NMState IPsec トンネル設定の例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ポリシーを適用するホスト名を指定します。このホストは、IPsec 設定の左側のホストとして機能します。
- 2
- ホスト上に作成するインターフェイスの名前を指定します。
- 3
- クラスター側の IPsec トンネルを終端するクラスターノードのホスト名を指定します。この名前は、提供した PKCS#12 証明書の SAN
[Subject Alternate Name]
と一致する必要があります。 - 4
- 外部ホスト名 (
host.example.com
など) を指定します。この名前は、提供した PKCS#12 証明書の SAN[Subject Alternate Name]
と一致する必要があります。 - 5
- 外部ホストの IP アドレス (
10.1.2.3/32
など) を指定します。
IPsec インターフェイスを設定するために、次のコマンドを入力します。
oc create -f ipsec-config.yaml
$ oc create -f ipsec-config.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次の証明書ファイルを提供して、各ホストのネットワークセキュリティーサービス (NSS) データベースに追加します。これらのファイルは、後続の手順で Butane 設定の一部としてインポートされます。
-
left_server.p12
: IPsec エンドポイントの証明書バンドル -
ca.pem
: 証明書に署名した認証局
-
証明書をクラスターに追加するためのマシン設定を作成します。
コントロールプレーンとワーカーノードの Butane 設定ファイルを作成するには、次のコマンドを入力します。
注記設定ファイルで指定する Butane のバージョン は、OpenShift Container Platform のバージョンと同じである必要があり、末尾は常に
0
です。たとえば、4.17.0
です。Butane の詳細は、「Butane を使用したマシン設定の作成」を参照してください。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 前の手順で作成した Butane ファイルをマシン設定に変換するには、次のコマンドを入力します。
for role in master worker; do butane -d . 99-ipsec-${role}-endpoint-config.bu -o ./99-ipsec-$role-endpoint-config.yaml done
$ 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 Copied! Toggle word wrap Toggle overflow
マシン設定をクラスターに適用するには、次のコマンドを入力します。
for role in master worker; do oc apply -f 99-ipsec-${role}-endpoint-config.yaml done
$ for role in master worker; do oc apply -f 99-ipsec-${role}-endpoint-config.yaml done
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要Machine Config Operator (MCO) は各マシン設定プール内のマシンを更新するときに、各ノードを 1 つずつ再起動します。外部 IPsec 接続が使用可能になる前に、すべてのノードが更新されるまで待つ必要があります。
以下のコマンドを実行してマシン設定プールのステータスを確認します。
oc get mcp
$ oc get mcp
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 正常に更新されたノードには、
UPDATED=true
、UPDATING=false
、DEGRADED=false
のステータスがあります。注記デフォルトで、MCO はプールごとに一度に 1 つのマシンを更新するため、移行にかかる合計時間がクラスターのサイズと共に増加します。
IPsec マシン設定が正常にロールアウトされたことを確認するために、次のコマンドを入力します。
IPsec マシン設定が作成されたことを確認します。
oc get mc | grep ipsec
$ oc get mc | grep ipsec
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
80-ipsec-master-extensions 3.2.0 6d15h 80-ipsec-worker-extensions 3.2.0 6d15h
80-ipsec-master-extensions 3.2.0 6d15h 80-ipsec-worker-extensions 3.2.0 6d15h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow IPsec 拡張機能がコントロールプレーンノードに適用されていることを確認します。
oc get mcp master -o yaml | grep 80-ipsec-master-extensions -c
$ oc get mcp master -o yaml | grep 80-ipsec-master-extensions -c
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 予想される出力
2
2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow IPsec 拡張機能がワーカーノードに適用されていることを確認します。
oc get mcp worker -o yaml | grep 80-ipsec-worker-extensions -c
$ oc get mcp worker -o yaml | grep 80-ipsec-worker-extensions -c
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 予想される出力
2
2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.6.8. 外部 IPsec エンドポイントの IPsec 暗号化の無効化 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、外部ホストへの既存の IPsec トンネルを削除できます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてクラスターにログインしている。 -
クラスターで
Full
またはExternal
モードの IPsec が有効になっている。
手順
次の YAML を使用して、
remove-ipsec-tunnel.yaml
という名前のファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
name
- ノードネットワーク設定ポリシーの名前を指定します。
node_name
- 削除する IPsec トンネルが存在するノードの名前を指定します。
tunnel_name
- 既存の IPsec トンネルのインターフェイス名を指定します。
IPsec トンネルを削除するために、次のコマンドを入力します。
oc apply -f remove-ipsec-tunnel.yaml
$ oc apply -f remove-ipsec-tunnel.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.6.9. IPsec 暗号化の無効化 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、IPsec 暗号化を無効にすることができます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてクラスターにログインする。
手順
IPsec 暗号化を無効にするには、次のコマンドを入力します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
オプション: IP パケットの IPsec ESP ヘッダーからのオーバーヘッドがなくなるため、クラスター MTU のサイズを
46
バイト増やすことができます。
6.6.10. 関連情報 リンクのコピーリンクがクリップボードにコピーされました!
- Red Hat Enterprise Linux (RHEL) 9 での IPsec を使用した VPN の設定
- Butane のインストール
- OVN-Kubernetes Container Network Interface (CNI) ネットワークプラグインについて
- クラスターネットワークの MTU 変更
- https://docs.redhat.com/en/documentation/openshift_container_platform/4.19/html-single/operator_apis/#network-operator-openshift-io-v1[Network [operator.openshift.io/v1\] API