Kubernetes网络策略之详解

Kubernetes网络策略之详解

NetWork Policy简介

随着微服务架构的日渐盛行,Serverless框架的逐步落地,应用上云后带来了模块间网络调用需求的大规模增长,Kubernetes 自 1.3 引入了 Network Policy,其提供以应用为中心, 基于策略的网络控制,用于隔离应用以减少攻击面。

网络策略(Network Policy )是 Kubernetes 的一种资源。Network Policy 通过 Label 选择 Pod,并指定其他 Pod 或外界如何与这些 Pod 通信。

Pod的网络流量包含流入(Ingress)和流出(Egress)两种方向。默认情况下,所有 Pod 是非隔离的,即任何来源的网络流量都能够访问 Pod,没有任何限制。当为 Pod 定义了 Network Policy,只有 Policy 允许的流量才能访问 Pod。

Pod之间能否通信可通过如下三种组合进行确认:

  • 其他被允许的 Pods(例如:Pod 无法限制对自身的访问)
  • 被允许访问的namespace
  • IP CIDR(例如:与 Pod 运行所在节点的通信总是被允许的)

在定义基于 Pod 或namespace的 NetworkPolicy 时,可以使用标签选择器来设定哪些流量可以进入或离开 Pod。同时,当创建基于 IP 的 NetworkPolicy 时,可以基于 IP CIDR 来定义策略。

Kubernetes的网络策略功能也是由第三方的网络插件实现的,因此,只有支持网络策略功能的网络插件才能进行配置网络策略,比如Calico、Canal、kube-router等等。

部署calico网络插件提供网络策略功能

Calico可以独立地为Kubernetes提供网络解决方案和网络策略,也可以和flannel相结合,由flannel提供网络解决方案,Calico仅用于提供网络策略,此时将Calico称为Canal。结合flannel工作时,Calico提供的默认配置清单式以flannel默认使用的10.244.0.0/16为Pod网络,因此在集群中kube-controller-manager启动时就需要通过–cluster-cidr选项进行设置使用该网络地址,并且—allocate-node-cidrs的值应设置为true。

本文使用calico作为网络插件,并提供网络策略功能来加以说明

1、下载calico安装文件,修改网段

curl -LO https://docs.projectcalico.org/archive/v3.15/manifests/calico.yaml

将配置文件中CALICO_IPV4POOL_CIDR注释取消,并将值修改为: 10.244.0.0/16

2、安装calico

kca -f calico.yaml

配置网络策略

在Kubernetes系统中,报文的流入和流出的核心组件是Pod资源,它们也是网络策略功能的主要应用对象。NetworkPolicy对象通过podSelector选择 一组Pod资源作为控制对象。NetworkPolicy是定义在一组Pod资源之上用于管理入站流量,或出站流量的一组规则,有可以是出入站规则一起生效,规则的生效模式通常由spec.policyTypes进行 定义。如下图:

默认情况下,Pod对象的流量控制是为空的,报文可以自由出入。在附加网络策略之后,Pod对象会因为NetworkPolicy而被隔离,一旦名称空间中有任何NetworkPolicy对象匹配了某特定的Pod对象,则该Pod将拒绝NetworkPolicy规则中不允许的所有连接请求,但是那些未被匹配到的Pod对象依旧可以接受所有流量。

就特定的Pod集合来说,入站和出站流量默认是放行状态,除非有规则可以进行匹配。还有一点需要注意的是,在spec.policyTypes中指定了生效的规则类型,但是在networkpolicy.spec字段中嵌套定义了没有任何规则的Ingress或Egress时,则表示拒绝入站或出站的一切流量。定义网络策略的基本格式如下:

