6.7. 外部トラフィックの IPsec 暗号化の設定
クラスター管理者は、IPsec を使用して外部トラフィックを暗号化するには、PKCS#12 証明書の提供を含め、ネットワークインフラストラクチャーに IPsec を設定する必要があります。この手順では Butane を使用してマシン設定を作成するため、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に設定する。
手順
NMState Operator ノードネットワーク設定ポリシーを使用して IPsec 設定を作成します。詳細は、nmstatectl を使用して IPsec ベースの VPN 接続を設定する 参照してください。
IPsec エンドポイントであるクラスターノードの IP アドレスを特定するために、次のコマンドを入力します。
$ oc get nodes次の例のように、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ここでは、以下のようになります。
kubernetes.io/hostname- ポリシーを適用するホスト名を指定します。このホストは、IPsec 設定の左側のホストとして機能します。
name- ホスト上に作成するインターフェイスの名前を指定します。
left-
クラスター側で IPsec トンネルを終端するクラスターノードのホスト名を指定します。この名前は、提供した PKCS#12 証明書の SAN
[Subject Alternate Name]と一致する必要があります。 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
IPsec インターフェイスを設定するために、次のコマンドを入力します。
$ oc create -f ipsec-config.yaml
次の証明書ファイルを提供して、各ホストのネットワークセキュリティーサービス (NSS) データベースに追加します。これらのファイルは、次のステップで Butane 設定の一部としてインポートされます。
-
left_server.p12: IPsec エンドポイントの証明書バンドル -
ca.pem: 証明書に署名した認証局
-
- 証明書をクラスターに追加するためのマシン設定を作成します。
マウントされたシークレットファイルからパスワードを読み取ります。
$ password=$(cat run/secrets/<left_server_password>)-
left_server_password:: パスワードが含まれているファイルの名前。このファイルはマウントされたシークレット内に存在します。
-
次のコマンドを入力して、Red Hat Enterprise Linux (RHEL) に同梱されている
pk12utilツールを使用し、PKCS#12ファイルを保護しているパスワードを指定します。<password>値を自分のパスワードに置き換えてください。$ pk12util -W "<password>" -i /etc/pki/certs/left_server.p12 -d /var/lib/ipsec/nss/コントロールプレーンとコンピュートノードの Butane 設定ファイルを作成するには、次のコマンドを入力します。
注記設定ファイルで指定する Butane のバージョン は、OpenShift Container Platform のバージョンと同じである必要があり、末尾は常に
0です。たとえば、4.19.0などです。Butane の詳細は、「Butane を使用したマシン設定の作成」を参照してください。$ for role in master worker; do cat >> "99-ipsec-${role}-endpoint-config.bu" <<-EOF variant: openshift version: 4.19.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前のステップで作成した 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 つのマシンを更新するため、移行にかかる合計時間がクラスターのサイズと共に増加します。
IPsec マシン設定が正常にロールアウトされたことを確認するために、次のコマンドを入力します。
IPsec マシン設定の作成を確認します。
$ oc get mc | grep ipsec出力例
80-ipsec-master-extensions 3.2.0 6d15h 80-ipsec-worker-extensions 3.2.0 6d15hコントロールプレーンノードに IPsec 拡張機能が適用されたことを確認します。
$ oc get mcp master -o yaml | grep 80-ipsec-master-extensions -cコンピュートノードに IPsec 拡張機能が適用されたことを確認します。出力例には
2と表示されます。$ oc get mcp worker -o yaml | grep 80-ipsec-worker-extensions -c