什么是网络策略

  在Kubernetes平台中,要实现零信任网络的安全架构,Calico与istio是在Kubernetes集群中构建零信任网络必不可少的组件。

  而建立和维护整个集群中的“零信任网络”中,网络策略的功能在操作上大致可以总结为使用资源配置模板来管理控制平面数据流。说白了讲网络策略就是用来控制Pod间流量的规则。

在Calico中如何编写网络策略

要使用网络策略就需要先了解Calico功能:NetworkPolicyGlobalNetworkPolicy

  NetworkPolicy资源,简称np;是命名空间级别资源。规则应用于与标签选择器匹配的endpoint的集合。

  GlobalNetworkPolicy资源,简称 gnp/gnpsNetworkPolicy功能一样,是整个集群级别的资源。

  GlobalNetworkPolicyNetworkPolicy资源的管理也与calico的部署方式有关,使用etcd作为存储时,资源的管理只能使用 calicoctl进行管理

NetworkPolicy与GlobalNetworkPolicy的构成

apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
name: allow-tcp-90
spec:
selector: app == 'envoy' # 应用此策略的endpoint
types: # 应用策略的流量方向
- Ingress
- Egress
ingress: # 入口的流量规则
- action: Allow # 流量的行为
protocol: ICMP # 流量的协议
notProtocol: TCP # 匹配流量协议不为 值 的流量
source: # 流量的来源 src与dst的匹配关系为 与,所有的都生效即生效
nets: # 有效的来源IP
selector: # 标签选择器
namespaceSelector: # 名称空间选择器
ports: # 端口
- 80 # 单独端口
- 6040:6050 # 端口范围
destination: # 流量的目标
egress: # 出口的流量规则
- action: Allow
serviceAccountSelector: # 使用与此规则的serviceAccount

NetworkPolicy使用

实例:允许6379流量可以被 role=frontend的pod访问

apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
name: allow-tcp-6379
namespace: production
spec:
selector: role == 'database'
types:
- Ingress
- Egress
ingress:
- action: Allow
metadata:
annotations:
from: frontend
to: database
protocol: TCP
source:
selector: role == 'frontend'
destination:
ports:
- 6379
egress:
- action: Allow

实例:禁止ICMP流量

apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
name: allow-tcp-90
spec:
selector: app == 'netbox'
types:
- Ingress
- Egress
ingress:
- action: Deny
protocol: ICMP
egress:
- action: Deny
protocol: ICMP

实例:禁止访问指定服务

apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
name: allow-tcp-90
spec:
selector: app == 'netbox'
types:
- Ingress
- Egress
ingress:
- action: Allow
egress:
- action: Deny
destination:
selector: app == 'envoy'

GlobalNetworkPolicy

  GlobalNetworkPolicy与NetworkPolicy使用方法基本一致,只是作用域的不同,并且可以应用很多高级的网络策略:

  GlobalNetworkPolicy 中提供了一个preDNAT的功能,是kube-proxy对Node port的端口和IP的流量DNAT到所对应的Pod中的时候,为了既允许正常的ingress流量,又拒绝其他的ingress流量,这个时候必须要在DNAT前生效,这种情况需要使用preDNAT

  preDNAT 适用的条件是,流量仅为ingress并且在DNAT之前。

reference

NetworkPolicy.spec

NetworkPolicy.spec.ingress|egress

NetworkPolicy.spec.ingress.src|dst

globalnetworkpolicy

最新文章

  1. Angular 2 最终版正式发布
  2. iOS-调试技巧
  3. svn 架设
  4. apscheduler 排程
  5. hdu 4832 Chess(dp)
  6. MSDE简介
  7. SQL Server 中大小写区分的处理
  8. ASP.NET - 上传图片方法(单张)
  9. mybatis 做 insert操作的时候返回插入的那条数据的id
  10. 免费vpn:SoftEther VPN
  11. AJAX开发技术--AJAX简介
  12. 绝世emacs配置for Ubuntu
  13. LeetCode之“字符串”:Restore IP Addresses
  14. linux虚拟机时间同步
  15. Django框架----Ajax
  16. Jmeter(三十一)Jmeter Question 之 乱码解读
  17. [转]Memcache的原理和命中率的总结
  18. 008-ant design roadhogrc 打包
  19. restfull 风格 参考 https://blog.csdn.net/jaryle/article/details/52141097
  20. 品友互动大数据平台的技术演化 https://www.sohu.com/a/191202836_99982360

热门文章

  1. 【Spring Cloud & Alibaba全栈开源项目实战】:SpringBoot整合ELK实现分布式登录日志收集和统计
  2. [Fundamental of Power Electronics]-PART II-7. 交流等效电路建模-7.4 规范电路模型
  3. 201871030106-陈鑫莲 实验二 个人项目-《D{0-1} KP 问题》项目报告
  4. 20 行简单实现一个 unstated-next 🎅
  5. IDEA 配置文件位置
  6. 哈工大LTP进阶使用-三元组事件抽取
  7. VsCode调试vue项目
  8. 三个dom xss常用tips
  9. 【动态数据源切换失败】由于事务@Transactional注解导致动态数据源切换失效的问题
  10. hdu4847 水题