访问控制2

文章目录

主要内容

  1. Role和ClusterRole
  2. 网络策略

一.Role和ClusterRole

RBAC API 声明了四种 Kubernetes 对象:Role、ClusterRole、RoleBinding 和ClusterRoleBinding.
RBAC 的 Role 或 ClusterRole 中包含一组代表相关权限的规则,这些权限是纯粹累加的(不存在拒绝某操作的规则)。Role 总是用来在某个命名空间内设置访问权限;在创建 Role 时,必须指定该 Role 所属的名字空间。ClusterRole 则是一个集群作用域的资源。这两种资源的名字不同(Role 和 ClusterRole)是因为 Kubernetes 对象要么是名字空间作用域的,要么是集群作用域的,不可两者兼具。
如果希望在命名空间内定义角色,就应该使用 Role,如果希望定义集群范围的角色,则应该使用 ClusterRole。

1.ClusterRole示例,创建一个名为test-clusterrole且仅有创建Pod和deployment的集群角色

代码如下(示例):
kubectl create clusterrole --resource=pod,deployment --verb=create,get test-clusterrole
kubectl describe clusterrole test-clusterrole
kubectl delete clusterrole test-clusterrole

在这里插入图片描述

2.YAML文件创建

代码如下(示例):
cat > clusterrole.yml <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: test-clusterrole
rules:
- apiGroups:- ""resources:- podsverbs:- create- get
- apiGroups:- appsresources:- deploymentsverbs:- create- get
EOF
kubectl create -f clusterrole.yml
kubectl describe clusterrole test-clusterrole

在这里插入图片描述

3.将udbs用户和Clusterrole进行绑定,并测试权限

代码如下(示例):
kubectl create clusterrolebinding --clusterrole=test-clusterrole --serviceaccount=test:udbs udbs-clusterbind
kubectl describe clusterrolebinding udbs-clusterbind

在这里插入图片描述

kubectl auth can-i get pods --as=system:serviceaccount:test:udbs
kubectl auth can-i create pods --as=system:serviceaccount:test:udbs
kubectl auth can-i create deployments --as=system:serviceaccount:test:udbs
kubectl auth can-i create secret --as=system:serviceaccount:test:udbs
kubectl auth can-i create service --as=system:serviceaccount:test:udbs

在这里插入图片描述

5.解释

1. `kubectl create clusterrole --resource=pod,deployment --verb=create,get test-clusterrole`:这个命令创建了一个名为"test-clusterrole"的ClusterRole对象。该ClusterRole对象的规则指定了对"pods""deployments"资源的"create""get"权限。2. `kubectl describe clusterrole test-clusterrole`:这个命令获取名为"test-clusterrole"的ClusterRole对象的详细描述信息。它会显示ClusterRole对象的名称、规则等信息。3. `kubectl delete clusterrole test-clusterrole`:这个命令删除名为"test-clusterrole"的ClusterRole对象。4. `cat > clusterrole.yml <<EOF ... EOF`:这个命令将ClusterRole的定义写入到名为"clusterrole.yml"的文件中。文件内容包括ClusterRole对象的API版本、类型、元数据和规则。5. `kubectl create -f clusterrole.yml`:这个命令使用"clusterrole.yml"文件中的定义创建ClusterRole对象。6. `kubectl describe clusterrole test-clusterrole`:这个命令获取名为"test-clusterrole"的ClusterRole对象的详细描述信息。7. `kubectl create clusterrolebinding --clusterrole=test-clusterrole --serviceaccount=test:udbs udbs-clusterbind`:这个命令创建一个名为"udbs-clusterbind"的ClusterRoleBinding对象。该ClusterRoleBinding对象将"test-clusterrole" ClusterRole与"test:udbs" ServiceAccount关联起来。8. `kubectl describe clusterrolebinding udbs-clusterbind`:这个命令获取名为"udbs-clusterbind"的ClusterRoleBinding对象的详细描述信息。它会显示ClusterRoleBinding对象的名称、关联的ClusterRole、关联的ServiceAccount等信息。9. `kubectl auth can-i get pods --as=system:serviceaccount:test:udbs`:这个命令用于检查"test:udbs" ServiceAccount是否具有获取pods的权限。它会返回一个布尔值,指示是否具有该权限。10. `kubectl auth can-i create pods --as=system:serviceaccount:test:udbs`:这个命令用于检查"test:udbs" ServiceAccount是否具有创建pods的权限。11. `kubectl auth can-i create deployments --as=system:serviceaccount:test:udbs`:这个命令用于检查"test:udbs" ServiceAccount是否具有创建deployments的权限。12. `kubectl auth can-i create secret --as=system:serviceaccount:test:udbs`:这个命令用于检查"test:udbs" ServiceAccount是否具有创建secrets的权限。13. `kubectl auth can-i create service --as=system:serviceaccount:test:udbs`:这个命令用于检查"test:udbs" ServiceAccount是否具有创建services的权限。这些命令的目的是创建和管理ClusterRole、ClusterRoleBinding对象,并验证ServiceAccount是否具有特定资源的特定权限。通过这些命令,可以实现对ServiceAccount的权限分配和权限验证。

