k8s-----17、集群安全机制

news2024/9/27 17:33:11

1、集群安全机制概述

1.1 访问k8s的三个步骤

  • 1、认证

  • 2、鉴权(授权)

  • 3、准入控制

  • 进行访问的时候,过程中都需要经过apiserver,apiserver做统一协调,比如门卫。且访问过程中需要证书、token、或者用户名+密码。如果需要访问pod,需要serviceAccount。

1.2 认证

  • 传输安全:对外不会暴露8080端口,只能内部访问。对外使用端口6443
  • 认证:客户端身份认证的常用方式有三种: 1>https证书认证,基于ca证书。2> http+token认证,通过token识别用户。3>http基本认证,用户名+密码(不常用,前两种更安全)

1.3 鉴权

  • 基于RBAC进行鉴权操作
  • 基于角色进行访问控制

1.4 准入控制

  • 就是准入控制器的列表,如果该列表有请求内容,通过。没有则拒绝。

2、RBAC(基于角色的访问控制)

在这里插入图片描述

2.1 角色

  • Role,特定命名空间具体操作。 ClusterRole,所有命名空间访问权限
[root@master ~]# kubectl  get ns  # 查看命名空间
[root@master ~]# kubectl create ns role
namespace/role created
[root@master ~]# kubectl  get ns
NAME              STATUS   AGE
default           Active   63d
kube-node-lease   Active   63d
kube-public       Active   63d
kube-system       Active   63d
role              Active   3s
[root@master ~]# kubectl delete ns role 
namespace "role" deleted

2.2 角色绑定

  • roleBinding: 将角色绑定到主体上
  • ClusterroleBinding: 将集群角色绑定到主体

2.3 主体

  • user : 用户
  • group: 用户组
  • serviceAcoount: 服务账号。用于pod访问

3、RBAC实现鉴权

3.1 生成证书文件

#下载并使用cfssl证书生成工具
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 
chmod +x cfssl_linux-amd64 cfssljson_linux-amd64 cfssl-certinfo_linux-amd64 
mv cfssl_linux-amd64 /usr/local/bin/cfssl 
mv cfssljson_linux-amd64 /usr/local/bin/cfssljson 
mv cfssl-certinfo_linux-amd64 /usr/bin/cfssl-certinfo

# 生成自签证书
[root@master mary]# cat ca-config.json 
{
  "signing": {
    "default": {
      "expiry": "87600h"
    },
    "profiles": {
      "kubernetes": {
         "expiry": "87600h",
         "usages": [
            "signing",
            "key encipherment",
            "server auth",
            "client auth"
        ]
      }
    }
  }
}
[root@master mary]# cat ca-csr.json 
{
    "CN": "kubernetes",
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "Beijing",
            "ST": "Beijing",
      	    "O": "k8s",
            "OU": "System"
        }
    ]
}
[root@master mary]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca -  #生成自签证书
2022/05/13 13:47:19 [INFO] generating a new CA key and certificate from CSR
2022/05/13 13:47:19 [INFO] generate received request
2022/05/13 13:47:19 [INFO] received CSR
2022/05/13 13:47:19 [INFO] generating key: rsa-2048
2022/05/13 13:47:19 [INFO] encoded CSR
2022/05/13 13:47:19 [INFO] signed certificate with serial number 533587145625742162082018478504710590695605538243
[root@master mary]# ls
ca-config.json  ca.csr  ca-csr.json  ca-key.pem  ca.pem  mary-csr.json  rabc-user.sh

3.2 创建命名空间和对应得pod

[root@master ~]# kubectl create ns roledemo
namespace/roledemo created

[root@master ~]# kubectl get ns
NAME              STATUS   AGE
roledemo          Active   3s

[root@master ~]# kubectl run nginx --image=nginx -n roledemo 
pod/nginx created
[root@master ~]# kubectl get pod -n roledemo 
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          36s

3.3 创建角色

[root@master Roledemo]# vim rbac-role.yaml
[root@master Roledemo]# cat rbac-role.yaml 
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: roledemo
  name: pod-reader
rules:
- apiGroups: [""]                  #组
  resources: ["pods"]              #资源
  verbs: ["get","watch","list"]    #角色权限
       
