calico

kubernetes提供了namesapce,用来做多租户隔离,但是如果不配置网络策略,namespace的隔离也仅仅是作用于在kubernetes编排调度时的隔离,实际上不同namespace下的pod还是可以相互串通的。此时就需要使用Kubernetes提供的networkPolicy,用于隔离不同租户的应用并减少攻击面。networkpolicy通过标签选择器来模拟传统的网络物理隔离,并通过不同的策略完成访问方向的管控。

环境

  • Kubernetes 1.10.2
  • Calico 3.1.0

步骤

calico 预先已部署完毕,参考官网即可,没有特殊配置

(下述代码中类似的均只写一份)

  1. 创建两个namespace: test1-ns test2-ns

    test1-ns.yml

apiVersion:v1
kind: Namespace
metadata:
  name: test1-ns
  labels:
    project: test1-ns
  1. 分别在两个namespace下创建pod: test1.yml test2.yml

    test1.yml

    apiVersion: apps/v1beta1
    kind: Deployment
    metadata:
      name: test1
      namespace: test1-ns
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: test1
      template:
        metadata:
          name: test1
          labels:
            app: test1
            project: test1-ns
        spec:
          containers:
          - name: test1
            image: hub.xxxxxxxx.com.cn/private/caiyt/hello:1.0.0
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 8080
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: test1
      namespace: test1-ns
    spec:
      selector:
        app: test1
      type: NodePort
      ports:
         - name: test1-http
         port: 8080
         targetPort: 8080
         nodePort: 30451
    
    
    
  1. 测试互访


     
    互访测试

    目前可以看到,test1和test2是可以互相连通的

  2. 创建networkPolicy.yml

    apiVersion: networking.k8s.io/v1
    metadata:
      name: test
      namespace: test1-ns
    spec:
      podSelector:
        matchLabels:
          project: test1-ns
      ingress:
      - from:
        - namespaceSelector:
            matchLabels:
              project: test1-ns
    
  3. 测试联通性


     
    添加策略后的互访

因为针对test1的namespace做了策略限制,可见到由其他的命名空间中的pod无法访问test1-ns中的pod,但是反向即可。

  1. 外网访问测试

    - ipBlock:
        cidr: 10.20.1.0/24
    

    添加calico所创建tunl0@NONE网段访问策略后,外网访问可成功


     



 
posted @ 2021-06-08 20:42  滴滴滴  阅读(94)  评论(0编辑  收藏  举报