二.网络策略

网络策略(Network Policies)是Kubernetes中用于控制Pod之间网络通信的一种机制。它允许您定义规则来限制哪些Pod可以与其他Pod通信,以及允许的通信协议、端口等。网络策略可以帮助提高集群的安全性,并允许您细粒度地控制Pod之间的通信。

网络策略的基本概念和用法如下:

  1. 网络策略资源:在Kubernetes中,网络策略由NetworkPolicy资源表示。您可以使用kubectl命令或YAML文件来创建、查看和删除NetworkPolicy。

  2. 选择器(Selectors):您可以使用选择器来定义哪些Pod受网络策略的影响。选择器可以基于标签(Label)来选择Pod。

  3. 规则(Rules):网络策略由一组规则组成。每个规则定义了允许或拒绝哪些流量的详细规则。规则可以基于源Pod、目标Pod、协议、端口等条件来定义。

  4. 默认策略(Default Policies):当没有定义任何网络策略时,集群将采用默认策略。默认情况下,所有Pod都可以相互通信。您可以定义默认策略以限制Pod之间的通信。

  5. 网络插件支持:网络策略的实现依赖于所使用的网络插件。不同的网络插件对网络策略的支持程度可能会有所不同。

使用网络策略的步骤如下:

  1. 启用网络策略:首先,您需要确保所使用的网络插件支持网络策略,并已在集群中启用。

  2. 创建NetworkPolicy:使用kubectl命令或YAML文件创建NetworkPolicy资源。在NetworkPolicy中定义选择器和规则,以控制Pod之间的通信。

  3. 应用NetworkPolicy:创建NetworkPolicy后,它将立即生效,并开始限制Pod之间的通信。

  4. 验证网络策略:您可以使用kubectl命令或其他工具来验证网络策略是否按预期工作。例如,您可以尝试从一个Pod发送流量到另一个Pod,并确保它符合NetworkPolicy中定义的规则。

总结来说,网络策略是一种用于控制Kubernetes集群中Pod之间网络通信的机制。通过定义选择器和规则,您可以限制哪些Pod可以与其他Pod通信,并允许的通信协议、端口等。网络策略可以提高集群的安全性,并允许您细粒度地控制Pod之间的通信。

1.在名为memdb的namespace中,创建一个仅允许来自名为mobapp的namespace连接的网络策略。

代码如下(示例):
kubectl create namespace memdb
kubectl create namespace mobapp

在这里插入图片描述

2.在memdb namespace中创建一个Pod

代码如下(示例):
cat > nppod.yml <<EOF
apiVersion: v1
kind: Pod
metadata:name: podnamespace: memdblabels:app: httpd
spec:containers:- name: httpdimage: httpdports:- name: webcontainerPort: 80restartPolicy: OnFailure
EOF
kubectl create -f nppod.yml
kubectl get pod -n memdb  -o wide

在这里插入图片描述

3.解释

