Network Policies 测验
本测验测试你对 Kubernetes Network Policies、Cilium Network Policies 和微分段的理解。
测验问题
1. Kubernetes NetworkPolicy 的默认行为是什么?
A. 阻止所有流量 B. 允许所有流量 C. 仅阻止入站流量 D. 仅阻止出站流量
显示答案
答案:B. 允许所有流量
解释: 在没有 NetworkPolicy 的情况下,Kubernetes 默认允许 Pods 之间的所有流量。当你创建 NetworkPolicy 时,它会为匹配该策略的 podSelector 的 Pods 启用“默认拒绝”行为。
2. NetworkPolicy 中哪个字段用于选择特定的 Pods?
A. selector B. podSelector C. matchLabels D. targetPods
显示答案
答案:B. podSelector
解释: NetworkPolicy 中的 spec.podSelector 字段选择该策略适用的 Pods:
spec:
podSelector:
matchLabels:
app: web空的 podSelector ({}) 会选择该命名空间中的所有 Pods。
3. NetworkPolicy 中哪些字段定义入站和出站规则?
A. inbound/outbound B. ingress/egress C. input/output D. incoming/outgoing
显示答案
答案:B. ingress/egress
解释:
- ingress:入站流量规则
- egress:出站流量规则
spec:
ingress:
- from:
- podSelector:
matchLabels:
role: frontend
egress:
- to:
- podSelector:
matchLabels:
role: database4. CiliumNetworkPolicy 中的 L7 HTTP 规则在哪里定义?
A. spec.http B. spec.ingress.toPorts.rules.http C. spec.rules.http D. spec.layer7.http
显示答案
答案:B. spec.ingress.toPorts.rules.http
解释: CiliumNetworkPolicy 中的 L7 规则在 toPorts 内的 rules 部分定义:
spec:
ingress:
- toPorts:
- ports:
- port: "80"
rules:
http:
- method: GET
path: "/api/.*"5. 实现默认拒绝策略的正确 NetworkPolicy 是什么?
A. 在 policyTypes 中仅指定 Ingress B. 将 podSelector 设置为空,并在 policyTypes 中指定 Ingress 和 Egress C. 将 ingress 和 egress 规则留空 D. B 和 C 都正确
显示答案
答案:D. B 和 C 都正确
解释: 默认拒绝策略示例:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-all
spec:
podSelector: {} # Select all Pods
policyTypes:
- Ingress
- Egress
# No ingress and egress rules = block all traffic空的 podSelector 会选择所有 Pods,而没有规则时,该流量类型会被阻止。
6. CiliumClusterwideNetworkPolicy 的特点是什么?
A. 仅适用于特定命名空间 B. 适用于整个集群 C. 仅控制外部流量 D. 仅支持 L7 策略
显示答案
答案:B. 适用于整个集群
解释: CiliumClusterwideNetworkPolicy 会应用于整个集群,不受命名空间限制。它适合用于实现通用安全规则(例如,阻止所有命名空间访问元数据服务)。
7. 如何在 NetworkPolicy 中允许来自特定命名空间的所有 Pods?
A. 仅使用 namespaceSelector B. 仅使用 podSelector C. 将 namespaceSelector 与空的 podSelector 结合使用 D. 使用 namespace 字段
显示答案
答案:A. 仅使用 namespaceSelector
解释:
ingress:
- from:
- namespaceSelector:
matchLabels:
name: monitoring仅使用 namespaceSelector 会允许来自该命名空间的所有 Pods。与 podSelector 一起使用时,只会选择该命名空间中的特定 Pods。
8. CiliumNetworkPolicy 中哪个字段定义基于 FQDN 的 egress 规则?
A. toFQDNs B. toDomains C. toHosts D. toEndpoints
显示答案
答案:A. toFQDNs
解释: CiliumNetworkPolicy 的 toFQDNs 允许基于 DNS 名称的 egress 流量:
spec:
egress:
- toFQDNs:
- matchName: "api.example.com"
- matchPattern: "*.amazonaws.com"
toPorts:
- ports:
- port: "443"9. 哪些流量不受 NetworkPolicy 影响?
A. Pods 之间的流量 B. 同一 Pod 中容器之间的流量 (localhost) C. 通过 Services 的流量 D. 来自外部来源的流量
显示答案
答案:B. 同一 Pod 中容器之间的流量 (localhost)
解释: NetworkPolicy 适用于 Pods 之间的网络流量。同一 Pod 中容器之间的 localhost 通信不属于 NetworkPolicy 的范围。此外,使用节点 hostNetwork 的 Pods 存在一些限制。
10. Cilium 的基于 Identity 的策略有什么优势?
A. 不受 IP 地址变化影响 B. 处理速度更快 C. 内存使用更少 D. 不需要 DNS 查询
显示答案
答案:A. 不受 IP 地址变化影响
解释: Cilium Identity 是基于 Pod 标签生成的。即使 Pod 重启并且其 IP 发生变化,只要它具有相同的标签,就会保持相同的 Identity。这克服了基于 IP 的策略的局限性。
11. 在三层架构中,backend 层的正确网络策略是什么?
A. 允许所有流量 B. 仅允许来自 frontend 的 ingress C. 允许来自 frontend 的 ingress,允许到 database 的 egress D. 仅允许到 database 的 egress
显示答案
答案:C. 允许来自 frontend 的 ingress,允许到 database 的 egress
解释: 在三层微分段中,对于 backend:
- Ingress:仅允许来自 frontend 层
- Egress:仅允许到 database 层
这遵循最小权限原则,并清晰地控制层之间的流量流向。
12. 在 NetworkPolicy 中使用 ipBlock 指定 CIDR 范围时,哪个字段会排除特定 IP?
A. exclude B. except C. notIn D. excludeCIDR
显示答案
答案:B. except
解释: ipBlock 的 except 字段可以排除特定 CIDRs:
ingress:
- from:
- ipBlock:
cidr: 10.0.0.0/8
except:
- 10.0.1.0/24
- 10.0.2.0/24这允许来自 10.0.0.0/8 范围的流量,但不包括 10.0.1.0/24 和 10.0.2.0/24。