暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Kubernetes网络策略入门与进阶:经典案例解析

20

网络策略简介

在默认情况下,Kubernetes 集群网络没有任何限制,所有 Pod 可以相互通信。在某些场景下,需要进行网络控制以减少攻击面,提高安全性,这时就需要使用网络策略。

网络策略(Network Policy) 是 Kubernetes 资源,用于限制 Pod 的入站和出站流量。网络策略可以基于 Pod 和 Namespace 提供网络访问控制。

网络策略的应用场景:

  • 应用程序间的访问控制,例如项目 A 不能访问项目 B 的 Pod。
  • 开发环境命名空间不能访问测试环境命名空间的 Pod。
  • 当 Pod 暴露到外部时,需要做 Pod 白名单。
  • 多租户网络环境隔离。

网络策略示例

一个网络策略示例如下:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: default
spec:
  podSelector:
    matchLabels:
      role: db
  policyTypes:
  - Ingress
  - Egress
  ingress:
  - from:
    - ipBlock:
        cidr: 172.17.0.0/16
        except:
        - 172.17.1.0/24
    - namespaceSelector:
        matchLabels:
          project: myproject
    - podSelector:
        matchLabels:
          role: frontend
    ports:
    - protocol: TCP
      port: 6379
  egress:
  - to:
    - ipBlock:
        cidr: 10.0.0.0/24
    ports:
    - protocol: TCP
      port: 5978

解析:

  • metadata
    : 定义网络策略的名称和命名空间。
  • podSelector
    : 目标 Pod,通过标签选择器确定应用策略的 Pod。
  • policyTypes
    : 策略类型,指定策略用于入站和出站流量控制。
  • ingress
    : 入站流量规则,from
    定义允许访问的来源,可以是 IP 段、命名空间或 Pod 标签。ports
    定义可以访问的端口。
  • egress
    : 出站流量规则,to
    定义可以访问的目标 IP 段和端口。

案例1:拒绝命名空间下所有Pod出入站流量

这个策略将禁止所有Pod的入站和出站流量,确保该命名空间内的Pod无法与外部通信。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all-traffic
  namespace: your-namespace
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress

案例2:拒绝其他命名空间Pod访问

这个策略将禁止其他命名空间内的Pod访问指定命名空间内的Pod。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-other-namespaces
  namespace: your-namespace
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          name: your-namespace

案例3:允许其他命名空间Pod访问指定应用

这个策略允许其他命名空间内的Pod访问指定命名空间内某一应用的Pod。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-specific-app
  namespace: your-namespace
spec:
  podSelector:
    matchLabels:
      app: your-app
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector: {}

案例4:同一个命名空间下应用之间限制访问

这个策略将限制同一命名空间下不同应用之间的访问。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: restrict-app-communication
  namespace: your-namespace
spec:
  podSelector:
    matchLabels:
      app: appA
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: appB

案例5:只允许指定命名空间中的应用访问

这个策略将只允许特定命名空间中的应用访问该命名空间内的Pod。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-specific-namespace
  namespace: your-namespace
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          name: specific-namespace

这些策略示例展示了如何使用Kubernetes网络策略来实现不同的访问控制需求。通过合理配置网络策略,可以增强集群的安全性,确保不同命名空间和应用之间的通信符合预期的安全要求。

    非常感谢您读到这里!如果您觉得这篇文章对您有帮助,请不要忘记关注公众号。关注后,您将第一时间获得最新的AI、云计算、运维(Linux、数据库,容器等)技术,以及更多实用的技能干货。

    点击页面右上角的“关注”按钮,不错过任何精彩内容!

    扫码获取联系方式


文章转载自周同学带您玩AI,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论