12.基于canel的网络策略

参考文档:https://docs.projectcalico.org/v3.8/getting-started/kubernetes/

一、Calico作为网络插件提供网络功能

Calico:基于BGP网络协议来通过自动学习判定生成路由条目。

隧道方式:IPIP

路由方式:BGP

默认网段192.168.0.0/16。

二、Calico提供网络策略

1、安装部署

不同环境,使用目的不同,安装方式不同,参考官方文档

也依赖etcd,可通过api-server去写k8s的etcd,或独立部署一个etcd集群。

当使用flannel提供网络功能,calico提供策略控制时,部署如下:

[[email protected] ~]# curl https://docs.projectcalico.org/v3.8/manifests/canal.yaml -O
[[email protected] ~]# kubectl apply -f canal.yaml

2、网络策略控制

网络策略都是针对Pod的入和出,Pod级别。

创建两个namespace -- dev,prod

[[email protected] ~]# kubectl explain networkpolicy.spec
[[email protected] ~]# kubectl explain networkpolicy.spec.policyTypes    # 如果不指定此值,并且Ingress,Egress都没有定义规则,则二者都使用默认规则,一般情况下,我们会把默认规则都设置为拒绝。只需要哪一个生效,就必须显式指明,否则都会生效,没有定义策略的情况下会走到默认策略。

(1)设置ingress默认策略

默认ingress策略为拒绝所有入站请求,egress不处理。

[[email protected] networkpolicy]# kubectl apply -f ingress-def.yaml -n dev

测试:

[[email protected] networkpolicy]# kubectl apply -f pod-demo.yaml  -n dev[[email protected] networkpolicy]# kubectl apply -f pod-demo.yaml  -n prod 

此时dev名称空间访问不到,但prod可以,因为dev定义了ingress策略。

(2)设置策略为允许所有入站

测试:

[[email protected] networkpolicy]# kubectl apply -f ingress-def.yaml -n dev
[[email protected] networkpolicy]# curl 10.244.2.2 

(3)指定特定入站访问策略

允许特定网段访问标签为app=myapp的Pod的80,443端口。

[[email protected] networkpolicy]# kubectl label pods pod1 app=myapp -n dev

[[email protected] networkpolicy]# kubectl apply -f allow-netpol-demo.yaml -n dev

测试:

主机不可达是有问题的,需排查。正常被网络策略限制不可达的情况应该是无响应,挂起。

主机不可达,是因为是两个Pod在同一台节点上。具体原因待查。初步排查:部署canal时,路由被calico改变了,具体问题待确定。

(4)问题汇总

问题1:如果设置flannel的后端为Directing的VxLAN,则部署canal时应修改一下配置清单,canal.yaml默认有指定flannel后端为默认的VxLAN,之前的路由会被改变为如上图。

部署时canal.yaml会覆盖部署flannel时的clusterrole.rbac.authorization.k8s.io,删除也是。

问题2:删除重装等各种折腾,会因为之前划分的网络有缓存,出现奇奇怪怪的问题,比如路由表不全导致node不能与Pod通信,解决办法,挨个重启。网络不熟还是不要乱折腾。

[[email protected] ~]# systemctl stop kubelet
[[email protected] ~]# systemctl stop docker
[[email protected] ~]# ifconfig cni0 down
[[email protected] ~]# systemctl start kubelet
[[email protected] ~]# systemctl start docker
[[email protected] ~]# ifconfig cni0 up

并且网络重置后,之前运行的Pod都启动不了,更新不到新的网络(error: unable to upgrade connection: container not found ("myapp")),并且新建pod也是一样,具体报错如下:

解决方案:

莫名其妙自己好了。???不清楚什么情况

可能是因为刚开始装过canal,所以在/etc/cni/net.d/目录下有cnnal的配置(10-canal.conflist、calico-kubeconfig),然后集群自己去加载了,在修复过程中,找到了删除了,但是问题还是存在,没立即解决,所以不确定是不是这个问题。

问题3:

相同node的pod间不能通信,不同node的通信没有问题,现象如下:

原因分析:出现此现象是在[[email protected] canal]# kubectl apply -f canal.yaml后,之前创建的Pod在同节点仍然可以通信,但新建的pod如果在同节点就不能通信。初步判断为应用canal.yaml时,改变了集群使用的cni组件(查看新建Pod的详细信息及pod所在主机的路由表可以确认),导致新建的pod使用的网络服务是calico,所以通信存在问题。与问题2类似。具体原因需了解apply具体做了哪些操作。

[[email protected] net.d]# cd /etc/cni/net.d/
[[email protected] net.d]#  rm -f 10-canal.conflist calico-kubeconfig

删除所有节点上的canal的配置文件,再次创建Pod,不会出现上述问题。故猜测,是多种网络插件共用导致。部署时未能将两种网络插件分别使用的功能区分开(flannel提供网络服务,用calico提供网络策略),还需好好了解。

3、总结:

为了安全,我们可以设置每个名称空间拒绝所有入站、拒绝所有出站,然后单独放行;

但是这样也会有一个问题,就是同一名称空间的pod也不能通信;

