一 Kubernetes网络策略

1.1 策略说明

为实现细粒度的容器间网络访问隔离策略,Kubernetes发布Network Policy,目前已升级为networking.k8s.io/v1稳定版本。
Network Policy的主要功能是对Pod间的网络通信进行限制和准入控制,设置方式为将Pod的Label作为查询条件,设置允许访问或禁止访问的客户端Pod列表。目前查询条件可以作用于Pod和Namespace级别。
为了使用Network Policy,Kubernetes引入了一个新的资源对象Network Policy,供用户设置Pod间网络访问的策略。但仅定义一个网络策略是无法完成实际的网络隔离的,还需要一个策略控制器(Policy Controller)进行策略的实现。
策略控制器由第三方网络组件提供,目前Calico、Cilium、Kube-router、Romana、WeaveNet等开源项目均支持网络策略的实现。Network Policy的工作原理如下所示,policy controller需要实现一个API Listener,监听用户设置的Network Policy定义,并将网络访问规则通过各Node的Agent进行实际设置(Agent则需要通过CNI网络插件实现)。

1.2 网络策略配置

网络策略的设置主要用于对目标Pod的网络访问进行限制,在默认情况下对所有Pod都是允许访问的,在设置了指向Pod的Network Policy网络策略之后,访问Pod将会被限制。
示例1:
[root@k8smaster01 study]# vi networkpolicy_01.yaml
  1 apiVersion:  networking.k8s.io/v1
2 kind: NetworkPolicy
3 metadata:
4 name: test-network-policy
5 namespace: default
6 spec:
7 podSelector:
8 matchLabels:
9 role: db
10 policyTypes:
11 - Ingress
12 - Egress
13 ingress:
14 - from:
15 - ipBlock:
16 cidr: 172.17.0.0/16
17 except:
18 - 172.17.1.0/24
19 - namespacesSelector:
20 matchLabels:
21 project: mopoject
22 - podSelector:
23 matchLabels:
24 role: frontend
25 ports:
26 - protocol: TCP
27 port: 6379
28 egress:
29 - to:
30 - ipBlock:
31 cidr: 10.0.0.0/24
32 ports:
33 - protocol: TCP
34 port: 5978
参数解释:
  • podSelector:用于定义该网络策略作用的Pod范围,本例的选择条件为包含“role=db”标签的Pod。
  • policyTypes:网络策略的类型,包括ingress和egress两种,用于设置目标Pod的入站和出站的网络限制。
  • ingress:定义允许访问目标Pod的入站白名单规则,满足from条件的客户端才能访问ports定义的目标Pod端口号。
    • -from:对符合条件的客户端Pod进行网络放行,规则包括基于客户端Pod的Label、基于客户端Pod所在的Namespace的Label或者客户端的IP范围。
    • -ports:允许访问的目标Pod监听的端口号。
  • egress:定义目标Pod允许访问的“出站”白名单规则,目标Pod仅允许访问满足to条件的服务端IP范围和ports定义的端口号。
    • -to:允许访问的服务端信息,可以基于服务端Pod的Label、基于服务端Pod所在的Namespace的Label或者服务端IP范围。
    • -ports:允许访问的服务端的端口号。
如上示例的最终效果如下:
  • 该网络策略作用于Namespace“default”中含有“role=db”Label的全部Pod。
  • 允许与目标Pod在同一个Namespace中的包含“role=frontend”Label的客户端Pod访问目标Pod。
  • 允许属于包含“project=myproject”Label的Namespace的客户端Pod访问目标Pod。
  • 允许从IP地址范围“172.17.0.0/16”的客户端Pod访问目标Pod,但是不包括IP地址范围“172.17.1.0/24”的客户端。
  • 允许目标Pod访问IP地址范围“10.0.0.0/24”并监听5978端口的服务。
注意:关于namespaceSelector和podSelector的说明:在from或to的配置中,namespaceSelector和podSelector可以单独设置,也可以组合配置。如果仅配置podSelector,则表示与目标Pod属于相同的Namespace,而组合设置则可以设置Pod所属的Namespace,例如:
  1  - from:
2 - namespacesSelector:
3 matchLabels:
4 project: mopoject
5 - podSelector:
6 matchLabels:
7 role: frontend
如上表示允许访问目标Pod的来源客户端Pod应具有如下属性:属于有“project=myproject”标签的Namespace,并且有“role=frontend”标签。

1.3 Namespace级别策略

在Namespace级别还可以设置一些默认的全局网络策略,以方便管理员对整个Namespace进行统一的网络策略设置。
示例1:默认禁止任何客户端访问该Namespace中的所有Pod。
  1 apiVersion: networking.k8s.io/v1
2 kind: NetworkPolicy
3 metadata:
4 name: default-deny
5 spec:
6 podSelector: {}
7 policyTypes:
8 - Ingress
示例2:默认允许任何客户端访问该Namespace中的所有Pod。
  1 apiVersion: networking.k8s.io/v1
2 kind: NetworkPolicy
3 metadata:
4 name: allow-all
5 spec:
6 podSelector: {}
7 ingress:
8 - {}
9 policyTypes:
10 - Ingress
示例3:默认禁止该Namespace中的所有Pod访问外部服务。
  1 apiVersion: networking.k8s.io/v1
2 kind: NetworkPolicy
3 metadata:
4 name: default-deny
5 spec:
6 podSelector: {}
7 policyTypes:
8 - Egress
示例4:默认允许该Namespace中的所有Pod访问外部服务。
  1 apiVersion: networking.k8s.io/v1
