Kubernetes能够把集群中不同Node节点上的Pod连接起来,并且默认情况下,每个Pod之间是可以相互访问的。但在某些场景中,不同的Pod不应该互通,这个时候就需要进行访问控制。
亲测:在kubernetes集群中,默认可以设定NetworkPolicy资源,但是必须安装支持网络策略的插件,否则即使设置好网络策略也不会生效。

calico提供了多种解决方案:
        (1)使用flannel提供网络,使用calico插件提供网络策略;
        (2)使用calico同时提供网络和策略;
        (3)仅使用calico提供网络策略;
        。。。
        flannel并不能对集群中网络提供网络策略功能,但是并没有必要卸载flannel单独安装calico。
        多数情况下,我们使用calico提供的第一种解决方案,只需要安装calico的网络策略功能插件即可。
    
        我们使用第一种,让flannel提供网络功能,calico提供网络策略功能:
        有两种安装方式:1.使用kubernetes的etcd存储栈;
                                     2.单独创建专门用于canal插件的etcd存储栈;
        一般使用基于Kubernetes API的etcd存储栈,而且是官方推荐的方案。

官网:https://docs.projectcalico.org

安装:
    (1)安装calico的canal插件:
             curl https://docs.projectcalico.org/v3.7/manifests/canal.yaml -O
    (2)如果您使用的是pod cidr 10.244.0.0/16,请跳到下一步。如果您使用的是不同的pod cidr,请使用以下命令来设置包含pod cidr的环境变量pod cidr,并将清单中的10.244.0.0/16替换为pod cidr。
            POD_CIDR="<your-pod-cidr>" \
            sed -i -e "s?10.244.0.0/16?$POD_CIDR?g" canal.yaml  
    (3)部署canal插件:
            kubectl apply -f canal.yaml
        使用kubectl get pods -n kube-system中查看安装进程。

安装完成后,即可编写networkPolicy的资源清单。

NetworkPolicy的配置清单编写:
        NetworkPolicy是kubernetes集群中标准的资源,所以书写格式和其他资源的清单差不多。
            主要字段:

 apiVersion: Networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name:
namespace:
spec:
egress: ##出站规则。不写则按默认允许所有出站;
ingress: ##入站规则。不写则按默认不允许所有入站;
podSelector: ##必写字段。不写则策略将应用在所在的命名空间下的所有资源;
policyTypes: ##策略类型:egress或ingress或无或搭配;              

例:禁止所有入站:

 apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all-ingress
spec:
podSelector: {}
policyTypes:
- Ingress

例:允许所有出站:

 apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-all-egress
spec:
podSelector: {}
egress:
- {}
policyTypes:
- Egress

   例:允许特定的访问流量

 apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-myapp-policy
spec:
podSelector:
matchLabels:
app: myapp ##标签为app=myapp允许入站访问。
ingress:
- from:
- ipBlock: ##地址段。
cidr: 10.244.0.0/ ##允许这个地址段访问。
except: ##以下地址不可以访问。
- 10.244.1.2/
ports:
- port: ##只允许访问80端口。
protocol: TCP

例:指定pod标签访问

    我们要对namespace为dev,带有"role: backend"标签的所有pod进行访问控制:只允许标签为"role: frontend"的Pod,并且TCP端口为80的数据流入,其他流量都不允许。

 apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: all-frontend
spec:
podSelector:
matchLabels:
role:backend
ingress:
- from:
- podSelector:
matchLabels:
role: frontend
ports:
- protocol: TCP
port:

例:指定namespaces标签访问
               我们要对标签为"role=frontend"的所有Pod进行访问控制:只允许namespace标签为"user=smbands"的各Pod,并且TCP端口为443的数据流入,其他流量都不允许。

 apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-tcp-
spec:
podSelector:
matchLabels:
role: frontend
ingress:
- ports:
- protocol: TCP
port:
from:
- namespaceSelector:
matchLabels:
user: smbands

