网络策略的作用

Contiv可以通过网络策略来限制容器之间的访问行为,以实现用户对安全性的方面的要求。比如,我可以限制容器仅对源IP在特定范围的其他容器开放特定的端口,而拒绝其他IP地址的容器的访问。

搭建过程

环境准备

参考Cisco思科网络插件Contiv (一) 环境部署搭建环境,由于本文并不关注Contiv网络的跨主机特性,因此只在一台宿主机上启动master进程和plugin进程就够了。

创建 contiv 网络
root@node-1:/home/yc/workspace# netctl --netmaster http://172.16.112.128:9999 network create --subnet=10.100.100.1/24 contiv-net
Creating network default:contiv-net

创建网络 contiv-net,指定子网范围是10.100.100.1/24

创建 Policy
root@node-1:/home/yc/workspace# netctl --netmaster http://172.16.112.128:9999  policy create web-policy
Creating policy default:web-policy

创建名为web-policyPolicyPolicy的名字在租户(tenant)的命名空间(namespace)是唯一的,这里没有指定tenant参数, 因此使用的是** default **租户

添加 rule

Policy创建后是空的,我们还需要为Policy添加规则(rule). 一个Policy可以包含多个rule,最终的行为也是这些rule的叠加。每条rule包含以下信息:

  • match criteria匹配规则,定义了rule的入口条件,满足匹配规则的报文将执行设定的行为action, 匹配条件包括protocolportip-address
    protocol可选参数为TCPUDPICMP
    port为需要允许或禁止的端口号
    ip-address为出方向流量的目的IP,或者入方向流量的源IP
  • direction 可选参数为inboundoutbound,分别代表入方向和出方向的规则
  • action 可选参数为allowdeny
  • priority指定该** rule 的优先级,默认是1**,数值越大的rule优先级越高
  • from-group 设置rule生效的EndPoint组的名字(入方向)
  • to-group 设置rule生效的EndPoint组的名字(出方向)
  • from-network 设置rule生效的network的名字(入方向)
  • to-network 设置rule生效的network的名字(出方向)

举例来说,我们要为我们的httpd容器设定以下行为:

  • 容器属于 groupA,开放tcp/80端口
  • 只允许属于 groupB 的容器访问tcp/80端口

首先创建 groupAgroupB

root@node-1:/home/yc/workspace# netctl --netmaster http://172.16.112.128:9999  group create contiv-net groupA -policy=web-policy
Creating EndpointGroup default:groupA
root@node-1:/home/yc/workspace# netctl --netmaster http://172.16.112.128:9999  group create contiv-net groupB -policy=web-policy
Creating EndpointGroup default:groupB

创建 rule 1, 设置deny所有对tcp/80端口的访问

root@node-1:/home/yc/workspace# netctl --netmaster http://172.16.112.128:9999  policy rule-add web-policy 1 -direction=in -protocol=tcp -port=80 -action=deny

创建 rule 2, 设置allow groupBtcp/80端口的访问

root@node-1:/home/yc/workspace# netctl --netmaster http://172.16.112.128:9999  policy rule-add web-policy 1 -direction=in -protocol=tcp -port=80 -action=deny

查看设置的rule

root@node-1:/home/yc/workspace# netctl --netmaster http://172.16.112.128:9999  policy rule-ls web-policy
Incoming Rules:
Rule  Priority  From EndpointGroup  From Network  From IpAddress  To IpAddress  Protocol  Port  Action
----  --------  ------------------  ------------  ---------       ------------  --------  ----  ------
1     1                                                                         tcp       80    deny
2     10        groupB                                                          tcp       80    allow
Outgoing Rules:
Rule  Priority  To EndpointGroup  To Network  To IpAddress  Protocol  Port  Action
----  --------  ----------------  ----------  ---------     --------  ----  ------
启动 httpd 容器
root@node-1:/home/yc/workspace# docker run -itd --net=groupA --name=http-server httpd
4af399efa8646001599a3345231c5c34026139c5e2fd9012e1cdeff4b9dde71b

启动名为http-server的容器,指定使用的网络为groupA,启动后通过docker network inspect命令可以看到容器分配的IP10.100.100.1

root@node-1:/home/yc/workspace# docker network inspect groupA
[{"Name": "groupA","Id": "20bcf90e8be6bb9c0dd4a5bcfdfa1812a91aab9bef137f60747b3ccc8602227a","Created": "2018-09-30T09:12:58.292952948-07:00","Scope": "global","Driver": "netplugin","EnableIPv6": false,"IPAM": {"Driver": "netplugin","Options": {"group": "groupA","network": "contiv-net","tenant": "default"},"Config": [{"Subnet": "10.100.100.0/24"}]},"Internal": false,"Attachable": true,"Ingress": false,"ConfigFrom": {"Network": ""},"ConfigOnly": false,"Containers": {"4af399efa8646001599a3345231c5c34026139c5e2fd9012e1cdeff4b9dde71b": {"Name": "http-server","EndpointID": "935a57e40dc4d508cc254e6abe0b6b9ee5ae0a7dca7ec843c9dff146c8c5d859","MacAddress": "02:02:0a:64:64:01","IPv4Address": "10.100.100.1/24","IPv6Address": ""}},"Options": {"encap": "vxlan","pkt-tag": "2","tenant": "default"},"Labels": {}}
]
启动 busybox 容器,访问httpd

启动两个busybox容器, 分别指定使用groupAgroupB网络, 尝试访问httpd容器的tcp/80端口