所以还要加条策略就是允许本名称空间的pod之间可以互相通信(放行所有出站目标本名称空间内的所有pod),但是不允许和外部名称空间之间进行通信。

原文地址:https://www.cnblogs.com/cmxu/p/12255532.html

时间: 2024-10-08 16:34:51

12.基于canel的网络策略的相关文章

k8s基于canel的网络策略

Kubernetes能够把集群中不同Node节点上的Pod连接起来,并且默认情况下,每个Pod之间是可以相互访问的.但在某些场景中,不同的Pod不应该互通,这个时候就需要进行访问控制.亲测:在kubernetes集群中,默认可以设定NetworkPolicy资源,但是必须安装支持网络策略的插件,否则即使设置好网络策略也不会生效. calico提供了多种解决方案:        (1)使用flannel提供网络,使用calico插件提供网络策略:        (2)使用calico同时提供网络和

利用Openfiler配置基于文件系统的网络存储

一.Openfiler简介 Openfiler是一个操作系统,其提供基于文件的网络附加存储和基于块的存储区域网络功能. Openfiler支持的网络协议包括:NFS,SMB/CIFS,HTTP/WebDAV,FTP和iSCSI. Openfiler支持的网络目录包括:NIS,LDAP(支持SMB/CIFS密码加密),Active Directory(本地和混合模式),基于Windows NT的域控制器和Hesiod.认证协议包括Kerberos 5. Openfiler支持基于卷的分区技术:如本

远程访问VPN以及NPS网络策略服务

为了实现远程访问,需要搭建一台专用的远程访问服务器,该服务器同时连接内网和外网,并安装路由和远程访问服务,该服务器的内网IP地址是192.168.10.10/24,公网地址是12.0.0.1/24 Windows 7在本实验中设置为公网地址 在系统管理员账号登录,在远程访问服务器上打开"管理工具"中的"服务器管理器"窗口,选择"角色",单击"添加角色",打开"选择服务角色"的界面. 第一步:在"选

Calico网络策略实践

因为Kubernetes官方用的flannel无法实现多租户环境下的网络隔离,建立起来的pod之间实际可以相互访问,而Calico可以实现,因此周末找个时间试了一下大概的过程. 前面的kubernetes安装掠过 Calico安装 下载yaml文件 http://docs.projectcalico.org/v2.3/getting-started/kubernetes/installation/hosted/calico.yaml http://docs.projectcalico.org/v

k83 calico 网络策略

常见的CNI网络插件包含以下几种: Flannel:为Kubernetes提供叠加网络的网络插件,基于TUN/TAP隧道技术,使用UDP封装IP报文进行创建叠 加网络,借助etcd维护网络的分配情况,缺点:无法支持网络策略访问控制.Calico:基于BGP的三层网络插件,也支持网络策略进而实现网络的访问控制:它在每台主机上都运行一个虚拟路由,利用Linux内核转发网络数据包,并借助iptables实现防火墙功能.实际上Calico最后的实现就是将每台主机都变成了一台路由器,将各个网络进行连接起来

ubuntu 12.04 右上角的网络连接图标突然消失不见

某天Ubuntu右上角的网络连接图标突然消失不见了,右击panel -> add to panel -> Notification Area 也不管用,最关键的是上不了网了.可以在Network Connection里add 一个connection,但是无论如何就是无法连上网络. 网上搜了一下,下面是来自http://blog.sina.com.cn/s/blog_43bce9bb0100psz5.html的解决方法,很靠谱: sudo service network-manager sto

SpringMVC经典系列-12基于SpringMVC的文件上传---【LinusZhu】

注意:此文章是个人原创,希望有转载需要的朋友们标明文章出处,如果各位朋友们觉得写的还好,就给个赞哈,你的鼓励是我创作的最大动力,LinusZhu在此表示十分感谢,当然文章中如有纰漏,请联系[email protected],敬请朋友们斧正,谢谢. 不知不觉已经把Spring的基础部分讲解完了,所讲述的都是在项目中经常用到的东西,是经得住考验的,接下来的部分主要是要讲述使用SpringMVC进行的文件上传.处理Ajax请求.自定义拦截器功能的实现,不多说了,首先讲解文件上传部分,开始--     

网络策略服务器

TechNet 库 Windows Server Windows Server 2008 R2 und Windows Server 2008 按类别提供的 Windows Server 内容 按类别提供的 Windows Server 2008 R2 内容 已安装的 Windows Server 2008 R2 产品帮助 Network Policy and Access Services 网络策略服务器 网络策略服务器概述 NPS 和防火墙 NPS 模板 NPS 中的策略 在 Active

12月上旬息壤网络域名总量净减722个 份额不足1%

IDC评述网(idcps.com)12月31日报道:根据WebHosting.info最新数据显示,截止至2014年12月15日,息壤网络域名总量减少至87,967个.在12月上旬期间(2014-12-02至2014-12-15),下降趋势明显,且降速加快,共净减722个,而国内份额不足1%.由此可知,其未来发展形势不甚乐观. (图1)12月上旬息壤网络域名注册量走势 根据图1,可知在12月上旬,息壤网络域名总量下降趋势明显,且降速有增快之势.下面,请与IDC评述网一同关注相关具体数据. (图2