文档首页/ 云容器引擎 CCE/ 用户指南(吉隆坡区域)/ 网络/ 容器网络/ Pod网络配置/ 配置网络策略(NetworkPolicy)限制Pod访问的对象
更新时间:2025-07-07 GMT+08:00

配置网络策略(NetworkPolicy)限制Pod访问的对象

网络策略(NetworkPolicy)是Kubernetes设计用来限制Pod访问的对象,相当于从应用的层面构建了一道防火墙,进一步保证了网络安全。NetworkPolicy支持的能力取决于集群的网络插件的能力。

默认情况下,如果命名空间中不存在任何策略,则所有进出该命名空间中的Pod的流量都被允许。

NetworkPolicy的Ingress/Egress对端选择方式有如下3种:

  • namespaceSelector:根据命名空间的标签选择,具有该标签的命名空间都可以访问或被访问。
  • podSelector:根据Pod的标签选择,具有该标签的Pod都可以访问或被访问。
  • ipBlock:根据地址段选择,网段内的IP地址都可以访问或被访问。

约束与限制

  • 当前仅容器隧道网络模型的集群支持网络策略(NetworkPolicy)。网络策略可分为以下规则:
    • 入规则(Ingress):所有版本均支持。
    • 出规则(Egress):暂不支持设置。
  • 不支持对IPv6地址网络隔离。

通过YAML使用Ingress规则

  • 场景一:通过网络策略限制Pod只能被带有特定标签的Pod访问
    图1 podSelector

    目标Pod具有role=db标签,该Pod只允许带有role=frontend标签的Pod访问其6379端口。设置该网络策略的具体操作步骤如下:

    1. 创建名为access-demo1.yaml文件。
      vim access-demo1.yaml

      以下为YAML文件内容:

      apiVersion: networking.k8s.io/v1
      kind: NetworkPolicy
      metadata:
        name: access-demo1
        namespace: default
      spec:
        podSelector:                  # 规则对具有role=db标签的Pod生效
          matchLabels:
            role: db
        ingress:                      # 表示入规则
        - from:
          - podSelector:              # 只允许具有role=frontend标签的Pod访问
              matchLabels:
                role: frontend
          ports:                      # 只能使用TCP协议访问6379端口
          - protocol: TCP
            port: 6379
    2. 执行以下命令,根据上述的access-demo1.yaml文件创建网络策略。
      kubectl apply -f access-demo1.yaml

      预期输出:

      networkpolicy.networking.k8s.io/access-demo1 created
  • 场景二:通过网络策略限制Pod只能被指定命名空间下的Pod访问
    图2 namespaceSelector

    目标Pod具有role=db标签,该Pod只允许project=myproject标签的命名空间中的Pod访问其6379端口。设置该网络策略的具体操作步骤如下:

    1. 创建名为access-demo2.yaml文件。
      vim access-demo2.yaml

      以下为YAML文件内容:

      apiVersion: networking.k8s.io/v1
      kind: NetworkPolicy
      metadata:
        name: access-demo2
      spec:
        podSelector:                  # 规则对具有role=db标签的Pod生效
          matchLabels:
            role: db
        ingress:                      # 表示入规则
        - from:
          - namespaceSelector:        # 只允许具有project=myproject标签的命名空间中的Pod访问
              matchLabels:
                project: myproject
          ports:                      # 只能使用TCP协议访问6379端口
          - protocol: TCP
            port: 6379
    2. 执行以下命令,根据上述的access-demo2.yaml文件创建网络策略。
      kubectl apply -f access-demo2.yaml

      预期输出:

      networkpolicy.networking.k8s.io/access-demo2 created

通过控制台创建网络策略

  1. 登录CCE控制台,单击集群名称进入集群。
  2. 在左侧导航栏中选择“策略”,在右侧选择“网络策略”页签,单击右上角“创建网络策略”

    • 策略名称:自定义输入NetworkPolicy名称。
    • 命名空间:选择网络策略所在命名空间。
    • 选择器:输入标签选择要关联的Pod,然后单击添加。您也可以单击“引用负载标签”直接引用已有负载的标签。
    • 入方向规则:单击添加入方向规则,参数设置请参见表1

      表1 添加入方向规则

      参数

      参数说明

      协议端口

      请选择对应的协议类型和端口,目前支持TCP和UDP协议。

      源对象命名空间

      选择允许哪个命名空间的对象访问。不填写表示和当前策略属于同一命名空间。

      源对象Pod标签

      允许带有这个标签的Pod访问,不填写表示命名空间下全部Pod。

  3. 设置完成后,单击“确定”