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に設定する。
手順
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 代替名]に一致する必要があります。 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
以下の証明書ファイルを指定して、各ホストの Network Security Services (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.18.0です。Butane の詳細は、「Butane を使用したマシン設定の作成」を参照してください。$ for role in master worker; do cat >> "99-ipsec-${role}-endpoint-config.bu" <<-EOF variant: openshift version: 4.18.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 6d15hIPsec 拡張機能をコントロールプレーンノードに適用していることを確認します。
$ 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