calico网络策略

什么是网络策略 在Kubernetes平台中,要实现零信任网络的安全架构,Calico与istio是在Kubernetes集群中构建零信任网络必不可少的组件。 而建立和维护整个集群中的“零信任网络”中,网络策略的功能在操作上大致可以总结为使用资源配置模板来管理控制平面数据流。说白了讲网络策略就是用来控制Pod间流量的规则。 在Calico中如何编写网络策略 要使用网络策略就需要先了解Calico功能**:NetworkPolicy和GlobalNetworkPolicy**。 NetworkPolicy资源,简称np;是命名空间级别资源。规则应用于与标签选择器匹配的endpoint的集合。 GlobalNetworkPolicy资源,简称 gnp/gnps与NetworkPolicy功能一样,是整个集群级别的资源。 GlobalNetworkPolicy 与 NetworkPolicy资源的管理也与calico的部署方式有关,使用etcd作为存储时,资源的管理只能使用 calicoctl进行管理 NetworkPolicy与GlobalNetworkPolicy的构成 yaml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 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访问...

 ·  · 

基于混合云模式的calico部署

开始前准备 确定calico数据存储 Calico同时支持kubernetes api和etcd数据存储。官方给出的建议是在本地部署中使用K8S API,仅支持Kubernetes模式。而官方给出的etcd则是混合部署(Calico作为Kubernetes和OpenStack的网络插件运行)的最佳数据存储。 使用etcd作为calico数据存储的好处: 允许多平台混用calico,如Kubernetes OpenStack上运行Calico Kubernetes资源与Calico资源分离 一个Calico群集,该群集不仅仅包含一个Kubernetes群集,如可与多个kubernetes集群互通。 坏处: 安装步骤繁琐 无法使用Kubernetes RBAC对calico资源的控制 无法使用Kubernetes资源对calico进行管理 下载calico部署清单 text 1 curl https://docs.projectcalico.org/manifests/calico-etcd.yaml -o calico.yaml 修改Pod CIDR Calico默认的Pod CIDR使用的是192.168.0.0/16,这里一般使用与controller-manager中的--cluster-cidr 保持一,取消资源清单内的 CALICO_IPV4POOL_CIDR变量的注释,并将其设置为与所选Pod CIDR相同的值。 calico的IP分配范围 Calico IPAM从ipPool分配IP地址。修改Pod的默认IP范围则修改清单calico.yaml中的CALICO_IPV4POOL_CIDR 配置Calico的 IP in IP 默认情况下,Calico中的IPIP已经禁用,这里使用的v3.17.2 低版本默认会使用IPIP 要开启IPIP mode则需要修改配置清单内的 CALICO_IPV4POOL_IPIP 环境变量改为 always 修改secret yaml 1 2 3 4 5 6 7 8 9 10 11 # Populate the following with etcd TLS configuration if desired, but leave blank if # not using TLS for etcd....

 ·  · 

calico network cni网络方案

