Calico网络策略

注:本文基于Calico v3.20.1版本编写

1 calico网络策略

相比于k8s网络策略,calico网络策略对其进行了扩展,能支持更多的功能,比如可以对流量进行allow, deny, log, pass,而在k8s网络策略中只能对匹配的流量进行allow,而deny只能通过default的方式,灵活度不够。

2 deny所有pod的流量互通

和k8s网络策略一样,我们也先将所有pod的流量禁止掉,作为一个default行为。

应用calico网络策略前,记得先把k8s网络策略删除,虽然两者可以混合使用,但是为了比较直观了解功能,我们仅部署calico网络策略。

kubectl delete networkpolicy --all

我们依然针对default namespace来说明,

apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
  name: default-deny
  namespace: default
spec:
  selector: all()
  types:
  - Ingress
  - Egress

和k8s策略相比,主要有两个不同,

  • api使用的是calico接口
  • 选择器使用的是selector,相比于k8s的podSelector,适用范围更广

由于使用的是calico接口,因此我们创建该网络策略时需要使用calicoctl命令,而不是kubectl,不然就会无法识别该资源,

[root@master network-policy]# kubectl apply -f default-deny.yml 
error: unable to recognize "default-deny.yml": no matches for kind "NetworkPolicy" in version "projectcalico.org/v3"
[root@master network-policy]# calicoctl apply -f default-deny.yml 
Successfully applied 1 'NetworkPolicy' resource(s)
[root@master network-policy]# calicoctl get networkpolicy
NAME           
default-deny   

我们在default namespace下创建两个pod,做个ping测试,

[root@master ~]# kubectl get pod -o wide
NAME                      READY   STATUS    RESTARTS   AGE   IP               NODE    NOMINATED NODE   READINESS GATES
centos-6dc54              1/1     Running   2          45d   10.244.166.187   node1   <none>           <none>
centos-tsh95              1/1     Running   1          45d   10.244.104.29    node2   <none>           <none>
[root@centos-6dc54 /]# ping 10.244.104.29
PING 10.244.104.29 (10.244.104.29) 56(84) bytes of data.
^C
--- 10.244.104.29 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1001ms

可见,deny策略是有生效的。

3 开启与某个pod的互通

将上面两个pod打上标签

[root@master network-policy]# kubectl label pod centos-6dc54 color=green
pod/centos-6dc54 labeled
[root@master network-policy]# kubectl label pod centos-tsh95 color=yellow
pod/centos-tsh95 labeled
[root@master network-policy]# kubectl get pod --show-labels
NAME                      READY   STATUS    RESTARTS   AGE     LABELS
centos-6dc54              1/1     Running   1          24d     app=centos,color=green,controller-revision-hash=69f7b95f44,pod-template-generation=1
centos-tsh95              1/1     Running   1          24d     app=centos,color=yellow,controller-revision-hash=69f7b95f44,pod-template-generation=1

和之前一样,因为两个pod在同一个命名空间,因此两个pod都需要开放网络策略,

kind: NetworkPolicy
apiVersion: projectcalico.org/v3
metadata:
  name: allow-same-namespace-green
  namespace: default
spec:
  selector: color == 'green'

  ingress:
  - action: Allow
    protocol: TCP
    source:
      selector: color == 'yellow'

  egress:
  - action: Allow
    protocol: TCP
    source:
      selector: color == 'green'
    destination:
      ports:
        - 9999
kind: NetworkPolicy
apiVersion: projectcalico.org/v3
metadata:
  name: allow-same-namespace-yellow
  namespace: default
spec:
  selector: color == 'yellow'

  ingress:
  - action: Allow
    protocol: TCP
    source:
      selector: color == 'green'
    destination:
      ports:
        - 9999

  egress:
  - action: Allow
    protocol: TCP
    source:
      selector: color == 'yellow'

这时候我们测试ping,会发现还是不通,但是通过tcp连接是通的,因为只针对TCP进行了放行。

[root@centos-6dc54 /]# ping 10.244.104.29
PING 10.244.104.29 (10.244.104.29) 56(84) bytes of data.
^C
--- 10.244.104.29 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1000ms

[root@centos-6dc54 /]# nc 10.244.104.29 9999

ls
hi
^C

4 calico与k8s网络策略的差异

  • api接口不同
  • calico支持更多action,比如Deny, Log, Pass
  • calico支持支持更多协议匹配,比如ICMP,以及1-255的协议
  • calico支持policy优先级
  • calico支持更丰富的selector,比如namespaceSelector,serviceAccounts等
  • calico支持更广的对象,除了pod,还能应用在VM和host interfaces上

参考文档:

  1. https://docs.projectcalico.org/reference/resources/networkpolicy
  2. https://projectcalico.docs.tigera.io/reference/resources/networkpolicy
  3. https://docs.projectcalico.org/security/calico-network-policy
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值