Networkpolicy


整个问题的本质在于:

  • 目标资源是 red-pod
  • 控制的是 red-pod 的入站(Ingress)流量。
  • 当前允许了来自 green-podblue-pod 的入站流量。
  • 需要修改策略,使其只允许来自 green-pod 的入站流量,而阻止来自 blue-pod 的入站流量。

基于这个理解,我们的操作逻辑也变得更加清晰:

  1. 找到应用于 red-pod 的 NetworkPolicy。
  2. 修改该 NetworkPolicy,将 from 字段中允许 blue-pod 的那一部分移除。

我们需要删除允许 blue-pod 访问 red-pod 的 NetworkPolicy(如果存在),并创建一个 NetworkPolicy 来显式允许 green-pod 访问 red-pod

由于题目没有提供 red-podService 文件,我们假设 red-pod 已经在运行并且其监听端口为 80。

核心操作思路(命令行):

  1. 删除导致问题的旧策略: 如果 allow-green-and-blue 策略是导致 blue-pod 也能访问 red-pod 的原因,那么需要删除它。
  2. 创建新策略: 创建一个 NetworkPolicy 应用于 red-pod,只允许来自 green-pod 的流量。

假设你的环境已经按照题目描述准备好了 green-podred-pod,并且存在一个 NetworkPolicy(比如 allow-green-and-blue)允许了 blue-pod 访问 red-pod,你需要执行以下步骤:

步骤 1:删除允许 blue-pod 访问 red-pod 的策略

如果你确认 allow-green-and-blue 这个策略是问题所在,并且它配置了允许 blue-pod 访问 red-pod,则执行:

kubectl delete networkpolicy allow-green-and-blue

步骤 2:创建一个允许 green-pod 访问 red-pod 的策略

创建一个新的 NetworkPolicy 文件,命名为 allow-green-to-red-policy.yaml,内容如下:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-green-to-red
spec:
  podSelector:
    matchLabels:
      run: red-pod # 这个策略应用于 red-pod
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          run: green-pod # 只允许来自 green-pod 的流量
    ports:
    - protocol: TCP
      port: 80 # 假设 red-pod 监听在 80 端口

然后应用它:

kubectl apply -f allow-green-to-red-policy.yaml

将这两个操作整合到最精简的“一行”思路是困难的,因为涉及到文件创建和删除,但核心思想是:

删除旧策略,应用一个只允许 green-pod 访问 red-pod 的新策略。

如果题目要求的是纯粹的命令行操作,那么需要先 cat <<EOF > allow-green-to-red-policy.yaml 来生成文件,然后 kubectl apply

作为一句话总结的命令思路:

kubectl delete networkpolicy allow-green-and-blue && \
cat <<EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-green-to-red
spec:
  podSelector:
    matchLabels:
      run: red-pod
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          run: green-pod
    ports:
    - protocol: TCP
      port: 80
EOF

解释:

  • kubectl delete networkpolicy allow-green-and-blue: 首先删除可能存在的、允许 blue-pod 访问 red-pod 的策略。
  • &&: 表示前一个命令成功执行后才执行后一个命令。
  • cat <<EOF | kubectl apply -f -: 这是一个将多行内容通过标准输入传递给 kubectl apply 命令的标准做法。EOF 标记了这里内容的开始和结束。

这个命令会先删除旧的策略,然后创建一个新的策略,该策略应用于 red-pod,并且只允许来自 green-pod 的 TCP 80 端口流量。

posted on 2025-06-22 17:49  Leo_Yide  阅读(23)  评论(0)    收藏  举报