1. `kubectl create namespace memdb`:这个命令用于创建一个名为"memdb"的命名空间。命名空间是Kubernetes中用于组织和隔离资源的一种方式。2. `kubectl create namespace mobapp`:这个命令用于创建一个名为"mobapp"的命名空间,同样是用于组织和隔离资源的命名空间。3. `cat > nppod.yml <<EOF`:这个命令用于创建一个名为"nppod.yml"的YAML文件,并将其内容输入到该文件中。4. `apiVersion: v1`:这行指定了使用的Kubernetes API的版本。5. `kind: Pod`:这行指定了要创建的资源类型是Pod。6. `metadata:`:这个部分用于指定Pod的元数据,例如名称、命名空间和标签等。7. `name: pod`:这行指定了Pod的名称为"pod"8. `namespace: memdb`:这行指定了Pod所属的命名空间为"memdb"9. `labels:`:这个部分用于指定Pod的标签。10. `app: httpd`:这行指定了一个名为"app"的标签,其值为"httpd"11. `spec:`:这个部分用于指定Pod的规格,包括容器和重启策略等。12. `containers:`:这个部分用于指定Pod中的容器。13. `- name: httpd`:这行指定了容器的名称为"httpd"14. `image: httpd`:这行指定了容器所使用的镜像为"httpd",即Apache HTTP服务器。15. `ports:`:这个部分用于指定容器的端口映射。16. `- name: web`:这行指定了一个名为"web"的端口映射。17. `containerPort: 80`:这行指定了容器内部的端口为80。18. `restartPolicy: OnFailure`:这行指定了Pod的重启策略为"OnFailure",即在容器失败时重启Pod。19. `EOF`:这个标记表示输入到文件中的内容结束。20. `kubectl create -f nppod.yml`:这个命令用于创建一个Pod,其配置定义在"nppod.yml"文件中。21. `kubectl get pod -n memdb -o wide`:这个命令用于获取"memdb"命名空间中的所有Pod,并以表格形式显示详细信息。其中,"-n memdb"指定了命名空间为"memdb""-o wide"指定了显示详细信息,包括IP地址和节点等。

4.在另外一个mobapp namespace中创建一个Pod

代码如下(示例):
cat > nppod1.yml <<EOF
apiVersion: v1
kind: Pod
metadata:name: pod1namespace: mobapplabels:app: nginx
spec:containers:- name: httpdimage: httpdports:- name: webcontainerPort: 80restartPolicy: OnFailure
EOFkubectl create -f nppod1.yml
kubectl get pod -n mobapp -o wide

在这里插入图片描述

5.创建网络策略

代码如下(示例):
cat > np.yml <<EOF
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: allow-from-namesapce-mobappnamespace: memdb
spec:podSelector: {}policyTypes:- Ingressingress:- from:- namespaceSelector:matchLabels:name: mobappports:- protocol: TCPport: 80
EOFkubectl create -f np.yml

在这里插入图片描述

6.创建测试用例

代码如下(示例):
cat > nptest.yml <<EOF
apiVersion: v1
kind: Pod
metadata:name: pod-default
spec:containers:- name: busyboximage: busyboxcommand:- /bin/sh- -c- "sleep 10m"restartPolicy: OnFailure
EOFkubectl create -f nptest.yml

在这里插入图片描述

kubectl exec -it pod-default -- wget 172.16.245.1
kubectl exec -it pod-default -- wget 172.16.93.194 

访问没有被网络策略选中的Pod,可以看到访问成功:
在这里插入图片描述
而访问被网络策略选中的Pod时,则访问被禁止
在这里插入图片描述

7.解释