root@node-1:~# docker run -it --net=groupA --name=bbox-A busybox
/ #
/ # wget http://10.100.100.1:80
Connecting to 10.100.100.1:80 (10.100.100.1:80)
wget: can't connect to remote host (10.100.100.1): Connection timed out
/ #
root@node-1:~# docker run -it --net=groupB --name=bbox-B busybox
/ #
/ # wget http://10.100.100.1:80
Connecting to 10.100.100.1:80 (10.100.100.1:80)
index.html           100% |***************************************************************************************************************************|    45  0:00:00 ETA
/ #

可见, bbox-B可以访问httpd容器的tcp/80端口, 而bbox-A不能, 即Policy生效

Cisco思科网络插件Contiv (四) 网络策略实践相关推荐

  1. 企业运维实战--k8s学习笔记 k8s网络通信、Flannel vxlan模式简介、calico网络插件替换、网络策略范例总结

    1.k8s网络通信 k8s通过CNI接口接入其他插件来实现网络通讯.目前比较流行的插件有flannel,calico等. CNI插件存放位置:# cat /etc/cni/net.d/10-flann ...

  2. 阿里云容器服务cni网络插件terway非官方网络性能测试

    作者:张荣滨,酷划在线后端架构师,关注微服务治理,容器化技术,Service Mesh等技术领域 terway网络性能测试 酷划在线成立于2014年,是国内激励广告行业的领军者.酷划致力于打造一个用户 ...

  3. Cisco思科网络插件Contiv (一) 安装

    什么是Contiv Contiv (官网)是一个用于跨虚拟机.裸机.公有云或私有云的异构容器部署的开源容器网络架构.作为业界最强大的容器网络架构,Contiv具有2层.3层.overlay和ACI模式 ...

  4. 云原生|kubernetes|网络插件flannel二进制部署和calico的yaml清单部署总结版

    前言: 前面写了一些关于calico的文章,但感觉好像是浅尝辄止,分散在了几篇文章内,并且很多地方还是没有说的太清楚云原生|kubernetes|kubernetes的网络插件calico和flann ...

  5. k8s网络基础学习-Calico网络插件

    第十课 k8s网络基础学习-Calico网络插件 tags: k8s网络 calico proxy arp bgp full mesh bgp RR 文章目录 第十课 k8s网络基础学习-Calico ...

  6. Kubernetes — CNI 网络插件规范

    目录 文章目录 目录 CNI CNI 规范 CNI Plugin Main 插件 Bridge 插件 HOST-DEVICE MACVLAN 第三方网络插件 CNI 使用的 I/O 接口虚拟化 CNI ...

  7. K8s网络插件Flannel,Calico

    文章目录 一.K8s网络插件flannel与calico 1. k8s网络解决方案 容器虚拟化网络方案 基于隧道 基于路由 2. CNI(容器网络接口) flannel与calico 选型比较 3. ...

  8. 思科系统公司以IP网络为中心的视频监视系统

    概述 视频监视几十年来一直是许多机构的安全部门的关注要点之一.作为一个应用,视频监视通过以下功能,无数次地证明了它的价值和优势: 实时监控机构的环境.人员和资产 录制活动以便日后调查.作为法规遵从性的 ...

  9. cilium插件测试_Cilium网络概述

    K8s已经成为一线大厂分布式平台的标配技术.你是不是还在惆怅怎么掌握它?来这里,大型互联网公司一线工程师亲授,不来虚的,直接上手实战,3天时间带你搭建K8s平台,快速学会K8s,点击下方图片可了解培训 ...

最新文章

  1. python序列类型-python序列类型包括哪三种
  2. 12.混淆——介绍,傅里叶变换抽样对,采样和重建_1
  3. 使用ffmpeg来探测GB28181的ps流
  4. 今天我们谈一下HTML标签中的map标签的用法和使用场景
  5. 关于成型滤波器实现方式的简单比较
  6. 欧美优秀博客集锦 注:(私人收藏而已)
  7. 用户态网络协议栈-OFP-网络框架分享
  8. HTTPS加密网站,地址重写配置
  9. [电脑问题1]Microsoft Visual Basic运行时错误‘-2147221164’:没有注册类
  10. 导入多段落文档排版计算机作业,2011级计算机基础操作Word作业说明_论文排版.pdf...
  11. 数字 IC 技能拓展(22)原码、反码、补码、移码的区别与联系
  12. buuoj BJDCTF-2nd WP
  13. woo语言如何使用即时交互控制台 woo --run_console/ woo --rc 来绘制复杂图形和运行即时命令行
  14. 李佳琦10月24日美妆节预告,李家琦双十一预告每日更新
  15. windows python3 bz2怎么安装_正确地建造本地Python3,用bz2支持
  16. 斯坦福大学(吴恩达) 机器学习课后习题详解 第一周 线性代数
  17. adb 静默安装_Android ROOT下静默安装并打开APP
  18. 小程序订阅消息和公众号模板消息
  19. 【每日英语】2021-03-01
  20. Python爬虫获取数据保存到数据库中(超级详细,保证一看就会)

热门文章

  1. 蓝帽杯2022年半决赛 writeup(附取证题目+解压密码+附件)
  2. 计算机会计信息系统中凭证日期应该是,会计信息系统期末处理难点解析
  3. 标准误,标准差,置信区间分不清?派森诺教你画误差线
  4. 引入组件vue可以正常解析,vscode 报错
  5. PreScan快速入门到精通第三十六讲PreScan中使用车道线传感器
  6. uniapp进度条及下载单位转换
  7. Matlab中/与\区别
  8. 车号粤 A75M79 少收我钱的的哥(谨表谢意!)
  9. Smartbi带你了解“更智能”的透视分析
  10. 2021高考枣庄八中成绩查询,2021年枣庄高考状元是谁分数多少分,历年枣庄高考状元名单...