十九. Kubernetes NetworkPolicy 网络隔离策略

NetworkPolicy用于在Kubernetes中实现网络策略隔离,通过podSelector选择特定Pod,并定义Ingress和Egress规则,控制Pod的出入站流量。例如,允许来自特定标签或命名空间的Pod,以及指定CIDR范围的IP访问。注意,不同云供应商和网络插件可能影响NetworkPolicy的实际效果。
摘要由CSDN通过智能技术生成

一. NetworkPolicy 基础解释

  1. 官方文档
  2. NetworkPolicy 网络策略(网络隔离策略): k8s中资源是通过命名空间隔离的,但是为了保证k8s的网络互通性,是没有做隔离的,防止调用错误,例如测试环境请求到了生产服务等问题,可以通过NetworkPolicy定义网络策略
  3. 通过NetworkPolicy可以精确到pod设置网络隔离,基于pod的标签,NameSpace, CIDR进行隔离(默认情况下Pod 都是非隔离的)
  4. 实际可以理解成编写NetworkPolicy的yaml,内部使用选择器选中指定pod,对选中的pod设置网络策略,限制被选中的pod允许哪些资源访问,限制被选中的pod可以访问哪些资源
  5. 一个NetworkPolicy的yaml示例与解释
  1. “kind: NetworkPolicy”: 当前资源时NetworkPolicy
  2. 通过podSelector设置选择器,设置选中哪些pod,针对选中的pod编写网络策略
  3. “policyTypes”: 有两个值"Ingress" 入站策略与"Egress"出站策略
  4. “ingress”: 在该字段下编写入站策略,也就是被选中的pod允许哪些资源访问
  5. “egress”: 在该字段下编写出站策略,也就是被选中的pod可以访问哪些资源
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: networkpol-01
  namespace: default
spec:
  podSelector:  #pod选择器
    matchLabels:
       app: canary-nginx  #使用标签选中pod,限制被选中的pod的访问
  policyTypes: 
    - "Ingress"
    - "Egress"  
  ingress: #入站白名单(当前被选中的pod允许哪些资源访问)
  - from: 
      - podSelector: #通过pod选择器同命名空间下的运行访问pod
          matchLabels:
            name: busybox   ## busybox 可以得到 canary-nginx 的内容
      - namespaceSelector: #通过命名空间选择器选中允许访问的资源有哪些
          matchLabels:
            kubernetes.io/metadata.name: hello ## 这个hello名称空间的可以访问 canary-nginx 的内容
      - ipBlock: #CIDR方式指定允许访问的资源有哪些
          cidr: "192.168.0.0/16" ## 默认 从 192.168.0.0 - 192.168.255.255 都能访问这个Pod
          except: ## 排除指定范围
            - "192.168.1.0/24"  ## 192.168.1.0-192.168.1.255  不能访问

      ### 两个 - ,代表并集(或者)
      ### 一个 - ,代表交集(且)
    ports:
      - port: 80 #监听端口
  egress: ## 出站白名单,也就是当前通过"canary-nginx"选中的pod能给访问哪些资源
  - to:  
      - namespaceSelector:
          matchLabels:
            kubernetes.io/metadata.name: hello  ## app: canary-nginx 能访问hello名称空间的所有
    ports:
      - port: 80 #监听端口
  1. to和from选择器的行为:NetworkPolicy 的 spec.ingress.from 和 spec.egress.to 字段中,都可以指定 4 种类型的标签选
    择器
  1. podSelector 选择与 NetworkPolicy 同名称空间中的 Pod 作为入方向访问控制规则的源或者出方向访问控制规则的目标
  2. namespaceSelector 选择某个名称空间下所有的Pod作为入方向访问控制规则的源或者出方向访问控制规则的目标
  3. namespaceSelector 和 podSelector 在一个 to / from 条目中同时包含 namespaceSelector 和podSelector 将选中指定名称空间中的指定 Pod。此时请特别留意 YAML 的写法
  4. ipBlock 可选择 IP CIDR 范围作为入方向访问控制规则的源或者出方向访问控制规则的目标。这里应该指定的是集群外部的 IP,因为集群内部 Pod 的 IP 地址是临时分配的,且不可预测
  1. 集群的入方向和出方向网络机制通常需要重写网络报文的 source 或者 destination IP。kubernetes 并未定义应该在处理 NetworkPolicy 之前还是之后再修改 source / destination IP,因此,在不同的云供应商、使用不同的网络插件时,最终的行为都可能不一样。这意味着
  1. 对于入方向的网络流量,某些情况下,你可以基于实际的源 IP 地址过滤流入的报文;在另外一些情况下,NetworkPolicy 所处理的 “source IP” 可能是 LoadBalancer 的 IP 地址,或者其他地址
  2. 对于出方向的网络流量,基于 ipBlock 的策略可能有效,也可能无效
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值