以下是您提供的代码片段的详细解释:1. `cat > nppod1.yml <<EOF`:这个命令用于创建一个名为"nppod1.yml"的YAML文件,并将其内容输入到该文件中。2. `apiVersion: v1`:这行指定了使用的Kubernetes API的版本。3. `kind: Pod`:这行指定了要创建的资源类型是Pod。4. `metadata:`:这个部分用于指定Pod的元数据,例如名称、命名空间和标签等。5. `name: pod1`:这行指定了Pod的名称为"pod1"6. `namespace: mobapp`:这行指定了Pod所属的命名空间为"mobapp"7. `labels:`:这个部分用于指定Pod的标签。8. `app: nginx`:这行指定了一个名为"app"的标签,其值为"nginx"9. `spec:`:这个部分用于指定Pod的规格,包括容器和重启策略等。10. `containers:`:这个部分用于指定Pod中的容器。11. `- name: httpd`:这行指定了容器的名称为"httpd"12. `image: httpd`:这行指定了容器所使用的镜像为"httpd",即Apache HTTP服务器。13. `ports:`:这个部分用于指定容器的端口映射。14. `- name: web`:这行指定了一个名为"web"的端口映射。15. `containerPort: 80`:这行指定了容器内部的端口为80。16. `restartPolicy: OnFailure`:这行指定了Pod的重启策略为"OnFailure",即在容器失败时重启Pod。17. `kubectl create -f nppod1.yml`:这个命令用于创建一个Pod,其配置定义在"nppod1.yml"文件中。18. `kubectl get pod -n mobapp -o wide`:这个命令用于获取"mobapp"命名空间中的所有Pod,并以表格形式显示详细信息。其中,"-n mobapp"指定了命名空间为"mobapp""-o wide"指定了显示详细信息,包括IP地址和节点等。19. `cat > np.yml <<EOF`:这个命令用于创建一个名为"np.yml"的YAML文件,并将其内容输入到该文件中。20. `apiVersion: networking.k8s.io/v1`:这行指定了使用的Kubernetes网络策略API的版本。21. `kind: NetworkPolicy`:这行指定了要创建的资源类型是网络策略。22. `metadata:`:这个部分用于指定网络策略的元数据,例如名称和命名空间等。23. `name: allow-from-namesapce-mobapp`:这行指定了网络策略的名称为"allow-from-namesapce-mobapp"24. `namespace: memdb`:这行指定了网络策略所属的命名空间为"memdb"25. `spec:`:这个部分用于指定网络策略的规格,包括Pod选择器和策略类型等。26. `podSelector: {}`:这行指定了应用网络策略的Pod选择器为空,即适用于所有Pod。27. `policyTypes:`:这个部分用于指定策略类型。28. `- Ingress`:这行指定了策略类型为入口流量。29. `ingress:`:这个部分用于指定入口流量的规则。30. `- from:`:这行指定了入口流量的来源。31. `- namespaceSelector:`:这行指定了命名空间选择器。32. `matchLabels:`:这行指定了匹配标签。33. `name: mobapp`:这行指定了一个名为"name"的标签,其值为"mobapp"34. `ports:`:这个部分用于指定允许的端口。35. `- protocol: TCP`:这行指定了允许的协议为TCP。36. `port: 80`:这行指定了允许的端口为80。37. `kubectl create -f np.yml`:这个命令用于创建一个网络策略,其配置定义在"np.yml"文件中。38. `cat > nptest.yml <<EOF`:这个命令用于创建一个名为"nptest.yml"的YAML文件,并将其内容输入到该文件中。39. `apiVersion: v1`:这行指定了使用的Kubernetes API的版本。40. `kind: Pod`:这行指定了要创建的资源类型是Pod。41. `metadata:`:这个部分用于指定Pod的元数据,例如名称和标签等。42. `name: pod-default`:这行指定了Pod的名称为"pod-default"43. `spec:`:这个部分用于指定Pod的规格,包括容器和重启策略等。44. `containers:`:这个部分用于指定Pod中的容器。45. `- name: busybox`:这行指定了容器的名称为"busybox"46. `image: busybox`:这行指定了容器所使用的镜像为"busybox"47. `command:`:这个部分用于指定容器的启动命令。48. `- /bin/sh`:这行指定了容器的启动命令为"/bin/sh"49. `- -c`:这行指定了容器的命令参数为"-c"50. `sleep 10m`:这行指定了容器的命令为"sleep 10m",即睡眠10分钟。51. `restartPolicy: OnFailure`:这行指定了Pod的重启策略为"OnFailure",即在容器失败时重启Pod。52. `kubectl create -f nptest.yml`:这个命令用于创建一个Pod,其配置定义在"nptest.yml"文件中。53. `kubectl exec -it pod-default -- wget 172.16.245.1`:这个命令用于在Pod "pod-default" 中执行命令。其中,"-it"指定了交互式终端,"pod-default"是要执行命令的Pod的名称,"wget 172.16.245.1"是要执行的命令,即使用wget工具下载位于172.16.245.1的文件。

