kubernetes之NetworkPolicy

一、背景

        如果希望在OSI模型中第三层或第四层控制网络流量,则应该使用NetworkPolicy这个对象;NetworkPolicy以应用为中心,主要用来控制Pod网络流量的进入和流出

二、实例说明

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata: 
  name: network-policy-test
  namespace: luoxianming
spec: 
  podSelector: 
    matchLabels: 
      app: web
  policyTypes: 
    - Ingress
    - Egress
  ingress: 
    - from: 
        - ipBlock: 
            cidr: 172.17.0.0/16
            except: 
              - 172.17.0.0/24
        - namespaceSelector: 
            matchLabels: 
              project: luoxianming
        - podSelector: 
            matchLabels: 
              app: web
      ports: 
        - protocol: TCP
          port: 8080 
  egress: 
    - to: 
        - ipBlock: 
            cidr: 10.0.0.0/24
      ports: 
        - protocol: TCP
          port: 8080

 解释:

1) 当policyTypes中包含了Ingress和Egress,则表明:该范围的Pod是出口和入口都有进行限制,白名单是通过Ingress和egress字段,进行放行

2) 默认Pod的入口和出口都是非隔离的

3) NetworkPolicy 资源依赖于网络插件实现

4) podSelector表明使用NetworkPolicy的Pod,当podSelector为空,表明选择名称空间下素有Pod,选择的名称空间为namespace指定

三、参数解释

podSelector: 每个NetworkPolicy中都包括一个podSelector,表示一组Pod进行选择

policyTypes: 每个NetworkPolicy都包含一个policyTypes列表,其中包含Ingress或Egress或者两者兼有;表示对给定的Pod是控制Ingress还是Egress还是两者兼有

Ingress: Ingress白名单列表

egress: egress白名单列表

四、选择器 

在Ingress或egress部分中,在from或to字段部分可以定义如下四种选择器:

podSelector: 选择特定Pod

namespaceSelector: 选择特定的名称空间,应将所有Pod用于入站流量或出站流量

ipBlock: 选择特定IP,这些IP应该是集群外部IP

namespaceSelecotr和PodSelecotr: 一个指定 namespaceSelector 和 podSelector 的 to/from 条目选择特定名字空间中的特定 Pod

 4.1 选择器to和from的区别

  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          user: alice
      podSelector:
        matchLabels:
          role: client

定义Ingress, from中只有一个元素,表明只允许名称空间标签有user=Alice的并且Pod有标签Role=client的Pod连接

  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          user: alice
    - podSelector:
        matchLabels:
          role: client

 有2个元素:允许来自本地名字空间中标有 role=client 的 Pod 的连接,来自任何名字空间中标有 user=alice 的任何 Pod 的连接,采用的是“或”

4.2 拒绝所有入站流量

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-ingress
spec:
  podSelector: {}
  policyTypes:
  - Ingress

4.3 允许所有入站流量

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-all-ingress
spec:
  podSelector: {}
  ingress:
  - {}
  policyTypes:
  - Ingress

4.4 默认拒绝所有出站流量

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-egress
spec:
  podSelector: {}
  policyTypes:
  - Egress

4.5 允许所有出站流量

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-all-egress
spec:
  podSelector: {}
  egress:
  - {}
  policyTypes:
  - Egress

 五、参考文档链接

网络策略 | Kubernetes

仅做学习笔记参考使用

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值