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
    
    
    

测试互访


互访测试

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

  • 创建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
    
  • 测试联通性


    添加策略后的互访

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

    外网访问测试

    - ipBlock:
        cidr: 10.20.1.0/24
    

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




     
    posted @   滴滴滴  阅读(109)  评论(0编辑  收藏  举报
    编辑推荐:
    · 开发者必知的日志记录最佳实践
    · SQL Server 2025 AI相关能力初探
    · Linux系列:如何用 C#调用 C方法造成内存泄露
    · AI与.NET技术实操系列(二):开始使用ML.NET
    · 记一次.NET内存居高不下排查解决与启示
    阅读排行:
    · 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
    · 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
    · 【自荐】一款简洁、开源的在线白板工具 Drawnix
    · 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
    · Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
    历史上的今天:
    2018-06-08 ImportError: No module named mysql 报错python引用mysql报错
    环境步骤
    点击右上角即可分享
    微信分享提示