24.12. 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.12.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
-
クラスター MTU のサイズを
46バイト減らして、IPsec ESP ヘッダーにオーバーヘッドを追加している。クラスターが使用する MTU のサイズ変更の詳細は クラスターネットワークの MTU 変更 を参照してください。
24.12.2. IPsec が有効になっている場合のネットワーク接続要件 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform クラスターのコンポーネントが通信できるように、マシン間のネットワーク接続を設定する必要があります。すべてのマシンではクラスターの他のすべてのマシンのホスト名を解決できる必要があります。
| プロトコル | ポート | 説明 |
|---|---|---|
| UDP |
| IPsec IKE パケット |
|
| IPsec NAT-T パケット | |
| ESP | 該当なし | IPsec Encapsulating Security Payload (ESP) |
24.12.3. Pod 間のトラフィックの IPsec 暗号化 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform は、Pod 間のネットワークトラフィックの IPsec 暗号化をサポートします。
24.12.3.1. Pod 間の IPsec によって暗号化されるネットワークトラフィックフローのタイプ リンクのコピーリンクがクリップボードにコピーされました!
IPsec を有効にすると、Pod 間の以下のネットワークトラフィックフローのみが暗号化されます。
- クラスターネットワーク上の複数の異なるノードの Pod 間のトラフィック
- ホストネットワークの Pod からクラスターネットワーク上の Pod へのトラフィック
以下のトラフィックフローは暗号化されません。
- クラスターネットワーク上の同じノードの Pod 間のトラフィック
- ホストネットワーク上の Pod 間のトラフィック
- クラスターネットワークの Pod からホストネットワークの Pod へのトラフィック
暗号化されていないフローと暗号化されていないフローを以下の図に示します。
24.12.3.2. 暗号化プロトコルおよび IPsec モード リンクのコピーリンクがクリップボードにコピーされました!
使用する暗号化は AES-GCM-16-256 です。整合性チェック値 (ICV) は 16 バイトです。鍵の長さは 256 ビットです。
使用される IPsec モードは トランスポートモード です。これは、元のパケットの IP ヘッダーに Encapsulated Security Payload (ESP) ヘッダーを追加してパケットデータを暗号化することで、エンドツーエンドの通信を暗号化するモードです。OpenShift Container Platform は現在、Pod 間通信に IPsec Tunnel モード を使用したり、サポートしたりしません。
24.12.3.3. セキュリティー証明書の生成およびローテーション リンクのコピーリンクがクリップボードにコピーされました!
Cluster Network Operator (CNO) は、暗号化用に IPsec によって使用される自己署名の X.509 認証局 (CA) を生成します。各ノードの証明書署名要求 (CSR) は、CNO によって自動的に満たされます。
この CA は 10 年間有効です。個別のノード証明書は 5 年間有効で、4 年半が経過すると自動的にローテーションされます。
24.12.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":{ }}}}}'
検証
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次のコマンドを入力して、クラスターで IPsec が有効になっていることを確認します。コマンド出力には、ノードで IPsec が有効になっていることを示すために
trueが表示されるはずです。$ oc -n openshift-ovn-kubernetes rsh ovnkube-node-<pod_number_sequence> ovn-nbctl --no-leader-only get nb_global . ipsec1 - 1
- &
lt;pod_number_sequence> を直前の手順のデータプレーン Pod の文字5xqbfのランダムなシーケンスに置き換えます。
24.12.3.5. IPsec 暗号化の無効化 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、クラスターのインストール後に IPsec を有効にした場合にのみ、IPsec 暗号化を無効にできます。
インストールされたクラスターでの問題を回避するには、IPsec を無効にしてから、関連する IPsec daemonset Pod も削除していることを確認してください。
前提条件
-
OpenShift CLI (
oc) がインストールされている。 -
cluster-admin権限を持つユーザーとしてクラスターにログインする。
手順
IPsec 暗号化を無効にするには、次のコマンドを入力します。
$ oc patch networks.operator.openshift.io/cluster --type=json \ -p='[{"op":"remove", "path":"/spec/defaultNetwork/ovnKubernetesConfig/ipsecConfig"}]'クラスター内のノードに存在する 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 ...クラスター内のノードで IPsec が無効になっているかどうかを確認するには、次のコマンドを入力します。クラスター内に存在する各ノードに対してこのコマンドを入力してください。ノードで IPsec が無効になっていることを示すには、コマンド出力に
false と表示する必要があります。$ oc -n openshift-ovn-kubernetes rsh ovnkube-node-<pod_number_sequence> ovn-nbctl --no-leader-only get nb_global . ipsec1 - 1
- &
lt;pod_number_sequence> を直前の手順のデータプレーン Pod の文字5xqbfのランダムなシーケンスに置き換えます。
ノードの
openshift-ovn-kubernetes名前空間から IPsecovn-ipsec-hostdaemonset Pod を削除するには、次のコマンドを入力します。$ oc delete daemonset ovn-ipsec-host -n openshift-ovn-kubernetes1 - 1
ovn-ipsec-hostdaemonset Pod は、ノード上の east-west トラフィックの IPsec 接続を設定します。
ノードの
openshift-ovn-kubernetes名前空間から IPsecovn-ipsec-containerizeddaemonset Pod を削除するには、次のコマンドを入力します。$ oc delete daemonset ovn-ipsec-containerized -n openshift-ovn-kubernetes1 - 1
ovn-ipsec-containerizeddaemonset Pod は、ノード上の east-west トラフィックの IPsec 接続を設定します。
次のコマンドを入力して、
ovn-ipsec-hostおよびovn-ipsec-containerizeddaemonset Pod がクラスター内のすべてのノードから削除されたことを確認します。コマンドの出力に Pod が一覧表示されない場合は、削除操作は成功します。$ oc get pods -n openshift-ovn-kubernetes -l=app=ovn-ipsec注記初期コマンドで Pod が削除されない可能性があるため、Pod に対して
oc deleteコマンドを再実行する必要がある場合があります。-
オプション: IP パケットの IPsec ESP ヘッダーからのオーバーヘッドがなくなるため、クラスター MTU のサイズを
46バイト増やすことができます。
24.12.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.12.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 サポートを有効化できます。
-
ipsec-endpoint-config.confという名前の IPsec 設定ファイルを作成します。この設定は次のステップで使用されます。詳細は、IPsec VPN 実装としての Libreswan を参照してください。 次の証明書ファイルを提供して、各ホストのネットワークセキュリティーサービス (NSS) データベースに追加します。これらのファイルは、後続の手順で Butane 設定の一部としてインポートされます。
-
left_server.p12: IPsec エンドポイントの証明書バンドル -
ca.pem: 証明書に署名した認証局
-
次の 2 つの手順を使用して、クラスターに IPsec 設定を適用するマシン設定を作成します。
IPsec 設定を追加するには、次の内容でコントロールプレーンとワーカーノードの Butane 設定ファイルを作成します。
注記設定ファイルで指定する Butane のバージョン は、OpenShift Container Platform のバージョンと同じである必要があり、末尾は常に
0です。たとえば、4.14.0 です。Butane の詳細は、「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前の手順で作成した 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 oc apply -f 99-ipsec-${role}-endpoint-config.yaml done重要Machine Config Operator (MCO) は各マシン設定プール内のマシンを更新するときに、各ノードを 1 つずつ再起動します。外部 IPsec 接続が使用可能になる前に、すべてのノードが更新されるまで待つ必要があります。
以下のコマンドを実行してマシン設定プールのステータスを確認します。
$ oc get mcp正常に更新されたノードには、
UPDATED=true、UPDATING=false、DEGRADED=falseのステータスがあります。注記デフォルトで、MCO はプールごとに一度に 1 つのマシンを更新するため、移行にかかる合計時間がクラスターのサイズと共に増加します。