什么是网络策略

  在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

calico NetworkPolicy on kubernetes的更多相关文章

  1. Kubernetes之canal的网络策略(NetworkPolicy)

    安装要求: 1.我们这里安装的是3.3的版本.kubernetes的要求: 支持的版本 1.10 1.11 1.12 2.CNI插件需要启用,Calico安装为CNI插件.必须通过传递--networ ...

  2. Calico在Kubernetes中的搭建

    一,需求 Kubernetes官方推荐的是Flannel,但是Flannel是一个overlay的网络,对性能会有一定的影响.Calico恰好能解决一下overlay网络的不足. Calico在Kub ...

  3. 如何使用Kubernetes里的NetworkPolicy

    创建一个类型为NetworkPolicy的Kubernetes对象的yaml文件. 第九行的podSelector指定这个NetworkPolicy施加在哪些pod上,通过label来做pod的过滤. ...

  4. K8S Calico

    NetworkPolicy是kubernetes对pod的隔离手段,是宿主机上的一系列iptables规则. Egress 表示出站流量,就是pod作为客户端访问外部服务,pod地址作为源地址.策略可 ...

  5. 轻松部署calico

    一.资源 官方文档 https://docs.projectcalico.org/v3.8/getting-started/kubernetes/installation/integration 二. ...

  6. kubernetes入门之skydns

    部署kubernetes dns服务 kubernetes可以为pod提供dns内部域名解析服务.其主要作用是为pod提供可以直接通过service的名字解析为对应service的ip的功能. 部署k ...

  7. 手动部署 kubernetes HA 集群

    前言 关于kubernetes HA集群部署的方式有很多种(这里的HA指的是master apiserver的高可用),比如通过keepalived vip漂移的方式.haproxy/nginx负载均 ...

  8. K8S学习笔记之二进制部署Kubernetes v1.13.4 高可用集群

    0x00 概述 本次采用二进制文件方式部署,本文过程写成了更详细更多可选方案的ansible部署方案 https://github.com/zhangguanzhang/Kubernetes-ansi ...

  9. 手动部署 kubernetes 1.9 记录

    前言 目前 kubernetes 正式版本已经到1.10版本.因为前面有大佬(漠然)已经采完坑,所以自己也试着部署 kubernetes 1.9 体验下该版本的新特性.对于前面部署的 kubernet ...

随机推荐

  1. Centos7安装maven详情以及配置

    一.maven安装: 1.获取maven下载地址: 查询maven最新版本地址:https://maven.apache.org/download.cgi 当前最新版本为maven 3.6.3    ...

  2. HTML总结篇

    一.HTML基本结构标签 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...

  3. 我的xshell配色方案,绿色/护眼/留存/备份

    [mycolor] text(bold)=e9e9e9 magenta(bold)=ff00ff text=00ff80 white(bold)=fdf6e3 green=80ff00 red(bol ...

  4. 「HTML+CSS」--自定义加载动画【009】

    前言 Hello!小伙伴! 首先非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出- 哈哈 自我介绍一下 昵称:海轰 标签:程序猿一只|C++选手|学生 简介:因C语言结识编程,随后转入计算机 ...

  5. React 错误边界组件

    这是React16的内容,并不是最新的技术,但是用很少被讨论,直到通过文档发现其实也是很有用的一部分内容,还是总结一下- React中的未捕获的 JS 错误会导致整个应用的崩溃,和整个组件树的卸载.从 ...

  6. OO第四单元——基于UML的UML解析器总结&OO课程总结

    OO第四单元--基于UML的UML解析器总结&OO课程总结 前言:一学期愉快(痛苦)的OO课程学习结束了,OO几个单元作业都各有特色,实验也各有特色,仔细回味起来,不再是单纯的敲代码(但自己还 ...

  7. 将一个字符串进行反转:将字符串中指定部分进行反转。比如“abcdefg”反转为”abfedcg”

    将一个字符串进行反转:将字符串中指定部分进行反转.比如"abcdefg"反转为"abfedcg"方式一:转换为char[] public String reve ...

  8. 比较运算规则 == 、 ===、Object.is 和 ToPrimitive 方法 [[DefaultValue]] (hint)

    1.== 相等运算符 如果 x 与 y 类型一致时规则如下: 1. 如果 x 类型为 Undefined,返回 true. 2. 如果 x 类型为 Null,返回 true. 3. 如果 x 类型为 ...

  9. Java刷题-stack

    一.getMin栈 题目描述 实现一个特殊功能的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作. 输入描述: 第一行输入一个整数N,表示对栈进行的操作总数. 下面N行每行输入一个字符串S ...

  10. spark未授权RCE漏洞

    Spark简介 spark是一个实现快速通用的集群计算平台.它是由加州大学伯克利分校AMP实验室 开发的通用内存并行计算框架,用来构建大型的.低延迟的数据分析应用程序.它扩展了广泛使用的MapRedu ...