2 kind: NetworkPolicy
3 metadata:
4 name: allow-all
5 spec:
6 podSelector:{}
7 egress:
8 - {}
9 policyTypes:
10 - Egress
示例5:默认禁止任何客户端访问该Namespace中的所有Pod,同时禁止访问外部服务。
  1 apiVersion: networking.k8s.io/v1
2 kind: NetworkPolicy
3 metadata:
4 name: default-deny
5 spec:
6 podSelector: {}
7 policyTypes:
8 - Ingress
9 - Egress

041.Kubernetes集群网络-K8S网络策略的更多相关文章

  1. 038.集群网络-K8S网络实现

    一 Kubernetes网络实现 1.1 Kubernetes网络优势 在实际的业务场景中,业务组件之间的关系十分复杂,微服务的理念更是让应用部署的粒度更加细小和灵活.为了支持业务应用组件的通信,Ku ...

  2. 036.集群网络-K8S网络模型及Linux基础网络

    一 Kubernetes网络模型概述 1.1 Kubernetes网络模型 Kubernetes网络模型设计的一个基础原则是:每个Pod都拥有一个独立的IP地址,并假定所有Pod都在一个可以直接连通的 ...

  3. Kubernetes: 集群网络配置 - flannel

    参考: [ Kubernetes 权威指南 ] Kubernetes 集群搭建可以参考 [ Kubernetes : 多节点 k8s 集群实践 ] 在多个 Node 组成的 Kubernetes 集群 ...

  4. Kubernetes之canal的网络策略(NetworkPolicy)

    安装要求: 1.我们这里安装的是3.3的版本.kubernetes的要求: 支持的版本 1.10 1.11 1.12 2.CNI插件需要启用,Calico安装为CNI插件.必须通过传递--networ ...

  5. 037.集群网络-Docker网络实现

    一 Docker网络 1.1 Docker网络类型 标准的Docker支持以下4类网络模式: host模式:使用--net=host指定. container模式:使用--net=container: ...

  6. kubernetes集群网络配置方案

    1. 直接路由 在每个节点上添加其他节点的静态路由,就可以将不同物理机的docker0网桥互联互通. 我的两个节点的IP分别为:172.16.252.218和172.16.252.209. 两个doc ...

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

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

  8. 【Kubernetes】K8S 网络隔离 方案

    参考资料: K8S-网络隔离参考 OpenContrail is an open source network virtualization platform for the cloud. – Kub ...

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

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

随机推荐

  1. J2EE项目中,servlet跳转到相应的JSP页面后,JSP页面丢失了样式效果

    原因: js和css的引用路径是相对路径.跳转后路径改变. 解决方法: 先在head标签中加入一下代码 <% String path = request.getContextPath(); St ...

  2. 3、JSP中的Cookie 用于存储 web 页面的用户信息。

    cookie 在平时生活中的运用 存储用户在网页上的登陆信息,包括账号和密码. 有的网站,登陆的时候,会出现一个选项,问你是否要一周内或者一个月内保持登陆状态.如果你选了,那么一周之内,都不需要再输入 ...

  3. ShoneSharp语言(S#)的设计和使用介绍系列(6)— 字符串String

    ShoneSharp语言(S#)的设计和使用介绍 系列(6)— 字符串String 作者:Shone 声明:原创文章欢迎转载,但请注明出处,https://www.cnblogs.com/ShoneS ...

  4. MySQL的CHAR 和 VARCHAR的区别

    CHAR 和 VARCHAR 类型,CHAR 列的长度固定, VARCHAR 列中的值为可变长字符串.在检索的时候,CHAR 列删除了尾部的空格,而 VARCHAR 则保留这些空格s

  5. 2020 网鼎杯wp

    2020 网鼎杯WP 又是划水的一天,就只做出来4题,欸,还是太菜,这里就记录一下做出的几题的解题记录 AreUSerialz 知识点:反序列化 打开链接直接给出源码 <?php include ...

  6. Python 每日一练(5)

    引言 Python每日一练又开始啦,今天的专题和Excel有关,主要是实现将txt文本中数据写入到Excel中,说来也巧,今天刚好学校要更新各团支部的人员信息,就借此直接把事情做了 主要对于三种数据类 ...

  7. python调用大漠插件教程02大漠插件绑定测试工具

    什么是大漠插件绑定测试工具? 这是大漠插件为了方便使用者调试绑定窗口的模式而设计的,因为有些程序不会接受一般的鼠键事件的响应模式,每个程序所需要的响应模式都不尽相同,所以这个工具可以使我们在绑定窗口时 ...

  8. SpringBoot 2.x 版本以put方式提交表单不生效的问题详解

    在使用SpringBoot 2.x版本时,原有springboot 1.x 版本的通过在表单中添加 input框隐藏域指定_method = put 的方式失效. 虽然浏览器传参的确是带上了这个参数, ...

  9. kubeadm实现k8s高可用集群环境部署与配置

    高可用架构 k8s集群的高可用实际是k8s各核心组件的高可用,这里使用主备模式,架构如下: 主备模式高可用架构说明: 核心组件 高可用模式 高可用实现方式 apiserver 主备 keepalive ...

  10. Rocket - diplomacy - misaligned

    https://mp.weixin.qq.com/s/poCJBcx45clXHm6Uuv8M6w 介绍AddressSet.misaligned的实现.之前介绍的比较概括,也有偏差.这里根据实际执行 ...