总结

以上是今天要讲的内容,学到了访问控制,包括Role和ClusterRole,网络策略。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/169232.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

032-第三代软件开发-Popup弹窗

第三代软件开发-Popup弹窗 文章目录 第三代软件开发-Popup弹窗项目介绍Popup弹窗官方示例项目中的代码 之前写过一个Popup抄抄别人的dimvisible 和 Open 区别 与 Dialog有啥区别其他总结一下 关键字&#xff1a; Qt、 Qml、 Popup、 弹窗、 modal 项目介绍 欢迎来到我们的…

【计算机网络】TCP 协议的相关特性

TCP&#xff08;传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的协议。以下是TCP协议的相关特性&#xff1a; 可靠性&#xff1a;TCP通过确认和重传机制保证数据的可靠传输。 面向连接&#xff1a;TCP在传输数据前需要先建立连接。连接的建立过程包括三次握手…

号外!百度Comate代码助手全新上线SaaS服务 - 免费申请试用+深入教程解读!

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

专业软件测评中心分享:科技成果验收测试报告的作用

科技成果验收测试是科技项目在开发完成后进行的一项测试&#xff0c;旨在检测科技项目的成果是否符合预期的技术指标和效果&#xff0c;以及是否符合用户需求和行业标准。验收测试报告是科技成果验收的重要依据&#xff0c;用于记录和证明科技成果的测试结果和性能表现。 一、…

Java入门讲解(1)---让你瞬间明白如何安装jdk

博主有话说&#xff1a;学习这个东西一定要持之以恒&#xff01;&#xff01;&#xff01;博主之前因为点事情半个月没学习&#xff0c;重新来过时&#xff0c;发现自己错过好多知识&#xff0c;正在一点一点往回补&#xff0c;博客也会陆续开始更新&#xff0c;希望大家多多支…

安防视频监控平台EasyCVR新版(V.3.4)平台界面更新2.0

视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;在视频监控播放上&#xff0c;TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放&#xff0c;可同时播放多路视频流&#…

Mask Free VIS笔记(CVPR2023 不需要mask标注的实例分割)

paper: Mask-Free Video Instance Segmentation github 一般模型学instance segmentation都是要有mask标注的&#xff0c; 不过mask标注既耗时又枯燥&#xff0c;所以paper中仅用目标框的标注来实现实例分割。 主要针对视频的实例分割。 之前也有box-supervised实例分割&…

MySQL执行计划分析

执行计划中的常见的列的解释&#xff1a; type system/const &#xff1a;用户主键索引或者唯一索引查询时&#xff0c;只能匹配 1 条数据。一般可以对 sql 查询语句优化成一个常量&#xff0c;那么 type 一般就是 system 或者 const&#xff0c;system 是 const 的一个特例&…

网络安全—自学笔记

目录 一、自学网络安全学习的误区和陷阱 二、学习网络安全的一些前期准备 三、网络安全学习路线 四、学习资料的推荐 想自学网络安全&#xff08;黑客技术&#xff09;首先你得了解什么是网络安全&#xff01;什么是黑客&#xff01; 网络安全可以基于攻击和防御视角来分类…

VSCode安装使用(含插件保姆级教程)

前言 工欲善其事&#xff0c;必先利其器 对于我们每一位软件工程师来说&#xff0c;都要有自己顺手的 IDE 开发工具&#xff0c;它就是我们的武器。 一个好用的 IDE 不仅能提升我们的开发效率&#xff0c;还能让我们保持愉悦的心情&#xff0c;这样才是非常 Nice 的状态 &…

