Kubernetes/k8s之安全机制:

news2024/9/23 11:21:19

k8s当中的安全机制

核心是分布式集群管理工具,容器编排,安全机制核心是:API SERVER作为整个集群内部通信的中介,也是外部控制的入口,所有的安全机制都是围绕api server开设计的。

请求api资源

1、认证 2、鉴权 3、准入机制

三个条件都通过,才可以在k8s集群当中创建资源。

认证:Authentcation

HTTP TOKEN:识别合法用户。token是一个很长的特殊的编码,很复杂的一个字符串,字符串是表达客户的一种方式。

每一个token都对一个用户名,用户名存储在api'server能够访问的文字中

客户都安发起请求,http headr包含token。

客户都安发起请求-----token----apiserver(用户名存储文件)-----解码---用户名---开始访问集群。

http base:用户名加密码的验证的方式。用户名和密码都是通过加密方式base64,进行加密。加密完了之后加密完的字符串,在http requeset的heder Atuthorization 发送给服务端。服务端收到加密字符串,解码,获取用户名和密码,验证通过,登录成功。

https证书:最严格的方式,也是最严格的方式,基于CA根证书签名的客户端身份认证的方式进行验证。

认证的访问类型:

k8s组件对apiserver组件的访问 kubelet kube-proxy

pod对api server的访问 pod coredns dashborad 都是pod,也需要访问api

客户端访问 kubectl

kubelet kube-proxy:

controller manager sheduler 与apiserver在一台服务器,可以直接使用api server的非安全端口进行访问。(8080端口)

kubectl kubelet kube-proxy 都是通过api server的https证书进行双向验证。进行双向验证,都是用6443端口进行验证。

签发证书

1、手动签发 二进制部署就是手动签发证书 ca签发把证书匹配到每个对应组件访问6443即可

2、自动签发,kubeadm, kubelet第一次访问api server使用api server使用token,token通过之后,controller mannager会为kubelet生成一个证书,以后都是通过证书访问。kubeadm修改了证书的有效期,默认一年

3、kubeconfig文件包含集群的参数,ca证书,API server地址,还存储了客户端的参数(客户端证书和私钥),集群的名称和用户名

整个k8s的组件都是通过启动时指定访问不用的kubeconfig,可以访问不同的集群----apiserver---namespace---资源对象---pod---容器

kubeconfig即是集群的描述文件,也是一个集群信息的保存文件,包含了集群的访问方式和认证信息。

~/.kube/config保存是kubectl的访问认证信息。

4、serviceAcount:

serviceAcount就是为了方便pod中容器来访问API server。pod的动作(增删改查)动态的,每个pod手动生成一个证书就不现实。

k8s使用的service Account来循环,不需要单独创建,service Account里面包含了统一的认证信息,直接进行api'service访问。

5、secret,保存资源对象,serviceAccount内部,保存的token service-account0token

secret保存的是自定义的保密信息。

6、serviceAcount:

1、token

2、ca.crt

3、namespace

都会被自动的挂载到pod当中去

二、鉴权:之前的认证过程,只是确认了双方都是可信的,可以相互通信的,鉴权是为了确定请求方的访问权限

能做哪些指定的操作。

1、AlwaysDeny:拒绝所有,一般是测试

2、AlwaysAllow:允许所有,用测试

3、ABAC attribute-based access control 基于属性的访问控制

4、webhook:外部访问集群内部的鉴权方式

5、RBAC:role-base access control基于角色的访问控制,也是k8s默认的规则机制

第一个叫做角色 role:指定命名空间的资源控制权限

rolebinding::将角色绑定到指定的命名空间

 还有集群

clustrole:可以授权所有命名空间的资源控制权限

clusterrolebinding:将集群的角色绑定到命名空间

准入控制:

是apiserve的一个准入控制器的一个插入列表,不同的插件可以实现不同的准入控制机制,一般情况下建议使用官方默认的准入控制器

limitranger命名空间的配额管理

serviceAccount

resourceQuota:命名空间的配额限制。

实验不同用户管理自己命名空间

useradd lucky

passwd lucky
mkdir /opt/lucky
chmod +x cfssl+
将三个cfssl cfssljson cfssl-cerinfo赋权  
vim user-lucky.sh
cat > lucky-csr.json << EOF
{
 "CN": "lucky",
 "hosts": [],
 "key":{
   "algo":"ras"
   "size": 2048
 },
 "names": [
   {
     "C": "CN",
     "ST": "Nanjing",
     "L": "k8s",
     "OU": "system"
   }

 ]
}
EOF 
cfssl gencert -ca=ca.crt -ca-key=ca.key -profile=kubernets /opt/u=lucky/lucky-csr.json | cfssljson -bare lucky

