cka-2026-NetworkPolicy

张开发
2026/4/10 14:20:33 15 分钟阅读

分享文章

cka-2026-NetworkPolicy
Task从提供的YAML样本中查看并应用适当的NetworkPolicy。确保选择的 NetworkPolicy 不过于宽松同时允许运行在frontend和backend namespaces中的frontend和backend Deployment之间的通信。首先分析frontend和backend Deployment以确定需要应用的NetworkPolicy的具体要求。接下来检查位于 ~/netpol文件夹中的NetworkPolicy YAML示例。注意请勿删除或修改提供的示例。仅应用其中一个。否则可能会导致分数降低。最后应用启用frontend和backend Deployment之间的通信的NetworkPolicy但不要过于宽容。注意请勿删除或修改现有的默认拒绝所有入站流量或出口流量NetworkPolicy。否则可能导致零分。步骤1.先检查 frontend 和 backend 两个 namespace 的标签kubectl get ns frontend backend --show-labelsNAME STATUS AGE LABELS frontend Active 19s kubernetes.io/metadata.namefrontend backend Active 7s kubernetes.io/metadata.namebackend步骤2 再检查 frontend 和 backend 两个 namespace 下的所有pod 的标签kubectl -n frontend get pod --show-labelsNAME READY STATUS RESTARTS AGE LABELS frontend-5956b7488c-bz4vd 1/1 Running 0 13m appfrontend,pod-template-hash5956b7488ckubectl -n backend get pod --show-labelsNAME READY STATUS RESTARTS AGE LABELS backend-7f7658c6bc-rjmdt 1/1 Running 0 57s appbackend,pod-template-hash7f7658c6bcNetworkPolicy 如果作用于 Pod,则需使用两个 Pod 的标签appfrontend appbackend步骤3.查看默认拒绝策略kubectl -n backend get networkpoliciesNAME POD-SELECTOR AGE default-deny-all none 9s集群中,有一个拒绝所有访问的默认 NetworkPolicy。所以 frontend 和 backend 两个 namespace 下的所有 pod 互相不能通信。步骤4. 查看题目给的 NetworkPolicy 的 yaml,选择最合适的一个,创建cat ~/netpol/netpol1.yaml第一个策略允许 frontend namespace 下的所有 Pod,访问 backend namespace 下的所有 Pod。# 文件: netpol1.yaml apiVerston: networking.k8s.to/v1 # 原始内容apiVerston 拼写错误域名错误 kind: NetworkPolicy # 资源类型 metadata: # 元数据开始 name: netpol-1 # 策略名称 namespace: backend # 命名空间 spec: # 规格开始 podSelector: {} # 原始注释范围太大 policyTypes: # 策略类型 - Ingress # 仅入站 ingress: # 入站规则 - from: # 源列表 - namespaceSelector: # 命名空间选择器 matchLabels: # 匹配标签 kubernetes.io/metadata.name: frontend # 允许 frontend 命名空间第二个策略允许 frontend namespace 下有 appfrontend 标签的 Pod,访问 backend namespace 下有 appbackend 标签的 Pod。第二个显然比第一个策略更合适,第一个太宽松了。# 文件: netpol2.yamlapiVersion: networking.k8s.io/v1 # API 版本正确kind: NetworkPolicy # 资源类型metadata: # 元数据开始name: netpol-2 # 策略名称namespace: backend # 命名空间spec: # 规格开始podSelector: # Pod 选择器matchLabels: # 匹配标签app: backend # 目标 Pod 标签polcyTypes: # 原始拼写错误应为 policyTypes- Ingress # 仅入站ingress: # 入站规则- from: # 源列表- namespaceSelector: # 命名空间选择器matchLabels: # 匹配标签kubernetes.io/metadata.name: frontend # 源命名空间podSelector: # Pod 选择器matchLabels: # 匹配标签app: frontend # 源 Pod 标签# 空行第三个策略看到 backend namespace 下有 appdatabase 标签的 Pod,就不用看了。这个显然是错误的。因为我们上面查过的,backend namespace 下的 Pod,标签是 appbackend,而不是 appdatabase# 文件: netpol3.yamlapiVersion: networking.k8s.io/v1 # API 版本正确kind: NetworkPolicy # 资源类型metadata: # 元数据开始name: netpol-3 # 策略名称namespace: backend # 命名空间spec: # 规格开始podSelector: # Pod 选择器matchLabels: # 匹配标签app: database # 原始注释跟题意中名字空间没关系policyTypes: # 策略类型- Ingress # 仅入站ingress: # 入站规则- from: # 源列表- namespaceSelector: # 命名空间选择器matchLabels: # 匹配标签kubernetes.io/metadata.name: frontend # 源命名空间podSelector: # Pod 选择器matchLabels: # 匹配标签app: frontend # 源 Pod 标签- ipBlock: # IP 块cidr: 10.0.0.0/24 # 允许的 CIDR所以,最终选择 netpol2.yaml 创建kubectl apply -f ~/netpol/netpol2.yaml提示 created,表示创建成功。步骤5.检查 NetworkPolicykubectl -n backend get networkpoliciesNAME POD-SELECTOR AGEdefault-deny-all none 23mnetpol-2 appbackend 28s

更多文章