apiVersion: networking.k8s.io/v1#定义API版本kind: NetworkPolicy #定义资源类型metadata: name: allow-myapp-ingress #定义NetwokPolicy的名字 namespace: defaultspec: #NetworkPolicy规则定义 podSelector: #匹配拥有标签app:myapp的Pod资源 matchLabels: app: myapp policyTypes: #NetworkPolicy类型,可以是Ingress,Egress,或者两者共存 – Ingress – Egress ingress: #定义入站规则 – from: – ipBlock: #定义可以访问的网段 cidr: 10.244.0.0/16 except: #排除的网段 – 10.244.3.0/24 – podSelector: #选定当前default名称空间,标签为app:myapp可以入站 matchLabels: app: myapp ports: #开放的协议和端口定义 – protocol: TCP port: 80 egress: – to: – ipBlock: #指定端口上的流量匹配到 10.244.0.0/24 中的任何目的地 cidr: 10.244.0.0/24 ports: – protocol: TCP port: 80 该网络策略就是将default名称空间中拥有标签”app=myapp”的Pod资源开放80/TCP端口给10.244.0.0/16网段,并排除10.244.3.0/24网段的访问,并且也开放给标签为app=myapp的所有Pod资源进行访问。

  • 必需字段:与所有其他的 Kubernetes 对象一样,NetworkPolicy 需要 apiVersion、 kind 和 metadata 字段。
  • spec:NetworkPolicy 规约中包含了在名字空间中定义特定网络策略所需的所有信息。
  • podSelector:每个 NetworkPolicy 都包括一个 podSelector,它选择适用该该策略的 Pod。示例中的策略选择带有 “app=myapp” 标签的 Pod。若podSelector为空的,则选择名字空间下所有 Pod。
  • policyTypes: 每个 NetworkPolicy 都包含一个 policyTypes 列表,其中包含 Ingress 或 Egress 或(两者亦可)。policyTypes 字段表示给定的策略是应用于 所选 Pod 的入口流量还是来出口流量(两者亦可)。如果 NetworkPolicy 未指定 policyTypes 则默认情况下始终设置 Ingress;如果 NetworkPolicy 有任何出口规则的话则设置 Egress。
  • ingress: 每个 NetworkPolicy 可包含一个 ingress 规则的白名单列表。每个规则都允许同时匹配 from 和 ports 部分的流量。示例策略中包含一条 简单的规则:它匹配某个特定端口,第一个通过 ipBlock 指定,第二个通过 podSelector 指定。
  • egress: 每个 NetworkPolicy 可包含一个 egress 规则的白名单列表。每个规则都允许匹配 to 和 port 部分的流量。该示例策略包含一条规则, 该规则指定端口上的流量匹配到 10.0.0.0/24 中的任何目的地。

该网络策略总结如下:

  • 隔离 default名字空间下 app=myapp 的 Pod 。
  • 出口限制:允许符合以下条件的 Pod 连接到 default名字空间下标签为 app=myapp的所有 Pod 的 80 TCP 端口:
    • a) default名字空间下带有 app=myapp 标签的所有 Pod
    • b) IP 地址范围为10.244.0.0–10.244.0.255 和 10.244.3.0–10.244.255.255(即除了 10.244.3.0/24 之外的所有 10.244.0.0/16)
  • 入口限制:允许从带有 app=myapp标签的名字空间下的任何 Pod 到 CIDR 10.244.0.0/16 下 80 TCP 端口。

部署应用

1、部署nginx服务

[root@localhost ~]# kubectl create deployment nginx –image=nginxdeployment.apps/nginx created[root@localhost ~]# kubectl expose deployment nginx –port=80service/nginx exposed

2、测试网络

[root@localhost ~]# kubectl get svc,podNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/kubernetes ClusterIP 10.96.0.1 443/TCP 9dservice/nginx ClusterIP 10.105.249.196 80/TCP 22mNAME READY STATUS RESTARTS AGEpod/nginx-6799fc88d8-dpqrp 1/1 Running 0 22m[root@localhost ~]# kubectl run busybox –rm -ti –image=busybox /bin/shIf you don’t see a command prompt, try pressing enter./ # wget –spider –timeout=1 nginxConnecting to nginx (10.105.249.196:80)remote file exists

3、测试网络策略

如果只让那些拥有标签 access: true 的 Pod 访问 nginx 服务, 那么可以创建一个如下所示的 NetworkPolicy 对象:

cat << EOF | kubectl apply -f -apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata: name: access-nginxspec: podSelector: matchLabels: app: nginx ingress: – from: – podSelector: matchLabels: access: "true"EOFnetworkpolicy.networking.k8s.io/access-nginx created

  • 不带 access=true 标签的 Pod 还是无法访问 nginx 服务
  • 1 2 3 4 5 [root@localhost ~]# kubectl run busybox –rm -ti –image=busybox /bin/sh If you don’t see a command prompt, try pressing enter. / # wget –spider –timeout=1 nginx Connecting to nginx (10.105.249.196:80) wget: download timed out
  • 而带有 access=true 标签的 Pod 可以访问 nginx 服务
  • 1 2 3 4 5 [root@localhost ~]# kubectl run busybox –rm -ti –labels=”access=true” –image=busybox /bin/sh If you don’t see a command prompt, try pressing enter. / # wget –spider –timeout=1 nginx Connecting to nginx (10.105.249.196:80) remote file exists
