2.11. 公開されたネットワークポートの監査
MicroShift では、次の場合にワークロードによってホストポートを開くことができます。ログを確認してネットワークサービスを表示できます。
2.11.1. hostNetwork
Pod が hostNetwork:true
で設定されている場合、Pod はホストネットワーク namespace で実行されています。この設定では、ホストポートを独立して開くことができます。MicroShift コンポーネントログを使用してこのケースを追跡することはできません。ポートは firewalld ルールの対象となります。firewalld でポートが開いている場合は、firewalld デバッグログでポートの開きを確認できます。
前提条件
- ビルドホストへの root ユーザーアクセス権がある。
手順
オプション: 次のコマンド例を使用して、
hostNetwork:true
パラメーターが ovnkube-node Pod に設定されていることを確認できます。$ sudo oc get pod -n openshift-ovn-kubernetes <ovnkube-node-pod-name> -o json | jq -r '.spec.hostNetwork' true
次のコマンドを実行して、firewalld ログのデバッグを有効にします。
$ sudo vi /etc/sysconfig/firewalld FIREWALLD_ARGS=--debug=10
firewalld サービスを再起動します。
$ sudo systemctl restart firewalld.service
デバッグオプションが適切に追加されたことを確認するには、次のコマンドを実行します。
$ sudo systemd-cgls -u firewalld.service
firewalld デバッグログは、
/var/log/firewalld
パスに保存されます。ポートオープンルールが追加されたときのログの例:
2023-06-28 10:46:37 DEBUG1: config.getZoneByName('public') 2023-06-28 10:46:37 DEBUG1: config.zone.7.addPort('8080', 'tcp') 2023-06-28 10:46:37 DEBUG1: config.zone.7.getSettings() 2023-06-28 10:46:37 DEBUG1: config.zone.7.update('...') 2023-06-28 10:46:37 DEBUG1: config.zone.7.Updated('public')
ポートオープンルールが削除されたときのログの例:
2023-06-28 10:47:57 DEBUG1: config.getZoneByName('public') 2023-06-28 10:47:57 DEBUG2: config.zone.7.Introspect() 2023-06-28 10:47:57 DEBUG1: config.zone.7.removePort('8080', 'tcp') 2023-06-28 10:47:57 DEBUG1: config.zone.7.getSettings() 2023-06-28 10:47:57 DEBUG1: config.zone.7.update('...') 2023-06-28 10:47:57 DEBUG1: config.zone.7.Updated('public')
2.11.2. hostPort
MicroShift で hostPort 設定ログにアクセスできます。次のログは、hostPort 設定の例です。
手順
次のコマンドを実行すると、ログにアクセスできます。
$ journalctl -u crio | grep "local port"
ホストポートが開いている場合の CRI-O ログの例:
$ Jun 25 16:27:37 rhel92 crio[77216]: time="2023-06-25 16:27:37.033003098+08:00" level=info msg="Opened local port tcp:443"
ホストポートが閉じている場合の CRI-O ログの例:
$ Jun 25 16:24:11 rhel92 crio[77216]: time="2023-06-25 16:24:11.342088450+08:00" level=info msg="Closing host port tcp:443"
2.11.3. NodePort および LoadBalancer サービス
OVN-Kubernetes は、NodePort
および LoadBalancer
サービスタイプのホストポートを開きます。これらのサービスは、ホストポートから Ingress トラフィックを取得し、それを clusterIP に転送する iptables ルールを追加します。NodePort
および LoadBalancer
サービスのログを次の例に示します。
手順
ovnkube-master
Pod の名前にアクセスするには、次のコマンドを実行します。$ oc get pods -n openshift-ovn-kubernetes | awk '/ovnkube-master/{print $1}'
ovnkube-master
Pod 名の例ovnkube-master-n2shv
ovnkube-master
Pod を使用し、次のコマンド例を実行すると、NodePort
およびLoadBalancer
サービスのログにアクセスできます。$ oc logs -n openshift-ovn-kubernetes <ovnkube-master-pod-name> ovnkube-master | grep -E "OVN-KUBE-NODEPORT|OVN-KUBE-EXTERNALIP"
NodePort サービス:
ホストポートが開いている場合の ovnkube-master Pod の ovnkube-master コンテナー内のログの例:
$ I0625 09:07:00.992980 2118395 iptables.go:27] Adding rule in table: nat, chain: OVN-KUBE-NODEPORT with args: "-p TCP -m addrtype --dst-type LOCAL --dport 32718 -j DNAT --to-destination 10.96.178.142:8081" for protocol: 0
ホストポートが閉じている場合の ovnkube-master Pod の ovnkube-master コンテナー内のログの例:
$ Deleting rule in table: nat, chain: OVN-KUBE-NODEPORT with args: "-p TCP -m addrtype --dst-type LOCAL --dport 32718 -j DNAT --to-destination 10.96.178.142:8081" for protocol: 0
LoadBalancer サービス:
ホストポートが開いている場合の ovnkube-master Pod の ovnkube-master コンテナー内のログの例:
$ I0625 09:34:10.406067 128902 iptables.go:27] Adding rule in table: nat, chain: OVN-KUBE-EXTERNALIP with args: "-p TCP -d 172.16.47.129 --dport 8081 -j DNAT --to-destination 10.43.114.94:8081" for protocol: 0
ホストポートが閉じている場合の ovnkube-master Pod の ovnkube-master コンテナー内のログの例:
$ I0625 09:37:00.976953 128902 iptables.go:63] Deleting rule in table: nat, chain: OVN-KUBE-EXTERNALIP with args: "-p TCP -d 172.16.47.129 --dport 8081 -j DNAT --to-destination 10.43.114.94:8081" for protocol: 0