unity游戏画质设置功能实现

在游戏中往往会出现游戏画质设置的功能。 如图&#xff1a; 这个功能是怎么实现完成的呢&#xff1f; 一、目标&#xff1a;实现切换画质功能 二、了解unity支持的画质 首先要了解unity中共支持多少种画质。 在代码中也可以进行打印。 方法如下&#xff1a; void Start …

大河弯弯:CSS 文档流与三大元素显示模式

文章目录 参考环境文档流概念三大显示模式 内联元素概念常见的内联元素宽高由内容决定 块级元素概念常见的块级元素宽度受容器影响&#xff0c;高度受内容影响 内联块级元素概念常见的内联块级元素折中方案 设置元素的显示模式display 属性内联元素与块级元素的切换为什么要通过…

【CSS】常见 CSS 布局

1. 响应式布局 <!DOCTYPE html> <html><head><title>简单的响应式布局</title><style>/* 全局样式 */body {font-family: Arial, sans-serif;margin: 0;padding: 0;}/* 头部样式 */header {background-color: #333;color: #fff;padding: …

【JVM系列】- 探索·运行时数据区的私有结构

探索运行时数据区的私有结构 文章目录 探索运行时数据区的私有结构运行时数据区的结构与概念认识线程了解守护线程和普通线程JVM系统线程 程序计数器&#xff08;PC寄存器&#xff09;概述PC寄存器的特点PC寄存器的作用 透过案例了解寄存器为什么需要用PC寄存器来存放字节码的指…

随机森林算法(Random Forest)的二分类问题

二分类问题 1. 数据导入2. RF模型构建2.1 调参&#xff1a;mtry和ntree2.2 运行模型 3. 模型测试4.绘制混淆矩阵5.绘制ROC曲线6. 参考 1. 数据导入 library(dplyr) #数据处理使用 library(data.table) #数据读取使用 library(randomForest) #RF模型使用 library(caret) # 调参…

河南工业大学人工智能与大数据学院学子在第三届“火焰杯”软件测试开发选拔赛中 取得佳绩

近日&#xff0c;第三届“火焰杯”软件测试开发选拔赛落下帷幕&#xff0c;我校人工智能与大数据学院选派的多名参赛选手在王雪涛老师的指导下&#xff0c;经过激烈的角逐&#xff0c;取得优异成绩。其中&#xff0c;何鸿彬&#xff0c;贾文聪获得决赛二等奖&#xff0c;王静宇…

【前段基础入门之】=>CSS3新增渐变颜色属性

导语&#xff1a; CSS3 新增了&#xff0c;渐变色 的解决方案&#xff0c;这使得我们可以绘制出更加生动的炫酷的的配色效果 线性渐变 多个颜色之间的渐变&#xff0c; 默认从上到下渐变 background-image: linear-gradient(red,yellow,green); /*默认从上到下渐变*/默认从上…

常用Web安全扫描工具汇整

漏洞扫描是一种安全检测行为&#xff0c;更是一类重要的网络安全技术&#xff0c;它能够有效提高网络的安全性&#xff0c;而且漏洞扫描属于主动的防范措施&#xff0c;可以很好地避免黑客攻击行为&#xff0c;做到防患于未然。 1、AWVS Acunetix Web Vulnerability Scanner&a…

javaEE -5(8000字详解多线程)

一&#xff1a;JUC(java.util.concurrent) 的常见类 1.1 ReentrantLock 可重入互斥锁. 和 synchronized 定位类似, 都是用来实现互斥效果, 保证线程安全&#xff0c;ReentrantLock 也是可重入锁. “Reentrant” 这个单词的原意就是 “可重入” ReentrantLock 的用法&#xf…

Java实现连接SQL Server解决方案及代码

下面展示了连接SQL Server数据库的整个流程&#xff1a; 加载数据库驱动建立数据库连接执行SQL语句处理结果关闭连接 在连接之前&#xff0c;前提是确保数据库成功的下载&#xff0c;创建&#xff0c;配置好账号密码。 运行成功的代码&#xff1a; import java.sql.*;publi…