0Pricing
Kubernetes Basics · 课时

用于隔离的网络策略

使用 Kubernetes 网络策略控制 Pod 与命名空间之间的网络流量。

用于隔离的网络策略 是 CoddyKit 上的免费 Kubernetes Basics 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Kubernetes Basics 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Kubernetes Basics 课程共包含 4 节课。

网络策略:流量警察

在 Kubernetes 中,Pod 默认可以自由地相互通信。这为灵活性提供了便利,但并不总是有利于安全。

网络策略就像 Pod 的防火墙,用于控制允许进入(入口)和离开(出口)的网络流量。

默认情况下:所有 Pod 都可以通信

默认情况下,Pod 部署后,无论命名空间如何,都可以与集群中的任何其他 Pod 通信。这种“扁平网络”模型简化了设置,但缺乏隔离性。

在生产环境中,您通常需要限制通信,以增强安全性并防止应用组件之间发生未经授权的访问。

入口与出口规则

网络策略定义了 Pod 可以如何通信的规则。它们主要关注两种流量:

  • 入口:进入 Pod 的流量。
  • 出口:从 Pod 发出的流量。

这些规则通过标签应用于特定 Pod,并且可以指定其他 Pod、命名空间或 IP 地址块作为目标。

CNI 插件要求

网络策略并不是自动生效的魔法!要使其正常工作,您的 Kubernetes 集群必须拥有支持网络策略的容器网络接口(CNI)插件。

Calico、Cilium 和 Weave Net 等常用 CNI 插件都提供此功能。如果没有支持该功能的 CNI,网络策略将不会产生任何效果。

策略的组成

网络策略使用 YAML 定义。主要字段包括:

  • metadata.name:策略的唯一名称。
  • spec.podSelector:选择应用此策略的 Pod。
  • spec.policyTypes:指定策略应用于 Ingress、Egress,还是两者。
  • spec.ingress/spec.egress:列出允许流量的规则。

阻止所有入站流量

让我们创建一个策略,拒绝当前命名空间中带有 app: backend 标签的 Pod 接收所有入站流量。这是建立“默认拒绝”安全态势的常见起点。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all-backend-ingress
spec:
  podSelector:
    matchLabels:
      app: backend
  policyTypes:
  - Ingress
  ingress: [] # An empty ingress list denies all incoming traffic

允许来自前端的入口流量

现在,让我们修改策略,使带有 app: frontend 标签的同一命名空间中的 Pod,成为访问我们 app: backend Pod 的唯一入站流量来源。

请注意用于指定源 Pod 的 from 部分。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-frontend-to-backend
spec:
  podSelector:
    matchLabels:
      app: backend
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: frontend

控制出站流量

与入口流量一样,您也可以控制出口(出站)流量。在这里,我们将创建一个策略,只允许 app: backend Pod 向带有 app: database 标签的 Pod 发起出站请求。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: backend-egress-to-db
spec:
  podSelector:
    matchLabels:
      app: backend
  policyTypes:
  - Egress
  egress:
  - to:
    - podSelector:
        matchLabels:
          app: database

指定其他命名空间

如果前端位于不同的命名空间中,例如 web-apps,该怎么办?您可以使用 namespaceSelector 来指定其他命名空间中的 Pod。

此策略允许来自 web-apps 命名空间中任意 Pod 的入口流量访问 app: backend Pod。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-web-apps-ingress
spec:
  podSelector:
    matchLabels:
      app: backend
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          name: web-apps
      podSelector: {} # All pods in the selected namespace

策略挑战

假设某个 Pod 带有 app: web 和 env: prod 标签。哪个网络策略可以仅允许来自 monitoring 命名空间中 Pod 的入站流量?

回顾:保护您的网络

做得很好!您已经学习了 Kubernetes 网络策略如何为应用提供至关重要的网络隔离。

  • 它们充当 Pod 的防火墙。
  • 同时控制入口(进入)和出口(离开)流量。
  • 需要由支持网络策略的 CNI 插件提供支持。
  • 使用 YAML 定义,其中包括 podSelector、policyTypes 和规则定义。
  • 可以通过标签指定 Pod,甚至可以指定整个命名空间。

使用网络策略实施“最小权限”网络模型!

常见问题解答

「用于隔离的网络策略」课时是免费的吗?

是的 — 「用于隔离的网络策略」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Kubernetes Basics 课程的其余内容,请升级到 CoddyKit PRO。 Kubernetes Basics 课程共包含 4 节课。

「用于隔离的网络策略」这节课中我会学到什么?

使用 Kubernetes 网络策略控制 Pod 与命名空间之间的网络流量。 你通过在浏览器中直接运行的动手代码来练习 Kubernetes Basics,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Kubernetes Basics 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Kubernetes Basics 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「用于隔离的网络策略」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Kubernetes Basics 课中编写并运行代码吗?

能。每节 Kubernetes Basics 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 基于角色的访问控制(RBAC)
  2. 用于隔离的网络策略
  3. Pod 安全标准
  4. 服务账户与工作负载身份
← 返回 Kubernetes Basics