LabHub
学习 学习路径 课程

Kubernetes 运维实务

从默认拒绝开始的策略设计

在 LabHub 中继续学习

目标

将名称空间的通信默认值改为拒绝,直接编写只选择必要路径的标签打开的政策集。

为什么重要

在NetworkPolicy中最常出错的不是语法,而是方向和结合方式。政策不是附在发送流量的一方,而是附在接收流量的一方。要允许从web到api的通信,政策的podSelector要去api,web是ingress.from出现在里面。还有from排列的项目之间是OR,一个项目内的namespaceSelectorpodSelector是AND。通过一个连字符的位置,“特定命名空间的特定路径”会变成“该命名空间的所有路径或任何地方的该路径”。并且在阻止IGRESS时,一定要同时添加DNS例外。在实际生产中,经常报告只有先添加基本拒绝,然后名称解析崩溃,整个服务连续停止的情况。**这个实验室的群集中,路径之间实际数据包不会流过,所以评分是根据政策对象的内容和选择器含义进行的。**在这里牢固掌握语法和思维方式,实际的阻止确认可以在有CNI的环境中进行。

阶段

  1. 名称空间netpol-lab制作并/opt/lab/fixtures/k8s/workloads.yaml请在里面应用。结果webapidb三个帕德各自和自己的名字一样app拿着标签,api帕德额外tier=backend需要带标签。
  2. netpol-labE NetworkPolicydefault-deny-ingress请制作。podSelector是空对象{}并且policyTypesIngress只有一个ingress规则不应该有一条
  3. NetworkPolicyallow-web-to-api请制作。podSelector.matchLabels.appapiingress[0].from[0]podSelector.matchLabels.app: web只拥有一个(在同一项目中namespaceSelector请不要输入)。允许端口是TCP8080是。
  4. NetworkPolicydefault-deny-egress请制作。policyTypesEgress只有一个。接着allow-dns-egress制作egress[0].to[0].namespaceSelector.matchLabelskubernetes.io/metadata.name: kube-system写,egress[0].ports有港口53请把UDP和TCP两个项目放进去。
  5. 名称空间monitoring制作并贴标签purpose=monitoring请粘上。然后netpol-labE NetworkPolicyallow-from-monitoring请制作。podSelector.matchLabels.appapiingress[0].from[0].namespaceSelector.matchLabels.purposemonitoring,允许的端口是9090是。
  6. NetworkPolicyallow-office-cidr请制作。podSelector.matchLabels.appweb并且,ingress[0].from[0].ipBlock.cidr10.0.0.0/16except10.0.5.0/24一个。
  7. NetworkPolicyapi-full请制作。podSelector.matchLabels.appapipolicyTypesIngressEgress都是。ingress[0].from中必须包含2个以上项目(例如:web派和monitoring命名空间),egress[0].to[0]podSelector.matchLabels.app: db,允许的端口是5432是。
  8. /root/ops/netpol/out/policy-map.json请制作。最高级别的键是webapidb有三个,每个值是选择那个板的政策名称的数组。有空选择器的政策必须包含三个板,allow-web-to-apiapi必须进入Only(web伊娜db不能放入)。allow-office-cidrweb啊,api-fullapi进入。最终netpol-lab的NetworkPolicy必须有6个以上。

参考

制作实习用命名空间和贴有标签的垫子

名称空间netpol-lab制作并/opt/lab/fixtures/k8s/workloads.yaml请在里面应用。结果webapidb三个帕德各自和自己的名字一样app拿着标签,api帕德额外tier=backend需要带标签。

政策只通过标签选择对象。图片中准备了三个版块,请照样上传,但请确认上传到哪个命名空间。

创建入口基本拒绝政策

netpol-labE NetworkPolicydefault-deny-ingress请制作。podSelector是空对象{}并且policyTypesIngress只有一个ingress规则不应该有一条

选择整个命名空间的选取器是空的选取器。全部拒绝的意思是没有任何一个允许规则。

只打开从web到api的端口

NetworkPolicyallow-web-to-api请制作。podSelector.matchLabels.appapiingress[0].from[0]podSelector.matchLabels.app: web只拥有一个(在同一项目中namespaceSelector请不要输入)。允许端口是TCP8080是。

政策不是发给的一方,而是附在收到的方身上。因为是同一命名空间内,所以在选择对方时不要混淆命名空间选择器。

IGRESS基本拒绝和DNS例外

NetworkPolicydefault-deny-egress请制作。policyTypesEgress只有一个。接着allow-dns-egress制作egress[0].to[0].namespaceSelector.matchLabelskubernetes.io/metadata.name: kube-system写,egress[0].ports有港口53请把UDP和TCP两个项目放进去。

阻止IGRESS的话,从名称解释开始就会死亡。请确认DNS不只以UDP结尾,以及选择目标命名空间的标准标签是什么。

允许来自其他命名空间的流量

名称空间monitoring制作并贴标签purpose=monitoring请粘上。然后netpol-labE NetworkPolicyallow-from-monitoring请制作。podSelector.matchLabels.appapiingress[0].from[0].namespaceSelector.matchLabels.purposemonitoring,允许的端口是9090是。

要选择命名空间,该命名空间必须实际贴有标签。如果选择器没有选择的目标,政策就毫无意义。

允许IP频段和指定例外

NetworkPolicyallow-office-cidr请制作。podSelector.matchLabels.appweb并且,ingress[0].from[0].ipBlock.cidr10.0.0.0/16except10.0.5.0/24一个。

ipBlock 以打开和缩小的方式写入。排除频段必须包含在允许频段内。

将输入和输入包含在一个政策中

NetworkPolicyapi-full请制作。podSelector.matchLabels.appapipolicyTypesIngressEgress都是。ingress[0].from中必须包含2个以上项目(例如:web派和monitoring命名空间),egress[0].to[0]podSelector.matchLabels.app: db,允许的端口是5432是。

from 数组的项目之间是OR。要允许两种来源,请将项目分成两个。出站端只打开数据库端口。

制作按板应用政策地图

/root/ops/netpol/out/policy-map.json请制作。最高级别的键是webapidb有三个,每个值是选择那个板的政策名称的数组。有空选择器的政策必须包含三个板,allow-web-to-apiapi必须进入Only(web伊娜db不能放入)。allow-office-cidrweb啊,api-fullapi进入。最终netpol-lab的NetworkPolicy必须有6个以上。

具有空选择器的政策适用于所有页面。请在指导中反映政策选择的是接收方这一点。