7.9.5. インターフェイス固有の安全な sysctls リストの更新
openshift-multus namespace の cni-sysctl-allowlist を更新することで、安全なインターフェイス固有の sysctls のデフォルトリストを変更できます。
インターフェイス固有の安全な sysctl リストの更新のサポートは、テクノロジープレビュー機能のみです。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
たとえば、以下の手順では、定義済みの安全な sysctls のリストを変更して、ユーザーが IPv4 のより厳格な逆方向パス転送を強制できるようにする sysctl を追加します。リバースパスフォワーディングの詳細は、Reverse Path Forwarding を参照してください。
手順
次のコマンドを実行して、既存の定義済みリストを表示します。
$ oc get cm -n openshift-multus cni-sysctl-allowlist -oyaml予想される出力
apiVersion: v1 data: allowlist.conf: |- ^net.ipv4.conf.IFNAME.accept_redirects$ ^net.ipv4.conf.IFNAME.accept_source_route$ ^net.ipv4.conf.IFNAME.arp_accept$ ^net.ipv4.conf.IFNAME.arp_notify$ ^net.ipv4.conf.IFNAME.disable_policy$ ^net.ipv4.conf.IFNAME.secure_redirects$ ^net.ipv4.conf.IFNAME.send_redirects$ ^net.ipv6.conf.IFNAME.accept_ra$ ^net.ipv6.conf.IFNAME.accept_redirects$ ^net.ipv6.conf.IFNAME.accept_source_route$ ^net.ipv6.conf.IFNAME.arp_accept$ ^net.ipv6.conf.IFNAME.arp_notify$ ^net.ipv6.neigh.IFNAME.base_reachable_time_ms$ ^net.ipv6.neigh.IFNAME.retrans_time_ms$ kind: ConfigMap metadata: annotations: kubernetes.io/description: | Sysctl allowlist for nodes. release.openshift.io/version: 4.16.0-0.nightly-2022-11-16-003434 creationTimestamp: "2022-11-17T14:09:27Z" name: cni-sysctl-allowlist namespace: openshift-multus resourceVersion: "2422" uid: 96d138a3-160e-4943-90ff-6108fa7c50c3次のコマンドを使用してリストを編集します。
$ oc edit cm -n openshift-multus cni-sysctl-allowlist -oyamlユーザーがより厳密な逆方向パス転送を実装できるように、
^net.ipv4.conf.IFNAME.rp_filter$フィールドと^net.ipv6.conf.IFNAME.rp_filter$フィールドをパラメーターのリストに追加します。# Please edit the object below. Lines beginning with a '#' will be ignored, # and an empty file will abort the edit. If an error occurs while saving this file will be # reopened with the relevant failures. # apiVersion: v1 data: allowlist.conf: |- ^net.ipv4.conf.IFNAME.accept_redirects$ ^net.ipv4.conf.IFNAME.accept_source_route$ ^net.ipv4.conf.IFNAME.arp_accept$ ^net.ipv4.conf.IFNAME.arp_notify$ ^net.ipv4.conf.IFNAME.disable_policy$ ^net.ipv4.conf.IFNAME.secure_redirects$ ^net.ipv4.conf.IFNAME.send_redirects$ ^net.ipv4.conf.IFNAME.rp_filter$ ^net.ipv6.conf.IFNAME.accept_ra$ ^net.ipv6.conf.IFNAME.accept_redirects$ ^net.ipv6.conf.IFNAME.accept_source_route$ ^net.ipv6.conf.IFNAME.arp_accept$ ^net.ipv6.conf.IFNAME.arp_notify$ ^net.ipv6.neigh.IFNAME.base_reachable_time_ms$ ^net.ipv6.neigh.IFNAME.retrans_time_ms$ ^net.ipv6.conf.IFNAME.rp_filter$変更をファイルに保存して終了します。
注記sysctlの削除もサポートされています。ファイルを編集し、sysctlまたはsysctlsを削除してから、変更を保存して終了します。
検証
次の内容で、
reverse-path-fwd-example.yamlなどのネットワーク接続定義を作成します。apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: tuningnad namespace: default spec: config: '{ "cniVersion": "0.4.0", "name": "tuningnad", "plugins": [{ "type": "bridge" }, { "type": "tuning", "sysctl": { "net.ipv4.conf.IFNAME.rp_filter": "1" } } ] }'以下のコマンドを実行して yaml を適用します。
$ oc apply -f reverse-path-fwd-example.yaml出力例
networkattachmentdefinition.k8.cni.cncf.io/tuningnad created次の YAML を使用して、
examplepod.yamlなどの Pod を作成します。apiVersion: v1 kind: Pod metadata: name: example labels: app: httpd namespace: default annotations: k8s.v1.cni.cncf.io/networks: tuningnad spec: securityContext: runAsNonRoot: true seccompProfile: type: RuntimeDefault containers: - name: httpd image: 'image-registry.openshift-image-registry.svc:5000/openshift/httpd:latest' ports: - containerPort: 8080 securityContext: allowPrivilegeEscalation: false capabilities: drop: - ALL各項目の説明:
metadata.annotations-
設定された
NetworkAttachmentDefinitionの名前を指定します。
以下のコマンドを実行して YAML を適用します。
$ oc apply -f examplepod.yaml次のコマンドを実行して、Pod が作成されていることを確認します。
$ oc get pod出力例
NAME READY STATUS RESTARTS AGE example 1/1 Running 0 47s次のコマンドを実行して、Pod にログインします。
$ oc rsh example設定された sysctl フラグの値を確認します。たとえば、次のコマンドを実行して値
net.ipv4.conf.net1.rp_filterを見つけます。sh-4.4# sysctl net.ipv4.conf.net1.rp_filter予想される出力
net.ipv4.conf.net1.rp_filter = 1