十九、基于canel的网络策略

说明

Calico的官方地址:https://docs.projectcalico.org/v3.8/getting-started/kubernetes/installation/flannel
安装canel之前需要注意
如果您使用的是pod CIDR 10.244.0.0/16,请跳至下一步。如果您使用的是其他pod CIDR,请使用以下命令设置一个名为POD_CIDR包含pod CIDR 的环境变量,并使用pod CIDR替换10.244.0.0/16清单。
POD_CIDR="<your-pod-cidr>" \
sed -i -e "s?10.244.0.0/16?$POD_CIDR?g" canal.yaml

1.拉取资源清单

wget https://docs.projectcalico.org/v3.8/manifests/canal.yaml

2.创建canal

因为某种不可藐视的原因可能无法拉取镜像,需要提前把镜像准备好(所有节点都准备)

kubectl apply  -f canal.yaml 

3.canal的规则示例

在这里插入图片描述

这里的Ingress跟ingress规则不同,这里指的是通信流量,podselecto表示pod标签选择器,那么我们就可以让一组pod作为整体设置规则

NetworkPolicy在命令行中可以简写为netpol

(1)dev空间下的所有pod拒绝所有人访问

piVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all-ingress
  namespace: dev             #在那个命名空间下表示针对那个命名空间下的某些资源
spec:
  podSelector: {} #pod选择器设置为空,表示选择所有pod,即控制整个名称空间
  policyTypes:
  - Ingress #表示只对ingress生效,但是我们上面又把podSelector设置为空,表示默认是ingress拒绝所有的
    #但是我们这里面又没有加egress,所以默认egress是允许所有的

(2)允许别人访问dev命名空间下所有pod

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all-ingress
  namespace: dev
spec:
  podSelector: {} #pod选择器设置为空,表示选择所有pod,即控制整个名称空间
  ingress:
  - {}        #这样就表示所有放行
  policyTypes:
  - Ingress #表示只对ingress生效,但是我们上面又把podSelector设置为空,表示>默认是ingress拒绝所有的
    #但是我们这里面又没有加egress,所以默认egress是允许所有的

(3)dev空间下标签是app:nginx的pod允许10.244.0.0/16来访问80端口拒绝10.244.10.2/24

kubectl explain  NetworkPolicy.spec.ingress.from
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all-ingress
  namespace: dev
spec:
  podSelector: 
    matchLabels:
      app: nginx
  ingress:
  - from: 
    - ipBlock:             #放行IP,也可以写namespaceSelector,podSelector
        cidr: 10.244.0.0/16  
        except:            #排除掉某个IP或者子网
        - 10.244.10.2/24
    ports:
    - protocol: TCP       #TCP
      port: 80           #80端口

(4)允许dev空间下所有标签为app:nginx的pod访问所有

出站与入站是类似的就是ingress和egress的区别

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all-ingress
  namespace: dev
spec:
  podSelector:
    matchLabels:
      app: nginx
  egress:
  - {}
  policyTypes:
  - Egress

(5)访问策略大概思路

①设置规则的时候需要想到,如果针对于一个名称空间下的pod设置来说,需要注意同一空间是否可以通信
网络策略:
   名称空间:
②拒绝所有出站,入站;
③放行所有出战目标本名称空间内的所Pod
2和3执行以后同一个命名空间基本没问题,跨命名空间就需要额外设置
④根据具体的需求来设置ingress和egress,难点在于需求

猜你喜欢

转载自blog.csdn.net/qq_26489043/article/details/112506320