[root@master Roledemo]# kubectl apply -f rbac-role.yaml 
role.rbac.authorization.k8s.io/pod-reader created

[root@master Roledemo]# kubectl get role -n roledemo 
NAME         CREATED AT
pod-reader   2022-05-13T04:13:46Z

3.4 创建角色绑定

[root@master Roledemo]# vim rbac-rolebinding.yaml
[root@master Roledemo]# cat rbac-rolebinding.yaml 
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata: 
  name: read-pods
  namespace: roledemo
subjects: 
- kind: User
  name: mary # Name is case sensitive
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role #this must be Role or ClusterRole
  name: pod-reader # this must match the name of the Role or ClusterRole you wish to bind to
  apiGroup: rbac.authorization.k8s.io

[root@master Roledemo]# kubectl apply -f rbac-rolebinding.yaml 
rolebinding.rbac.authorization.k8s.io/read-pods created
[root@master Roledemo]# kubectl get role,rolebinding -n roledemo    #查看角色和角色绑定
NAME                                        CREATED AT
role.rbac.authorization.k8s.io/pod-reader   2022-05-13T04:13:46Z

NAME                                              ROLE              AGE
rolebinding.rbac.authorization.k8s.io/read-pods   Role/pod-reader   25s



3.5 使用证书识别身份


[root@master ~]# mkdir mary         #充当用户文件夹
[root@master ~]# cd mary/   #目录下需要所有的ca文件
[root@master mary]# cat mary-csr.json 
{
  "CN": "mary",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "L": "BeiJing",
      "ST": "BeiJing"
    }
  ]
}

[root@master mary]# vim rabc-user.sh   ##rbac鉴权文件
[root@master mary]# cat rabc-user.sh 
cat > mary-csr.json <<EOF
{
  "CN": "mary",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "L": "BeiJing",
      "ST": "BeiJing"
    }
  ]
}
EOF

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes mary-csr.json | cfssljson -bare mary 

kubectl config set-cluster kubernetes \
  --certificate-authority=ca.pem \
  --embed-certs=true \
  --server=https://192.168.172.128:6443 \
  --kubeconfig=mary-kubeconfig
  
kubectl config set-credentials mary \
  --client-key=mary-key.pem \
  --client-certificate=mary.pem \
  --embed-certs=true \
  --kubeconfig=mary-kubeconfig

kubectl config set-context default \
  --cluster=kubernetes \
  --user=mary \
  --kubeconfig=mary-kubeconfig

kubectl config use-context default --kubeconfig=mary-kubeconfig