Calico针对容器、虚拟机的开源网络和网络安全解决方案。是纯三层的数据中心网络方案。 Calico在每一个计算节点利用Linux Kernel实现了一个高效的虚拟路由器vRouter来负责数据转发,而每个vRouter通过BGP协议负责把自己上运行的workload的路由信息向整个Calico网络内传播。(小规模部署可以直接互联 BGP full mesh,大规模下可通过指定的BGP route reflector来完成)。 这样保证最终所有的workload之间的数据流量都是通过IP路由的方式完成互联的。Calico节点组网可以直接利用数据中心的网络结构(无论是L2或者L3),不需要额外的NAT,隧道或者Overlay Network。 Calico还基于iptables还提供了丰富而灵活的网络Policy,保证通过各个节点上的ACLs来提供Workload的多租户隔离、安全组以及其他可达性限制等功能。 calico组件 在Kubernetes平台之上calico/node容器会通过DaemonSet部署到每个节点,并运行三个守护程序: Felix:用于管理路由规则,负责状态上报。 BIRD:BGP的客户端,用于将Felix的路由信息加载到内核中,同时负责路由信息在集群中的分发。 confd:用于监视Calico存储(etcd)中的配置变更并更新BIRD的配置文件。 calicoctl使用问题 text 1 Failed to create Calico API client: invalid configuration: no configuration has been provided 默认情况下,calicoctl 将使用位于的默认KUBECONFIG从 Kubernetes APIServer 读取$(HOME)/.kube/config 。 如果默认的 KUBECONFIG 不存在,或者想从指定的存储访问信息,则需要单独配置。 bash 1 2 3 export DATASTORE_TYPE=kubernetes export DATASTORE_TYPE=etcdv3 export KUBECONFIG=~/.kube/config reference for calico 安装配置 开始前准备 确定calico数据存储 Calico同时支持kubernetes api和etcd数据存储。官方给出的建议是在本地部署中使用K8S API,仅支持Kubernetes模式。而官方给出的etcd则是混合部署(Calico作为Kubernetes和OpenStack的网络插件运行)的最佳数据存储。 使用kubernetes api作为数据存储的安装 text 1 2 curl https://docs.projectcalico.org/manifests/calico.yaml -O kubectl apply -f calico....

 ·  · 

Linux虚拟网络技术

Overview 本文将介绍Kubernetes中使用的相关虚拟网络功能,目的是为了任何无相关网络背景经历的人都可以了解这些技术在kubernetes中式如何应用的。 VLAN VLAN (Virtual local area networks)是逻辑上的LAN而不受限于同一物理网络交换机上。同样的VLAN也可以将同一台交换机/网桥下的设备/划分为不同的子网。 VLAN 区分的广播域的标准是VLAN ID,此功能是Linux内核3.8中引入的 在Linux中创建一个VLAN bash 1 ip link add link eth0 name eth0.2 type vlan id 2 VETH [1] VETH (Virtual Ethernet device),是一个本地的以太网隧道,创建出的设备是成对的,通常会存在两个名称空间内,例如在docker中创建出的设备一端在root名称空间内,一端被挂在到容器的名称空间内。 图:veth topology Source:https://medium.com/@arpitkh96/basics-of-container-networking-with-linux-part-1-3a3cdc64c87a bash 1 ip link add <p1-name> type veth peer name <p2-name> Bridge 目的 Linux bridge(又称为网桥、VLAN交换机)是Linux内核中集成的功能,用来做tcp/ip做二层协议交换的设备,虽然是软件实现的,但它与普通的二层物理交换机功能一样。bridge 就是为了解决虚拟机网卡连接问题。可以添加若干个网络设备到 bridge 上作为其接口,添加到 bridge 上的设备被设置为只接受二层数据帧并且转发所有收到的数据包到 bridge 中。 由于 Linux bridge 是二层设备,故数据包是根据MAC地址而不是IP转发的。因此所有协议都可以透明地通过网桥。Linux bridge 广泛用于虚拟机,名称空间等。 图:Linux Bridge Source:https://kbespalov.medium.com/linux-linux-bridge-7e0e887edd01 MACVLAN [2] MACVLAN 允许在一个物理接口创建多个子接口,并且每个子接口都拥有一个随机生成的MAC地址,与IP地址。 MACVLAN 中子接口不能与与父接口直接通讯,例如在虚拟化环境中,容器是不能ping通宿主机的IP,如果子接口需要和父接口进行通讯,需要将子接口分配给父接口。...

 ·  · 

使用eNSP构建calico BGP网络

实验文件: [calico BGP.zip](https://cdn.jsdelivr.net/gh/cylonchau/blogs@img/img/calico BGP.zip) R1 text 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 system-view sysname R1 interface l0 ip address 1.1.1.1 32 interface g0/0/0 ip address 10.1.0.1 24 interface g0/0/1 ip address 10.3.0.1 24 bgp 100 router-id 1.1.1.1 peer 10.1.0.2 as-number 123 peer 10.3.0.2 as-number 456 dis this dis ip interface b R2 text 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 system-view sysname R2 interface l0 ip address 2....

 ·  ·