vim rbac-kubeconfig.sh
APISERVER=$1
# 设置集群参数
export KUBE_APISERVER="https://$APISERVER:6443"
kubectl config set-cluster kubernetes \
  --certificate-authority=/etc/kubernetes/pki/ca.crt \
  --embed-certs=true \
  --server=${KUBE_APISERVER} \
  --kubeconfig=lucky.kubeconfig
# 设置客户端认证参数
kubectl config set-credentials lucky \
  --client-key=/etc/kubernetes/pki/lucky-key.pem \
  --client-certificate=/etc/kubernetes/pki/lucky.pem \
  --embed-certs=true \
  --kubeconfig=lucky.kubeconfig

# 设置上下文参数
kubectl config set-context kubernetes \
  --cluster=kubernetes \
  --user=lucky \
  --namespace=lucky-cloud \
  --kubeconfig=lucky.kubeconfig
kubectl create namespace lucky-cloud
chmod +x rbac-kubeconfig.sh
./rbac-kubeconfig.sh 20.0.0.92

查看证书
cat lucky.kubeconfig
mkdir /home/lucky/.kube
cp lucky.kubeconfig /home/lucky/.kube/config
chown -R lucky:lucky /home/lucky/.kube/

vim rbac.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: lucky-cloud
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "watch", "list", "create"]

---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods
  namespace: lucky-cloud
subjects:
- kind: User
  name: lucky
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io
kubectl apply -f rbac.yaml
kubectl get role,rolebinding -n lucky-cloud




kubectl get role,rolebinding -n lucky-cloud

切换用户,测试操作权限
su - lucky

vim pod-test.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-test
spec:
  containers:
    - name: nginx
      image: nginx
kubectl create -f pod-test.yaml

访问 svc 资源就会被拒绝
kubectl get svc

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

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

相关文章

Java设计模式-装饰器模式(10)

大家好,我是馆长!今天开始我们讲的是结构型模式中的装饰器模式。老规矩,讲解之前再次熟悉下结构型模式包含:代理模式、适配器模式、桥接模式、装饰器模式、外观模式、享元模式、组合模式,共7种设计模式。。 装饰器模式(Decorator Pattern) 定义 装饰(Decorator)模式…

npm安装卡住问题(最新版)

npm安装卡住问题(最新版) 背景&#xff1a; ​ 最近这两天用npm安装一些包的时候&#xff0c;发现一直卡住&#xff1a; 报错&#xff1a; idealTree:npm: sill idealTree buildDeps之前能用的现在不能用了&#xff0c;我一想&#xff0c;是不是源头的问题&#xff0c;还真是…

软考复习之UML设计篇

UML统一建模语言 构件图&#xff1a;描述系统的物理结构&#xff0c;它可以用来显示程序代码如何分解成模块 部署图&#xff1a;描述系统中硬件和软件的物理结构&#xff0c;它描述构成系统架构的软件构件&#xff0c;处理器和设备 用例图&#xff1a;描述系统与外部系统及用…

链表--104. 二叉树的最大深度/medium 理解度A

104. 二叉树的最大深度 1、题目2、题目分析3、复杂度最优解代码示例4、适用场景 1、题目 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,n…

谷粒商城配置虚拟机

一、创建虚拟机 之前有在VM里面建一个ubuntu的虚拟机&#xff0c;准备拿来直接用&#xff0c;网络设置为NAT模式&#xff0c;查看我的虚拟机是虚拟机&#xff1a;192.168.248.128 主机&#xff1a; 192.168.2.12。可以互相ping通。 二、linux安装docker Docker docker是虚拟…

OpenTCS IDEA 全流程搭建和运行指南

OpenTCS IDEA 全流程搭建和运行指南 JDK安装下载JDK版本 openTCS源码下载IDEA 打开运行查看下载源码中gradle版本号下载gradle 二进制文件配置IDEA Gradle本地仓库IDEA打开openTCS项目运行顺序 JDK安装 下载JDK版本 JDK网址 注意&#xff1a; 请下载官方文档标准的java13JDK o…

C语言零基础入门第2天《 visual studio下载安装教程和搭建开发环境及踩坑指南》(保姆级图文教程)

visual studio下载安装教程和搭建开发环境 1、 项目实战效果图2、简单了解一下目前主流的开发环境3、 visual studio下载地址4、 visual studio安装教程5、 配置visual studio环境变量 6、如何新建一个C项目7、新建第一个C程序8、用代码测试创建的项目是否可用8、如何成功让代码…

vue解决:Parsing error: No Babel config file detected for

解决babel配置问题 报错信息如下&#xff1a; Parsing error: No Babel config file detected for C:\Users\yjj\Desktop\大学\大二\学习\vue_ bags \slot_ study\src\App. vue. Either disable config file checking withrequireConfigFile: false, or configure Babel so tha…

《游戏-01_3D-开发》之—人物动画控制器

