当前位置: 首页 > article >正文

Kubernetes Network Policy使用场景

0. 运维干货分享

  • 软考高级系统架构设计师备考学习资料
  • 软考高级网络规划设计师备考学习资料
  • Kubernetes CKA认证学习资料分享
  • 信息安全管理体系(ISMS)制度模板分享
  • 免费文档翻译工具(支持word、pdf、ppt、excel)
  • PuTTY中文版安装包
  • MobaXterm中文版安装包
  • pinginfoview网络诊断工具中文版

Kubernetes 中的 Network Policy 是用于控制 Pod 之间以及 Pod 与外部流量之间的网络通信的安全策略。通过 Network Policy,可以实现细粒度的网络隔离和流量控制,确保集群内的安全性。以下是 Network Policy 的常见使用场景:

1. 实现默认的网络隔离

  • 场景描述: 默认情况下,Kubernetes 集群中的 Pod 彼此之间是可以自由通信的,这可能会带来潜在的安全风险,尤其是在多租户环境或不同应用共存的情况下。
  • 使用 Network Policy:
    • 通过定义一条 Network Policy,将默认的网络策略设置为拒绝(Deny-all),可以实现 Pod 间的默认隔离。然后,可以通过额外的策略来允许特定 Pod 或服务之间的通信。
    • 例如,以下策略将阻止所有进入 default 命名空间中 app=myapp 的 Pod 的流量:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: myapp
  policyTypes:
  - Ingress

可以再定义其他 Network Policy 来允许特定 Pod 的流量。

2. 限制应用程序间的访问

  • 场景描述: 在微服务架构中,多个服务之间可能有明确的通信需求。例如,frontend 应用可能只需要与 backend 应用通信,不应该直接访问数据库服务。
  • 使用 Network Policy:
    • 使用 Network Policy 可以限制不同应用之间的访问,仅允许特定的服务互相通信,从而减少攻击面。
    • 例如,以下策略允许 frontend Pod 仅能访问 backend Pod,而拒绝其他任何流量:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-frontend-to-backend
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: backend
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: frontend

3. 保护敏感服务

  • 场景描述: 某些服务,如数据库、敏感信息处理服务等,不应被集群中的其他 Pod 随意访问。
  • 使用 Network Policy:
    • 通过定义 Network Policy,可以限制只有特定的 Pod 能访问这些敏感服务,从而增强安全性。
    • 例如,以下策略只允许标记为 role=app 的 Pod 访问 role=db 的 Pod:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-app-to-db
  namespace: default
spec:
  podSelector:
    matchLabels:
      role: db
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          role: app

4. 分离开发和生产环境

  • 场景描述: 在同一个 Kubernetes 集群中可能同时存在开发和生产环境。为了防止开发环境中的服务影响生产环境,需要对两者的网络流量进行隔离。
  • 使用 Network Policy:
    • 通过 Network Policy,可以将开发环境和生产环境的流量完全隔离开,确保开发环境中的流量不会影响生产环境。
    • 例如,以下策略阻止开发环境(namespace=dev)中的 Pod 访问生产环境(namespace=prod)中的 Pod:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-dev-to-prod
  namespace: prod
spec:
  podSelector:
    matchLabels: {}
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          environment: dev

5. 允许外部访问特定服务

  • 场景描述: 某些服务需要暴露给集群外部访问,如前端应用或 API 网关,而其他服务应仅限于集群内部访问。
  • 使用 Network Policy:
    • 使用 Network Policy,可以限制哪些 Pod 可以被外部访问,哪些只能在集群内部通信。特别是对于公共服务,可以精细控制哪些外部 IP 或 CIDR 块可以访问该服务。
    • 例如,以下策略允许来自特定 IP 地址范围的流量访问 nginx 服务:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-external-access
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: nginx
  policyTypes:
  - Ingress
  ingress:
  - from:
    - ipBlock:
        cidr: 203.0.113.0/24


6. 限制Pod的出站流量

  • 场景描述: 在某些场景中,可能需要限制 Pod 的出站流量,以确保 Pod 只能访问特定的外部服务或网络,防止数据泄露或异常流量。
  • 使用 Network Policy:
    • 通过定义 Egress 类型的 Network Policy,可以控制 Pod 允许访问的外部地址或服务。
    • 例如,以下策略限制 Pod 只能访问特定的外部服务:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: restrict-egress
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: myapp
  policyTypes:
  - Egress
  egress:
  - to:
    - ipBlock:
        cidr: 192.168.1.0/24
    - podSelector:
        matchLabels:
          app: external-service


7. 保护关键基础设施组件

  • 场景描述: 集群中的一些关键组件,如 DNS 服务、Kubernetes API Server 等,通常不应被普通 Pod 直接访问,避免潜在的安全风险。
  • 使用 Network Policy:
    • 可以为这些关键服务定义专门的 Network Policy,限制只有受信任的 Pod 才能与它们通信。
    • 例如,以下策略限制只有标记为 role=system 的 Pod 能访问 DNS 服务:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: protect-dns
  namespace: kube-system
spec:
  podSelector:
    matchLabels:
      k8s-app: kube-dns
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          role: system

8.总结

Network Policy 是 Kubernetes 中非常强大且灵活的网络安全控制工具。它可以用于各种场景,从默认隔离、限制应用间访问,到保护敏感服务、分离环境、控制出站流量等。通过合理配置 Network Policy,集群管理员可以显著提高 Kubernetes 集群的安全性和网络控制能力,确保不同应用、环境和服务之间的流量按照预期的策略进行流动。


http://www.kler.cn/a/590388.html

相关文章:

  • 微软远程桌面即将下架?Splashtop:更稳、更快、更安全的 RDP 替代方案
  • Django 5实用指南(十四)项目部署与性能优化【完】
  • 调用华为云API实现口罩识别
  • 从以太网 II 到 VLAN 和 Jumbo Frame:数据帧格式解读
  • 前端面试:如何减少项目里面 if-else?
  • 基于Python实现的结合U - Net与Transformer的神经网络用于视网膜血管分割的示例代码
  • 10 道面向 Java 开发者的 Linux 面试题及答案
  • SpringMVC响应页面及不同类型的数据,
  • Redis--补充类型
  • The Rust Programming Language 学习 (六)
  • 多元时间序列预测的范式革命:从数据异质性到基准重构
  • Elasticsearch 向量检索详解
  • 用maven生成springboot多模块项目
  • 【优化】系统性能优化步骤
  • UDP协议栈之整体架构处理
  • AI学习第二天--大模型压缩(量化、剪枝、蒸馏、低秩分解)
  • 上线后出现Bug测试该如何处理
  • Grafana 备份配置文件、数据库数据 和 仪表盘定义
  • 日语学习-日语知识点小记-构建基础-JLPT-N4N5阶段(23):たら ても
  • 3.16学习总结 java