什么是网络策略

  在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. 痞子衡嵌入式:MCUXpresso IDE下在线调试时使用不同复位策略的现象总结

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是MCUXpresso IDE下在线调试时使用不同复位策略的现象总结. 本篇实际上是<IAR在线调试时设不同复位类型可能会导致i.M ...

  2. [贪心]D. 【例题4】国王游戏

    D . [ 例 题 4 ] 国 王 游 戏 D. [例题4]国王游戏 D.[例题4]国王游戏 解析 贪心思想,考虑交换后的值比交换前的小. 然后数据规模用高精度 Code #include <b ...

  3. [Fundamental of Power Electronics]-PART II-9. 控制器设计-9.4 稳定性

    9.4 稳定性 众所周知的是,增加反馈回路可能会导致原本稳定的系统变得不稳定.尽管原变换器传递函数(式(9.1))以及环路增益\(T(s)\)不包含右半平面极点,但式(9.4)的闭环传递函数仍然可能存 ...

  4. 原生php 实现 thinkphp 数据库链式操作!!!

    https://www.bilibili.com/video/BV1v4411A74Q?p=16&spm_id_from=pageDriver 没事可以看两遍,加深一下基础知识!!!

  5. Tk 的基本概念-组件—Tkinter 教程系列03

    Tk 的基本概念-组件-Tkinter 教程系列03 前言 Tk 系列教程: Tkinter教程系列01--引言和安装Tk Tkinter教程系列02--第一个真正的 GUI 程序 通过上一节的程序实 ...

  6. Leedcode算法专题训练(动态规划)

    递归和动态规划都是将原问题拆成多个子问题然后求解,他们之间最本质的区别是,动态规划保存了子问题的解,避免重复计算. 斐波那契数列 1. 爬楼梯 70. Climbing Stairs (Easy) L ...

  7. 2021年IT行业八大趋势预测

    在新冠疫情的影响下,过去一年的IT行业产生着或多或少的变化.而今,2020年已走过一个季度,本文根据国内外一些调研机构的数据,整合了以下八条更适合国内的2021年IT行业趋势分析,希望能为相关决策者提 ...

  8. 【MySQL】若sql语句中order by指定了多个字段,则怎么排序?

    举个例子吧:order by id desc,time desc先是按 id 降序排列 (优先)如果 id 字段 有些是一样的话 再按time 降序排列 (前提是满足id降序排列)   order b ...

  9. C实现十进制与十六进制转换

    include <stdio.h> include <stdlib.h> include <string.h> include <locale.h> i ...

  10. hdu1251 hash或者字典树

    题意: 统计难题 Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量 ...