创建变量&#xff0c; 创建线&#xff0c; 连接&#xff0c; 选中线会变为蓝色&#xff0c;新增变量&#xff0c; 设置线&#xff0c; 双击子层进入子层&#xff0c; 创建变量&#xff0c; 双击SkillPanel 拖拽好之后返回上一层&#xff0c; 依次连接&#xff0c; 设置线&#…

凭服务出圈的海底捞,竟然在这件事上也很卷

1月9日&#xff0c;法大大与企业绿色发展研究院联合发布了《2023年签约减碳与低碳办公白皮书》&#xff08;点击阅读及下载&#xff1a;法大大推出“签约减碳”年度账单&#xff0c;引领低碳办公新风潮&#xff09;&#xff0c;该白皮书基于《低碳办公评价》标准倡导的创新减碳…

图像分类】【深度学习】【轻量级网络】【Pytorch版本】EfficientNet_V2模型算法详解

【图像分类】【深度学习】【轻量级网络】【Pytorch版本】EfficientNet_V2模型算法详解 文章目录 【图像分类】【深度学习】【轻量级网络】【Pytorch版本】EfficientNet_V2模型算法详解前言EfficientNet_V2讲解自适应正则化的渐进学习(Progressive Learning with adaptive Regul…

《如何画好架构图》学习笔记

看了一堂《如何画好架构图》的公开课&#xff0c;结合网上的资料与经验做一些思考总结。文中的例子和图片大多是从课程中摘录的。 1. 4R架构定义 4R架构定义其实是软件架构定义经过归纳提炼后的简称。 软件架构定义&#xff1a;软件架构是指软件系统的顶层&#xff08;Rank&am…

Vue好看的组件库:Element

文章目录 1、什么是Element2、Element快速入门3、Element布局3.1、 Layout 局部3.2、容器布局 1、什么是Element Element&#xff1a;是饿了么公司前端开发团队提供的一套基于 Vue 的网站组件库&#xff0c;用于快速构建网页 Element 提供了很多组件&#xff08;组成网页的部件…

2024-01-24(ElasticSearch)

1.mysql和elasticsearch的架构&#xff1a; 2.IK分词器利于分中文词汇。 底层是有一个中文字典&#xff0c;这个字典中的中文词汇也是可以拓展的和禁用某些词。 3.mapping常见属性&#xff1a; type&#xff1a;数据类型 index&#xff1a;是否索引 analyzer&#xff1a;分…

记录一下uniapp 集成腾讯im特别卡(已解决)

uniapp的项目运行在微信小程序 , 安卓 , ios手机三端 , 之前这个项目集成过im,不过版本太老了,0.x的版本, 现在需要添加客服功能,所以就升级了 由于是二开 , 也为了方便 , 沿用之前的webview嵌套腾讯IM的方案 , 选用uniapp集成ui ,升级之后所有安卓用户反馈点击进去特别卡,几…

构筑服务「护城河」,汽车品牌如何从 0 到 1 搭建语音质检体系

「质检」一词对于汽车行业并不陌生。商品生产商采用一定检验测试手段和检查方法测定产品的质量特性&#xff0c;从而判断产品的质量标准。 随着消费需求的多样化&#xff0c;越来越多的品牌开始重视商品背后的服务。尤其对于汽车这种高客单价的耐消品领域&#xff0c;商品带来的…

第12章_集合框架(Collection接口,Iterator接口,List,Set,Map,Collections工具类)

文章目录 第12章_集合框架本章专题与脉络1. 集合框架概述1.1 生活中的容器1.2 数组的特点与弊端1.3 Java集合框架体系1.4 集合的使用场景 2. Collection接口及方法2.1 添加2.2 判断2.3 删除2.4 其它 3. Iterator(迭代器)接口3.1 Iterator接口3.2 迭代器的执行原理3.3 foreach循…

JavaEE之多线程编程:4. 线程安全(重点!!!)

文章目录 一、观察线程不安全二、线程安全的概念三、线程不安全的原因1. 关于线程不安全的解释1. 抢占式执行2. 修改共享数据3. 原子性4. 可见性5. 指令重排序问题 四、解决之前的线程不安全的问题五、synchronized 关键字&#xff08;两个线程同时修改一个变量&#xff09;1. …

Mediasoup Demo-v3笔记(一)——框架和Nodejs的基本语法

Medisasop Demo的框架 Nodejs基本语法 后记   个人总结&#xff0c;欢迎转载、评论、批评指正

【Java】SpringMVC路径写法

1、多级路径 ✅类路径和方法路径都可以写成多级 ✅其中&#xff0c;类路径写在方法路径前面 ✅与Servlet不同&#xff0c;SpringMVC中写不写“/”都可以 RequestMapping("/hello/t1") RestController public class HelloSpring {RequestMapping( value "world…