k8s基于canel的网络策略的更多相关文章

  1. Kubernetes 学习19基于canel的网络策略

    一.概述 1.我们说过,k8s的可用插件有很多,除了flannel之外,还有一个流行的叫做calico的组件,不过calico在很多项目中都会有这个名字被应用,所以他们把自己称为project cal ...

  2. kubernetes学习笔记之十三:基于calico的网络策略入门

    一..安装calico [root@k8s-master01 ~]# kubectl apply -f https://docs.projectcalico.org/v3.3/getting-star ...

  3. k8s之网络插件flannel及基于Calico的网络策略

    1.k8s网络通信 a.容器间通信:同一个pod内的多个容器间的通信,通过lo即可实现; b.pod之间的通信:pod ip <---> pod ip,pod和pod之间不经过任何转换即可 ...

  4. k8s系列---基于canal的网络策略

    文章拷自:http://blog.itpub.net/28916011/viewspace-2215383/ 加上自己遇到的问题简单记录 安装文档:https://docs.projectcalico ...

  5. canel的网络策略

    资源: https://docs.projectcalico.org/v3.2/getting-started/kubernetes/installation/flannel 基于pod Egress ...

  6. k8s-基于canel的网络策略-十九

    一.前提 上一节学习了flannel,但是我们应该了解flannel只能提供网络通讯,而不能提供网络策略.因此,我们本节学习canal,让它来提供网络策略,来配合flannel使用. canal是ca ...

  7. 041.Kubernetes集群网络-K8S网络策略

    一 Kubernetes网络策略 1.1 策略说明 为实现细粒度的容器间网络访问隔离策略,Kubernetes发布Network Policy,目前已升级为networking.k8s.io/v1稳定 ...

  8. Kubernetes学习之路(二十一)之网络模型和网络策略

    目录 Kubernetes的网络模型和网络策略 1.Kubernetes网络模型和CNI插件 1.1.Docker网络模型 1.2.Kubernetes网络模型 1.3.Flannel网络插件 1.4 ...

  9. eBPF Cilium实战(1) - 基于团队的网络隔离

    在 Rainbond 集群中,每个团队对应于底层 Kubernetes 的一个 Namespace ,由于之前使用的底层网络无法进行 Namespace 级别的网络管理,所以在 Rainbond 同一 ...

随机推荐

  1. cmd 中粘贴复制(转)

    1 如右图,右键命令提示符窗口的标题栏,选择属性. 2 选择“编辑选项”里的“快速编辑模式”,并确定之: 3 在弹出的应用选择提示框上选择“保存属性,供以后具有相同标题的窗口使用”: 4 如此你就可以 ...

  2. net core 中间件管道

    net core 中间件管道 .net core 管道(Pipeline)是什么? 由上图可以看出,.net core 管道是请求抵达服务器到响应结果返回的中间的一系列的处理过程,如果我们简化一下成下 ...

  3. (转)useradd用户,组管理案例

    原文:https://www.cnblogs.com/Csir/p/6403830.html?utm_source=itdadao&utm_medium=referral 示例:要求oldbo ...

  4. 关于C#解析shp文件

    最近在做项目时,要求可以上传shp文件到指定的地图中,地图开发使用的arcgisapi,网上找了好多解析shp文件的js,但都不是太理想,直到群里的小伙伴提到Gdal 首先,到GDAL官网下载自己使用 ...

  5. Control中的AOP实现非业务需求

    一.能够使用Control中的AOP实现非业务需求的功能 本文目录 一.ActionFilterAttribute类 二.实现自定义Attribute 一.ActionFilterAttribute类 ...

  6. 《C#高效编程》读书笔记01-使用属性而不是可访问的数据成员

    在需求变更中,属性比数据成员更容易修改,例:客户对象不该与空白名称,若你使用公有属性封装Name,那么现在修改一处,而数据成员则可能要修改多处 public class Customer { priv ...

  7. 在 cell 中获取 textFlied内容的使用

    当您读到这里时,建议先下载demo,不懂再参考博客.在iOS项目开发中,容易遇到各种个人信息填写.比如微信中设置个人信息,等.这种方式是进行控制器跳转,代理或者block传值,这种比较容易,符合常规的 ...

  8. ABAP EXCEPTION

    CX_ROOT | |--CX_STATIC_CHECK | |--CX_DYNAMIC_CHECK | | | |--CX_SY_ARITHMETIC_ERROR //运算 '&OPERAT ...

  9. 快色排序算法(C语言描述)

    快速排序 算法思想 快速排序采用了一种分治策略,学术上称之为分治法(Divide-and-Conquer Method). 哨兵(如下算法中的key) 每趟排序将哨兵插入到数组的合适位置,使得哨兵左侧 ...

  10. 手工恢复OSSIM数据库密码

    1,现象 今天需要远程连接ossim的mysql数据库读取些东西,于是登录ossim的终端,发现这个mysql客户端无法直接登录,使用自己安装时候那些口令都不行 alienvault:~# mysql ...