我有一个类似这样的全局网络策略(记录任何不发送到端口 30000 的数据包,并且只允许流量发送到接口 ens4 上的端口 30000):
apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
name: internal-rules
spec:
selector: interface == 'ens4'
applyOnForward: true
types:
- Ingress
- Egress
ingress:
- action: Log
protocol: TCP
destination:
notPorts:
- 30000:32767
- action: Allow
protocol: TCP
destination:
ports:
- 30000:32767
egress:
- action: Allow
然后我将它应用到具有这样的主机端点的接口。
apiVersion: projectcalico.org/v3
kind: HostEndpoint
metadata:
name: node1-internal-if
labels:
interface: ens4
spec:
interfaceName: ens4
node: testmdm2503nic-node1
我为设置中的 3 个不同接口设置了不同的规则。通常情况下,它可以过滤我的流量,但我发现一些我意想不到的数据包被丢弃了。例如,以下数据包被丢弃了。请注意,IN 接口是空白的,我原以为它不应该通过我的 hostendpoint 规则进行过滤。端口 30000 是我在 ens4 上列为开放的端口之一,但我不确定这些流量是从哪个接口传入的。
2025 年 3 月 11 日星期二 18:02:39:INFO | kickRegressionSuite:3 月 11 日 16:43:04 testmdm2503nic-k8sc-node1-2 内核:calico-packet:IN= OUT=cali6f00f63eeec SRC=1.2.3.4 DST=1.2.8.4 LEN=60 TOS=0x00 PREC=0x00 TTL=62 ID=9941 DF PROTO=TCP SPT=58082 DPT=30000 WINDOW=64240 RES=0x00 SYN URGP=0 MARK=0x69a04000
当数据包按预期被丢弃时,日志通常会在 IN 字段中列出接口名称:
2 月 20 日 10:30:50 loriek8s-k8sc-node2-3 内核:calico-packet:IN=ens3 OUT= MAC=fa:: SRC=1.1.7.9 DST=1.1.7.2 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=53798 DF PROTO=TCP SPT=33728 DPT=10250 WINDOW=29200 RES=0x00 SYN URGP=0
有什么想法我可能做错了吗,或者也许丢弃的数据包的记录并不像我期望的那样。