从默认拒绝开始的策略设计
目标
将名称空间的通信默认值改为拒绝,直接编写只选择必要路径的标签打开的政策集。
为什么重要
在NetworkPolicy中最常出错的不是语法,而是方向和结合方式。政策不是附在发送流量的一方,而是附在接收流量的一方。要允许从web到api的通信,政策的podSelector要去api,web是ingress.from出现在里面。还有from排列的项目之间是OR,一个项目内的namespaceSelector哇podSelector是AND。通过一个连字符的位置,“特定命名空间的特定路径”会变成“该命名空间的所有路径或任何地方的该路径”。并且在阻止IGRESS时,一定要同时添加DNS例外。在实际生产中,经常报告只有先添加基本拒绝,然后名称解析崩溃,整个服务连续停止的情况。**这个实验室的群集中,路径之间实际数据包不会流过,所以评分是根据政策对象的内容和选择器含义进行的。**在这里牢固掌握语法和思维方式,实际的阻止确认可以在有CNI的环境中进行。
阶段
- 名称空间
netpol-lab制作并/opt/lab/fixtures/k8s/workloads.yaml请在里面应用。结果web,api,db三个帕德各自和自己的名字一样app拿着标签,api帕德额外tier=backend需要带标签。 netpol-labE NetworkPolicydefault-deny-ingress请制作。podSelector是空对象{}并且policyTypes是Ingress只有一个ingress规则不应该有一条。- NetworkPolicy
allow-web-to-api请制作。podSelector.matchLabels.app银api,ingress[0].from[0]银podSelector.matchLabels.app: web只拥有一个(在同一项目中namespaceSelector请不要输入)。允许端口是TCP8080是。 - NetworkPolicy
default-deny-egress请制作。policyTypes是Egress只有一个。接着allow-dns-egress制作egress[0].to[0].namespaceSelector.matchLabels在kubernetes.io/metadata.name: kube-system写,egress[0].ports有港口53请把UDP和TCP两个项目放进去。 - 名称空间
monitoring制作并贴标签purpose=monitoring请粘上。然后netpol-labE NetworkPolicyallow-from-monitoring请制作。podSelector.matchLabels.app银api,ingress[0].from[0].namespaceSelector.matchLabels.purpose是monitoring,允许的端口是9090是。 - NetworkPolicy
allow-office-cidr请制作。podSelector.matchLabels.app银web并且,ingress[0].from[0].ipBlock.cidr银10.0.0.0/16,except是10.0.5.0/24一个。 - NetworkPolicy
api-full请制作。podSelector.matchLabels.app银api,policyTypes是Ingress哇Egress都是。ingress[0].from中必须包含2个以上项目(例如:web派和monitoring命名空间),egress[0].to[0]银podSelector.matchLabels.app: db,允许的端口是5432是。 /root/ops/netpol/out/policy-map.json请制作。最高级别的键是web,api,db有三个,每个值是选择那个板的政策名称的数组。有空选择器的政策必须包含三个板,allow-web-to-api是api必须进入Only(web伊娜db不能放入)。allow-office-cidr银web啊,api-full银api进入。最终netpol-lab的NetworkPolicy必须有6个以上。
参考
- 图片是
kubectl apply -f /opt/lab/fixtures/k8s/workloads.yaml -n netpol-lab上传。请不要修改图片文件本身。 kubernetes.io/metadata.name因为是容器管理器自动贴在所有命名空间上的标签,所以无需单独贴标签即可选择命名空间。相反purpose=monitoring像这样直接确定的标签必须实际贴在命名空间上。- 确认政策内容
kubectl get netpol <이름> -n netpol-lab -o yaml这个是最快的。kubectl apply --dry-run=client请提前检查是否有错误。 - 常见的错误1:在3次中
podSelector用web抓取。政策附在接收方上。 - 常见的错误2:在第4次只打开DNS为UDP。如果响应很大,就会切换到TCP 53。
- 常见的错误3:在7次中
from将两个选择器放在一个项目中。它不是OR而是AND,所以规则更严格。 - 练习板每次练习都会重新生成,所以前一次练习制作的聚类状态不会保留下来。命名空间和板子要在这个练习中亲自制作。之所以要用运行手册和宣言而不是记忆来留下运营程序,正是这个原因。
制作实习用命名空间和贴有标签的垫子
名称空间netpol-lab制作并/opt/lab/fixtures/k8s/workloads.yaml请在里面应用。结果web,api,db三个帕德各自和自己的名字一样app拿着标签,api帕德额外tier=backend需要带标签。
政策只通过标签选择对象。图片中准备了三个版块,请照样上传,但请确认上传到哪个命名空间。
创建入口基本拒绝政策
netpol-labE NetworkPolicydefault-deny-ingress请制作。podSelector是空对象{}并且policyTypes是Ingress只有一个ingress规则不应该有一条。
选择整个命名空间的选取器是空的选取器。全部拒绝的意思是没有任何一个允许规则。
只打开从web到api的端口
NetworkPolicyallow-web-to-api请制作。podSelector.matchLabels.app银api,ingress[0].from[0]银podSelector.matchLabels.app: web只拥有一个(在同一项目中namespaceSelector请不要输入)。允许端口是TCP8080是。
政策不是发给的一方,而是附在收到的方身上。因为是同一命名空间内,所以在选择对方时不要混淆命名空间选择器。
IGRESS基本拒绝和DNS例外
NetworkPolicydefault-deny-egress请制作。policyTypes是Egress只有一个。接着allow-dns-egress制作egress[0].to[0].namespaceSelector.matchLabels在kubernetes.io/metadata.name: kube-system写,egress[0].ports有港口53请把UDP和TCP两个项目放进去。
阻止IGRESS的话,从名称解释开始就会死亡。请确认DNS不只以UDP结尾,以及选择目标命名空间的标准标签是什么。
允许来自其他命名空间的流量
名称空间monitoring制作并贴标签purpose=monitoring请粘上。然后netpol-labE NetworkPolicyallow-from-monitoring请制作。podSelector.matchLabels.app银api,ingress[0].from[0].namespaceSelector.matchLabels.purpose是monitoring,允许的端口是9090是。
要选择命名空间,该命名空间必须实际贴有标签。如果选择器没有选择的目标,政策就毫无意义。
允许IP频段和指定例外
NetworkPolicyallow-office-cidr请制作。podSelector.matchLabels.app银web并且,ingress[0].from[0].ipBlock.cidr银10.0.0.0/16,except是10.0.5.0/24一个。
ipBlock 以打开和缩小的方式写入。排除频段必须包含在允许频段内。
将输入和输入包含在一个政策中
NetworkPolicyapi-full请制作。podSelector.matchLabels.app银api,policyTypes是Ingress哇Egress都是。ingress[0].from中必须包含2个以上项目(例如:web派和monitoring命名空间),egress[0].to[0]银podSelector.matchLabels.app: db,允许的端口是5432是。
from 数组的项目之间是OR。要允许两种来源,请将项目分成两个。出站端只打开数据库端口。
制作按板应用政策地图
/root/ops/netpol/out/policy-map.json请制作。最高级别的键是web,api,db有三个,每个值是选择那个板的政策名称的数组。有空选择器的政策必须包含三个板,allow-web-to-api是api必须进入Only(web伊娜db不能放入)。allow-office-cidr银web啊,api-full银api进入。最终netpol-lab的NetworkPolicy必须有6个以上。
具有空选择器的政策适用于所有页面。请在指导中反映政策选择的是接收方这一点。