郑重声明:本文内容及图片均整理自互联网,不代表本站立场,版权归原作者所有,如有侵权请联系管理员(admin#wlmqw.com)删除。
用户投稿
上一篇 2022年6月19日 21:10
下一篇 2022年6月19日 21:10

相关推荐

  • 计算机网络技术论文(计算机网络技术论文七千字)

    今天小编给各位分享计算机网络技术论文的知识,其中也会对计算机网络技术论文七千字进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧! 计算机网络方面的论文3000字…

    2022年11月26日
  • 抖音带货怎么做入门(抖音带货怎么做入门教学)

    相信很多小伙伴都有注意到,现在抖音已经成为大家最常光顾的一个平台了,作为一个日活破亿的流量池,如今抖音上的用户数量极大。因此,现在在抖音上带货、卖货的人也是越来越多了,那么想在抖音…

    2022年11月25日
  • 手机上怎么买世界杯彩票(手机上怎么买世界杯输赢)

    现在手机已经成为大家生活中非常重要的工具之一,只要一部手机就可以解决衣食住行,最近世界杯火热进行,一些小伙伴想要买彩票,那么,手机上可以买世界杯彩票吗?世界杯买球软件是真的吗?手机…

    2022年11月25日
  • 淘宝直播平台抽成多少(淘宝直播平台抽成比例)

    随着时代的发展,现在直播带货已经成为主要带货方式,其中淘宝是主流带货平台,不少人在上面直播带货赚钱,一些小伙伴也想加入,那么淘宝直播平台抽成多少?下面小编为大家带来淘宝直播平台抽成…

    2022年11月24日
  • 成都健康码崩了是怎么回事(成都健康码系统崩了)

    健康码是大家出行必备的工具,有小伙伴反映自己健康码崩了,上不了地铁,那么成都健康码崩了是怎么回事?成都健康码怎么突然崩了?成都健康码崩了是怎么办?下面小编为大家带来成都健康码崩了原…

    2022年11月24日
  • rnm退钱是什么意思网络用语(rnm退钱是什么人)

    最近关于网络用语使用还是有不少咨询的,随着卡塔尔世界杯的开启,网上也出现了不少新的网络流行用语,其中rnm退钱的梗也引发不少网友的好奇。rnm退钱是什么意思?很多网友对此好奇,rn…

    2022年11月24日
  • 关公绕后什么意思网络用语(睁眼关公什么意思)

    关于一些网络用语使用大家也都是比较关注的,最近关于关公绕后这个梗也是挺火的,不过还是有很多网友对关公绕后这个梗的含义不是很了解,关公绕后什么意思?这个梗说的是什么呢?下面来看下网络…

    2022年11月24日
  • 免费清理c盘的软件(清理c盘空间不影响系统)

    电脑用久了慢如龟速,还卡顿,这最大的原因啊就是C盘空间不足造成的。 即使电脑配置再好,或者硬盘再快,如果长时间没有打扫C盘,打开文件或者稳定之类的,都卡得让人头大。 这时候呢不要去…

    2022年11月24日
  • 1千克等于多少磅

    克,此定义在1958年被美国以及其他英联邦会员国承认换算回来,一千克等于262磅,一磅等于037千克英国在1963年开始,依据度量衡法案的规;1 磅=16 盎司=04536 千克 …

    2022年11月24日
  • 妈宝是什么意思网络用语(妈宝男是什么意思)

    近期有关一些网络用语使用也有不少人咨询,其中妈宝这个词在网上热度也是挺高的。妈宝是什么意思?部分网友可能对妈宝这个词的含义不是很了解,据悉在网络上面有媒体人评论大s的时候使用到了妈…

    2022年11月23日

联系我们

联系邮箱:admin#wlmqw.com
工作时间:周一至周五,10:30-18:30,节假日休息