## 执行
[root@master mary]# bash rabc-user.sh 
2022/05/13 13:53:26 [INFO] generate received request
2022/05/13 13:53:26 [INFO] received CSR
2022/05/13 13:53:26 [INFO] generating key: rsa-2048
2022/05/13 13:53:26 [INFO] encoded CSR
2022/05/13 13:53:26 [INFO] signed certificate with serial number 697056282839922252602077574108282807182420364565
2022/05/13 13:53:26 [WARNING] This certificate lacks a "hosts" field. This makes it unsuitable for
websites. For more information see the Baseline Requirements for the Issuance and Management
of Publicly-Trusted Certificates, v.1.1.6, from the CA/Browser Forum (https://cabforum.org);
specifically, section 10.2.3 ("Information Requirements").
Cluster "kubernetes" set.
User "mary" set.
Context "default" created.
Switched to context "default".
[root@master mary]# ls   ##生成了mary-kubeconfig文件
ca-config.json  ca-csr.json  ca.pem    mary-csr.json  mary-kubeconfig  rabc-user.sh
ca.csr          ca-key.pem   mary.csr  mary-key.pem   mary.pem

[root@master mary]# cat mary-kubeconfig  ##里面是证书内容

3.6测试

#只有查看pod得权限,所以查看svc是没有任何东西的(不对)   #应该是这里只是使用了文件夹模拟,所以出错。需要真实得用户
[root@master mary]# kubectl get pod -n roledemo 
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          140m
[root@master mary]#  kubectl create  service clusterip test --clusterip="None" -n roledemo# 创建svc测试
[root@master mary]# kubectl get svc -n roledemo   # 但是不对
NAME   TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
test   ClusterIP   None         <none>        <none>    25m

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

xshell+xming显示jmeter的gui页面

1.下载和安装xming&#xff0c;下载地址&#xff1a;https://sourceforge.net/projects/xming/ 2.配置xming 记住这个端口&#xff0c;一会要用到 修改进入xming安装目录修改host文件 此处是远程服务器的ip 3.服务器执行vi /etc/ssh/sshd_config&#xff0c;修改成如图所示…

C++入门(命名空间、缺省参数、引用、函数重载、内联函数)

目录 命名空间介绍命名空间格式命名空间使用 C输入输出缺省参数全缺省参数半缺省参数 函数重载引用引用特性常引用引用和指针的区别 内联函数 1024程序员节快乐&#xff01;&#xff01;&#xff01;&#x1f380;&#x1f381;&#x1f389; 命名空间介绍 在C/C中&#xff0c…

电子表格text函数学习

text函数用于格式化内容&#xff1b;函数格式是 text(要格式化的值, 格式)&#xff1b; B4有内容为 2020/3/15 &#xff1b;输入下图&#xff1b; 把B4内容格式化为下图的年月日形式&#xff1b;B11有数值4.5&#xff0c;输入下图的格式化函数&#xff0c; 结果是四舍五入取整…

Cisco IOS XE Web UI 命令执行漏洞

Cisco IOS XE Web UI 命令执行漏洞 受影响版本 Cisco IOS XE全版本 漏洞描述 Cisco IOS XE Web UI 是一种基于GUI的嵌入式系统管理工具&#xff0c;能够提供系统配置、简化系统部署和可管理性以及增强用户体验。它带有默认映像&#xff0c;因此无需在系统上启用任何内容或安…

Lua语言编写爬虫程序

以下是一个使用luasocket-http库和Lua语言编写的爬虫程序。此程序使用了https://www.duoip.cn/get_proxy的代码。 -- 引入所需的库 local http require("socket.http") local ltn12 require("ltn12") local json require("json") ​ -- 获取…

ARM,汇编指令

一、汇编指令 1、搬移指令 mov r0 ,#3 mov r1,r0 msr cpsr,r0 mrs r0,cpsr 2、条件执行及标志位 cmp moveq movgt 3、机器码 1&#xff09;、立即数合法性 2&#xff09;、立即数不合法 ldr r0,0x12345678 伪指令解决不合法的问题 前4位表示16个数&#xff0c;一个数移动2次。 …

安装MariaDB数据库安装(离线安装)

参考地址: https://mirror.mariadb.org/yum/10.4/centos7-amd64/rpms/ http://www.gxcode.top/code 4.1 安装mariadb环境需要的依赖 # yum install rsync nmap lsof perl-DBI nc 4.2 安装MariaDB依赖包 # rpm -ivh jemalloc-3.6.0-1.el7.x86_64.rpm # rpm -ivh jemalloc…

图和图神经网络的可视化,详解与示例

1 图和图神经网络可视化 图和图神经网络&#xff08;Graph Neural Networks&#xff0c;GNNs&#xff09;的可视化对于理解和分析复杂图结构和模型的工作非常重要。图和图神经网络&#xff08;GNN&#xff09;的可视化是一种强大的工具&#xff0c;用于理解和分析复杂的图结构…

B-3:Web安全之综合渗透测试

B-3:Web安全之综合渗透测试 任务环境说明: 服务器场景:Server2104(关闭链接) 服务器场景用户名、密码:未知 1.通过URL访问http://靶机IP/1,对该页面进行渗透测试,将完成后返回的结果内容作为FLAG值提交; 通过访问IP/1,查看源代码发现flagishere,访问后发现什么也没…

webpack中常见的Loader解决了什么问题?

一、是什么 loader 用于对模块的"源代码"进行转换&#xff0c;在 import 或"加载"模块时预处理文件 webpack做的事情&#xff0c;仅仅是分析出各种模块的依赖关系&#xff0c;然后形成资源列表&#xff0c;最终打包生成到指定的文件中。如下图所示&#…

2017年亚太杯APMCM数学建模大赛A题睡眠对人体的影响求解全过程文档及程序

2017年亚太杯APMCM数学建模大赛 A题 睡眠对人体的影响 原题再现 自2001年以来&#xff0c;世界睡眠医学协会将每年的3月21日定为世界睡眠日&#xff0c;以引起人们对睡眠的重要性和质量的关注。 一整天的精神状态取决于昨晚的睡眠质量&#xff0c;高睡眠质量自然保证了人们精…

C++面试常见问题多态如何实现?虚函数的底层如何实现?

1.黑马程序员多态例子 class Animal { public://Speak函数就是虚函数//函数前面加上virtual关键字&#xff0c;变成虚函数&#xff0c;那么编译器在编译的时候就不能确定函数调用了。virtual void speak(){cout << "动物在说话" << endl;} };class Cat …

Jetpack:016-Jetpack中的SanckBar

文章目录 1. 概念介绍2. 使用方法2.1 显示内容2.2 显示方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了Jetpack相关的概念和主要内容&#xff0c;本章回中主要介绍 SnackBar。闲话休提&#xff0c;让我们一起Talk Android Jetpack吧&#xff01; 1. 概念介绍 我们在本章…

【J-Long Group Limited】申请1500万美元纳斯达克IPO上市

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;总部位于中国香港的J-Long Group Limited&#xff08;简称&#xff1a;J-Long&#xff09;近期已向美国证券交易委员会&#xff08;SEC&#xff09;提交招股书&#xff0c;申请在纳斯达克IPO上市&…

C语言 每日一题 PTA 10.21-10.24日 day3

1.计算分段函数[1] 本题目要求计算下列分段函数f(x)的值&#xff1a; yf(x)1/x x!0 yf(x)0 x0 int main() {double num 0;scanf("%lf", &num);double result 0;if (num 0){result 0;}else{result 1 / num;}printf("f(%.1lf)%.1lf", num, result)…

获取Android签名文件的MD5和SHA1指纹

以前在App中集成百度地图时&#xff0c;需要在百度地图的开发者网站上绑定应用的包名和签名&#xff0c;以预防自己的key被别人乱用。 最近公司的一个球机产品也搞了类似的做法&#xff0c;我们要访问它的摄像头功能需要使用厂家提供的aar库&#xff0c;但是你要想正常调用它的…

Unity性能优化一本通

文章目录 关于Unity性能优化一、资源部分&#xff1a;1、图片1.1、 图片尺寸越小越好1.2、使用2N次幂大小1.3、取消勾选Read/Write Enabled1.4、图片压缩1.5、禁用多余的Mip Map1.6、合并图集 2、模型2.1.限制模型面数2.2.限制贴图的大小2.3.禁用Read/Write Enables2.4.不勾选其…

阻塞队列BlockingQueue实战及其原理分析

一&#xff0c;队列 1. 队列 是限定在一端进行插入&#xff0c;另一端进行删除的特殊线性表。 允许出队的一端称为队头&#xff0c;允许入队的一端称为队尾。 先进先出(FIFO)线性表。 1.1 Queue接口 2. 阻塞队列&#xff08;BlockingQueue&#xff09; 阻塞队列 (BlockingQueu…

Linux系统64位ATT系统调用汇编指令syscall

相关概念 在Linux中syscall是系统调用&#xff08;英文&#xff1a;system call&#xff09;的指令。 想要深入了解syscall的作用&#xff0c;就需要了解特权级别。 现代计算机通常采用名为保护环&#xff08;Protection Rings&#xff09;的机制来保护整个系统的数据和功能&a…

出海 SaaS 企业增长修炼手册2:Kyligence 落地 PLG 是如何避坑的?

在第一篇文章&#xff08;点击阅读 &#x1f449; 出海 SaaS 企业增长修炼手册&#xff1a;聊聊 PLG 的关键指标、技术栈和挑战&#xff09;中&#xff0c;我们分享了 SaaS 企业在落地 PLG 战略中可能遇到的挑战以及相应的解决方案&#xff0c;今天我们将从 Kyligence 亲身实践…