【云原生】k8s核心技术—集群安全机制 Ingress Helm 持久化存储-20230222
文章目录
- 一、k8s集群安全机制
- 1. 概述
- 2. RBAC——基于角色的访问控制
- 二、Ingress
- 三、Helm
- 1. 引入
- 2. 使用功能Helm可以解决哪些问题
- 3. 介绍
- 4. 3个重要概念
- 5. helm 版本变化
- 6. helm安装及配置仓库
- 7. 使用helm快速部署应用
- 8. 自己创建chart
- 9. 实现yaml高效复用
- 四、持久化存储
- 1.nfs—网络存储
- 2. PV和PVC
一、k8s集群安全机制
1. 概述
(1)访问k8s集群的时候,需要经过三个步骤完成具体操作
第一步:认证
第二步:鉴权(授权)
第三步:准入控制
(2)进行访问的时候,过程中都需要经过apiserver,apiserver做统一协调,比如门卫。
访问过程中需要证书、token、或者用户名+密码
如果访问pod,需要serverAccount。
- 第一步 认证 传输安全
*传输安全:对外不暴露8080端口,只能内部访问,对外部使用端口6443
*认证
客户端身份认证常用方式:
- https证书认证,基于ca证书
- http token认证,通过token识别用户
- http基本认证,用户名+密码认证
第二步 鉴权(授权)
- 基于RBAC进行鉴权操作
- 基于角色访问控制
第三步 准入控制
- 就是准入控制器的列表,如果列表有请求内容,通过,没有则拒绝
2. RBAC——基于角色的访问控制
- 角色
role:特定命名空间访问权限
ClusterRole:所有命名空间访问权限
- 角色绑定
rolebinding:角色绑定到主体
ClusterRoleBinding:集群角色绑定到主体
- 主体
user:用户
group:用户组
serviceAccount:服务账号
例子:
二、Ingress
-
把端口号对外暴露,通过IP+端口号进行访问
使用Service里面的NodePort实现 -
NodePort缺陷
- 在每个节点上都会启动一个端口,在访问的时候通过任何节点,通过节点IP+暴露端口号实现访问
- 意味着每个端口只能使用一次,一个端口对应一个应用
- 实际访问中都是用域名,根据不同域名跳转到不同端口服务中
- Ingerss和Pod关系
- pod和ingress通过service关联的
- ingress作为统一入口,由service关联一组pod
-
ingress工作流程
ingress不是k8s内置的,需要部署。 -
使用ingress——以nginx为例
第一步 部署ingress Controller
第二步 创建ingress规则 -
使用ingress对外暴露应用
(1)创建nginx应用,对外暴露端口使用NodePort
(2)部署ingress controller,详细yaml文件内容参考这篇文章
(3)创建ingress规则
(4)在Windows系统hosts文件中添加域名访问规则
没看懂没关系,详细操作以及yaml文件参考文章通过域名访问服务
三、Helm
1. 引入
K8S上的应用对象,都是由特定的资源描述组成,包括 deployment、service 等。都保存各自文件中或者集中写到一个配置文件。然后 kubectl apply –f 部署。如果应用只由一个或几个这样的服务组成,上面部署方式足够了。而对于一个复杂的应用,会有很多类似上面的资源描述文件,例如微服务架构应用,组成应用的服务可能多达十个,几十个。如果有更新或回滚应用的需求,可能要修改和维护所涉及的大量资源文件,而这种组织和管理应用的方式就显得力不从心了。且由于缺少对发布过的应用版本管理和控制,使Kubernetes 上的应用维护和更新等面临诸多的挑战,主要面临以下问题:(1)如何将这些服务作为一个整体管理 (2)这些资源文件如何高效复用 (3)不支持应用级别的版本管理。
- 之前方式部署应用基本过程
- 编写yaml文件
1.1 deployment
1.2 service
1.3 ingress
缺陷:
- 如果使用之前方式部署单一应用,少数服务的应用,比较合适
- 比如部署微服务项目,可能有几十个服务,每个服务都有一套yaml文件,需要维护大量yaml文件,版本管理特别不方便
2. 使用功能Helm可以解决哪些问题
(1)使用helm可以把这些yaml作为一个整体管理
(2)实现yaml高效复用
(3)使用helm实现应用级别的版本管理
3. 介绍
Helm 是一个 Kubernetes 的包管理工具,就像 Linux 下的包管理器,如 yum / apt 等,可以很方便的将之前打包好的 yaml 文件部署到 kubernetes 上。
4. 3个重要概念
(1)helm:一个命令行客户端工具,主要用于 Kubernetes 应用 chart 的创建、打包、发布和管理。
(2)Chart:应用描述,一系列用于描述 k8s 资源相关文件的集合。(把yaml打包,是yaml的集合)
(3)Release:基于 Chart 的部署实体,一个 chart 被 Helm 运行后将会生成对应的一个release;将在 k8s 中创建出真实运行的资源对象。(基于chart 部署实体,应用级别的版本管理)
5. helm 版本变化
2019年11月13 日,Helm 团队发布 Helm v3 的第一个稳定版本。
本主要变化如下:
(1)V3版本删除Tiller
(2)Release 名称可以在不同命名空间重用
(3)支持将 Chart 推送至 Docker 镜像仓库中
6. helm安装及配置仓库
-
helm安装
第一步:下载helm安装压缩文件,上传到Linux系统中
第二步:解压helm压缩文件,把解压后的linux-amd64/helm目录移动到/usr/bin/ 目录下
-
配置helm仓库
微软仓库(http://mirror.azure.cn/kubernetes/charts)这个仓库推荐,基本上官网有的 chart 这里都有。
阿里云仓库(https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts )
官方仓库(https://hub.kubeapps.com/charts/incubator)官方 chart 仓库,国内有点不好使。
(1)添加仓库
helm repo add 仓库名称 仓库地址
helm repo add stable http://mirror.azure.cn/kubernetes/charts
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
(2)更新仓库地址
helm repo update
(3)删除仓库
helm repo remove aliyun
7. 使用helm快速部署应用
第一步:使用命令搜索应用
helm search repo 名称
(weave)
第二步:根据搜索内容选择安装
helm install 安装之后的名称 搜索之后的应用名称
- 查看安装之后状态
helm list
或helm status +安装之后名称
从下图可以看到,目前ui-weave-scope并没有对外暴露端口,需要修改service类型为“NodePort”
** 修改service的yaml文件,type改为NodePort
kubectl get svc
kubectl edit svc + 名称
再次查看,既可以看到对外暴露的端口号。
8. 自己创建chart
- 使用命令创建Chart
helm create chart名称
- Chart.yaml:用于描述这个 Chart 的基本信息,包括名字、描述信息以及版本等。
- values.yaml :用于存储 templates 目录中模板文件中用到变量的值(全局变量)。
- Templates: 目录里面存放所有 yaml 模板文件。
- charts:目录里存放这个 chart
- 在 templates 文件夹创建2个yaml文件
- deployment.yaml
- service.yaml
kubectl create deployment web1 --image=nginx --dry-run -o yaml > deployment.yamlkubectl expose deployment web1 --port=80 --target-port=80 --type=NodePort --dry-run -o yaml > service.yaml
- 安装mychart
安装前删除已存在的nginx:kubectl delete deployment pod名称
kubectl install web1 mychartkubectl get svc
- 应用升级
helm upgrade chart名称 目录
helm upgrade web1 mychart/
9. 实现yaml高效复用
通过传递参数,动态渲染模板,yaml内容动态传入参数生成。
在chart里有一个values.yaml文件,定义yaml文件全局变量。
yaml 文件大体有几个地方不同
- image
- tag
- label
- port
- replicas
-
在values.yaml定义变量和值
-
在templates的yaml文件使用values.yaml定义变量的值
通过表达式形式使用全局变量:{{ .Values.变量名称}}
或{{ .Release.Name}}
四、持久化存储
数据卷 emptydir,是本地存储,pod重启,数据不存在了,需要对数据持久化存储。
1.nfs—网络存储
pod 重启,数据仍然存在
- 第一步:找一台服务器nfs服务端
(1)安装nfs
yum install -y nfs-utils
(2)设置挂载路径
vim /etc/exports
/data/nfs *(rw,no_root_squash)
检查:
执行如下命令,如果报错会有提示,修改/etc/exports文件即可。
exportfs -r # 不报错即可
(3)挂载路径需要创建出来,这里的挂在路径为:/data/nfs
-
第二步:在k8s集群node节点安装nfs,所有节点都要装
yum install -y nfs-utils
-
第三步:在nfs服务器启动nfs服务
systemctl start nfs
ps -ef | grep nfs
-
第四步:在k8s集群部署应用使用nfs持久网络存储
①在pv目录下创建nfs-nginx.yaml
文件,将下述代码复制进去:
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-dep1
spec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginxvolumeMounts:- name: wwwrootmountPath: /usr/share/nginx/htmlports:- containerPort: 80volumes:- name: wwwrootnfs:server: 192.168.2.6 ## nfs服务器IPpath: /data/nfs ## nfs服务器挂在路径
②运行yaml文件
kubevtl apply -f nfs-nginx.yaml
③查看
kubectl get pods
④在nfs服务器中,目录/data/nfs/下创建index.yaml
文件,编辑内容
⑤进入master中创建的pod中,查看index.yaml文件存在,查看内容
kubectl exec -it [pod 名称] bash
⑥暴露端口号
kubectl expose deployment nginx-dep1 --port=80 --target-port=80 --type=NodePort
⑦访问nginx显示编辑的内容
2. PV和PVC
-
PV:持久化存储,对存储资源进行抽象,对外提供可以调用的地方(生产者)
-
PVC:用于调用,不需要关心内部实现细节(消费者)
-
实现流程
pv相当于物理主机,pvc相当于电脑中的C盘D盘等存储磁盘,必须依赖于主机存在,类似于pvc必须要绑定pv -
步骤
①在pv目录下创建两个yaml文件,pv.yaml
和pvc.yaml
,分别将下述内容复制到对应yaml文件中:
pv.yaml内容:
apiVersion: v1
kind: PersistentVolume
metadata:name: my-pv
spec:capacity:storage: 5GiaccessModes:- ReadWriteManynfs:path: /data/nfs ## nfs服务器中挂在路径server: 192.168.2.6 ## nfs服务器IP
pvc.yaml内容:
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-dep1
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginxvolumeMounts:- name: wwwrootmountPath: /usr/share/nginx/htmlports:- containerPort: 80volumes:- name: wwwrootpersistentVolumeClaim:claimName: my-pvc---apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: my-pvc
spec:accessModes:- ReadWriteManyresources:requests:storage: 5Gi
②运行两个yaml文件
kubectl apply -f pv.yaml
kubectl apply -f pvc.yaml
③查看
kubectl get pods
kubectl get pv,pvc
④进入任意一个创建的pod中,由于副本数为3,所以我们随便进一个,就会有和nfs服务器一样的index.html文件
kubectl exec -it nginx-dep1-58b7bf955f-7s8hp bash
相关文章:
【云原生】k8s核心技术—集群安全机制 Ingress Helm 持久化存储-20230222
文章目录一、k8s集群安全机制1. 概述2. RBAC——基于角色的访问控制二、Ingress三、Helm1. 引入2. 使用功能Helm可以解决哪些问题3. 介绍4. 3个重要概念5. helm 版本变化6. helm安装及配置仓库7. 使用helm快速部署应用8. 自己创建chart9. 实现yaml高效复用四、持久化存储1.nfs—…...
【Linux】实现简易的Shell命令行解释器
大家好我是沐曦希💕 文章目录一、前言二、准备工作1.输出提示符2.输入和获取命令3.shell运行原理4.内建命令5.替换三、整体代码一、前言 前面学到了进程创建,进程终止,进程等待,进程替换,那么通过这些来制作一个简易的…...
再获认可!腾讯安全NDR获Forrester权威推荐
近日,国际权威研究机构Forrester发布最新研究报告《The Network Analysis And Visibility Landscape, Q1 2023》(以下简称“NAV报告”),从网络分析和可视化(NAV)厂商规模、产品功能、市场占有率及重点案例等…...
代码审计之旅之百家CMS
前言 之前审计的CMS大多是利用工具,即Seay昆仑镜联动扫描出漏洞点,而后进行审计。感觉自己的能力仍与零无异,因此本次审计CMS绝大多数使用手动探测,即通过搜索危险函数的方式进行漏洞寻找,以此来提升审计能力…...
ONLYOFFICE中利用chatGPT帮助我们策划一场生日派对
近日,人工智能chatGPT聊天机器人爆火,在去年年底发布后,仅仅两个月就吸引了全球近一亿的用户,成为史上最快的应用消费程序,chatGPT拥有强大的学习和交互能力 可以被学生,教师,上班族各种职业运…...
Java面试题-线程(一)
在典型的 Java 面试中, 面试官会从线程的基本概念问起, 如:为什么你需要使用线程,如何创建线程,用什么方式创建线程比较好(比如:继承 thread 类还是调用 Runnable 接口),…...
一篇普通的bug日志——bug的尽头是next吗?
文章目录[bug 1] TypeError: method object is not subscriptable[bug 2] TypeError: unsupported format string passed to numpy.ndarray.__format__[bug 3] ValueError:Hint: Expected dtype() paddle::experimental::CppTypeToDataType<T>::Type()[bug 4] CondaSSLE…...
Vue 3 第八章:Watch侦听器
文章目录Watch侦听器1. 基础概念1.1. Watch的基本用法例子1:监听单个ref的值,直接监听例子2:监听多个ref的值,采用数组形式例子3:深度监听例子4:监听reactive响应式对象单一属性,采用回调函数的…...
GlassFish的安装与使用
一、产品下载与安装glassfish下载地址:https://download.oracle.com/glassfish/5.0.1/release/index.html下载后解压即完成安装,主要目录说明:bin目录:为asadmin命令所在目录。glassfish为主目录:glassfish\bin目录为命…...
【java】Java 重写(Override)与重载(Overload)
文章目录重写(Override)方法的重写规则Super 关键字的使用重载(Overload)重载规则实例重写与重载之间的区别总结重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写! 重写的好处在于…...
OpenCV-PyQT项目实战(12)项目案例08:多线程视频播放
欢迎关注『OpenCV-PyQT项目实战 Youcans』系列,持续更新中 OpenCV-PyQT项目实战(1)安装与环境配置 OpenCV-PyQT项目实战(2)QtDesigner 和 PyUIC 快速入门 OpenCV-PyQT项目实战(3)信号与槽机制 …...
面向对象设计模式:结构型模式之装饰器模式
文章目录一、引入二、装饰器模式2.1 Intent 意图2.2 Applicability 适用性2.3 类图2.4 优缺点2.5 应用实例:Java IO 类2.6 应用实例:咖啡馆订购系统一、引入 咖啡馆订购系统 Initial 初始 4 种咖啡 House blend (混合咖啡)Dark Roast (深度烘培)Decaf (…...
Unity iOS 无服务器做一个排行榜 GameCenter
排行榜需求解决方案一(嗯目前只有一)UnityEngine.SocialPlatformsiOS GameCenterAppStoreConnect配置Unity 调用(如果使用GameCenter系统的面板,看到这里就可以了)坑(需要获取数据做自定义面板的看这里)iOS代码Unity 代码吐槽需求 需求:接入…...
现在招个会自动化测试的人是真难呀~你会个锤子的自动化测试
现在招个会自动化测试的人是真难呀~ 前一段时间公司计划要招2个自动化测试到岗,同事面试了十几个来应聘的人,发现一个很奇怪的现象,在面试的时候,如果问的是框架API、脚本编写这些问题,基本上所有人都能对答如流&…...
OracleDatabase——数据库表空间dmp导出与导入
由于公司的程序一直部署在客户现场内网,内网调试难度高,一般是有备份还原数据库的需求,这里简记备份(导出)数据库dmp文件与恢复(导入)的步骤。 一、导出dmp文件 exp与expdp命令异同 相同点&a…...
20张图带你彻底了解ReentrantLock加锁解锁的原理
哈喽大家好,我是阿Q。 最近是上班忙项目,下班带娃,忙的不可开交,连摸鱼的时间都没有了。今天趁假期用图解的方式从源码角度给大家说一下ReentrantLock加锁解锁的全过程。系好安全带,发车了。 简单使用 在聊它的源码…...
Dockerfile构建Springboot镜像
Dockerfile构建Springboot镜像 文章目录 Dockerfile构建Springboot镜像 简介实例演示 前期准备 Docker环境Springboot项目Dockerfile文件 Windows 要求构建镜像启动测试 Linux 要求构建镜像启动测试 简介 容器技术大流行的时代,也是docker大流行的时代。 此文…...
从深分页查询到覆盖索引
最近看到一道面试题,如何优化深分页查询 最简单的例子是 select * from web_bill_main limit 30000,10;分页达到30000行,需要把前面29999行都过滤掉,才能找到这10条数据 所以整体时间花了80ms(工具显示时间) 我当时的第一反应是࿰…...
Go语言学习的第三天--下部分(Gin框架的基础了解)
每天都会分享Go的知识,喜欢的朋友关注一下。每天的学习分成两部分基础(必要的,基础不牢地动山摇),另一部分是Go的一些框架知识(会不定时发布,因为小Wei也是一名搬砖人)。但是可以保证…...
JDK的动态代理(powernode 文档)(内含源代码)
JDK的动态代理(powernode 文档)(内含源代码) 源代码下载链接地址:https://download.csdn.net/download/weixin_46411355/87546086 一、动态代理 目录JDK的动态代理(powernode 文档)࿰…...
第1章 多线程基础
第1章 多线程基础 1.1.2 线程与进程的关系 进程可以看成是线程的容器,而线程又可以看成是进程中的执行路径。 1.2 多线程启动 线程有两种启动方式:实现Runnable接口;继承Thread类并重写run()方法。 执行进程中的任务时才会产生线程&a…...
Linux基本指令(一)
文章目录文件操作文档操作系统管理网络通信备份压缩Ctrl Alt T 打开终端 文件操作 1.复制文件 cp afile bfile (将名为afile的文件复制到名为bfile的文件夹中,如果bfile文件不存在,系统将会创建此文件,如果bfile文件已经存在&a…...
el-dialog子组件在mounted周期内获取不到dom?
el-dialog子组件在mounted周期内获取不到dom?一、问题描述二、分析原因三、猜测正常父子组件在mounted生命周期内可以获得dom 父created—子created—子mounted—父mounted----子updated—父updated 一、问题描述 ** el-dialog控制显示隐藏是css控制的display&…...
第九章 opengl之光照(光照贴图)
OpenGL光照贴图漫反射贴图镜面光贴图光照贴图 一个物体的不同部分是不同的材质,那么会有不同的环境光和漫反射颜色表现。 漫反射贴图 原理就是:纹理。 是对同样的原理使用了不同的名字:其实都是使用一张覆盖物体的图像,让我们能…...
JDK动态代理(powernode CD2207 video)(内含教学视频+源代码)
JDK动态代理(powernode CD2207 video)(内含教学视频源代码) 教学视频原代码下载链接地址:https://download.csdn.net/download/weixin_46411355/87545977 目录JDK动态代理(powernode CD2207 video…...
【Linux】Sudo的隐晦bug引发的一次业务问题排查
Sudo的隐晦bug引发的一次业务问题排查写在前面问题描述问题排查高负载现象排查日志排查跟踪任务调度过程Sudo引发的问题手动复现问题分析处理方案写在前面 记录一次生产环境sudo启动进程频繁被Kill且不报错的异常处理过程,如果遇到同样的问题只想要解决方案&#x…...
Java VisualVM 安装 Visual GC 插件图文教程
文章目录1. 通过运行打开 Java VisualVM 监控工具2. 菜单栏初始视图说明3. 工具插件菜单说明4. 手工安装插件5. 重启监控工具查看 Visual GC1. 通过运行打开 Java VisualVM 监控工具 首先确保已安装 Java 环境,如此处安装版本 JDK 1.8.0_161 C:\Users\niaonao>j…...
【C语言】详解静态变量static
关键字static 在C语言中:static是用来修饰变量和函数的static主要作用为:1. 修饰局部变量-静态局部变量 2. 修饰全局变量-静态全局变量3. 修饰函数-静态函数在讲解静态变量之前,我们应该了解静态变量和其他变量的区别: 修饰局部变量 //代码1 #include &l…...
SpringBoot整合ElasticSearch实现模糊查询,排序,分页,高亮
目录 前言 1.框架集成-SpringData-整体介绍 1.1Spring Data Elasticsearch 介绍 2.框架集成Spring Data Elasticsearch 2.1版本说明 2.2.idea创建一个springboot项目 2.3.导入依懒 2.3.增加配置文件 2.4Spring Boot 主程序。 2.5.数据实体类 2.6.配置类 2.7.DAO 数据…...
YARN基本架构
主要由ResourceManager、NodeManager、ApplicationMaster和Container等组件构成,如图所YA示。 ResourceManager(RM) RM是全局资源管理器,负责整个系统的资源管理和分配 主要由两个组件构成:Scheduler调度器和应用程序…...
惠州市建设局人员备案网站/瑞金网络推广
dymDemo dym 分布式开发框架 Demo 熔断 限流 事件总线(包括基于内存的、rabbitmq的) CQRS DDD 实例 随后更新dym 分布式开发框架 dym 是一个分布式开发框架,同时支持 .net core2.2 、.net frameworker4.6.1。1、运行Demo 第一步:启…...
小程序可以用手机网站吗/代运营公司前十名
科技的发展给我们的工作生活带了很大变化,生活在数字世界中是我们理所当然的便利,但是当你突然发现拍摄的精美照片丢失、收藏的音乐消失了、重要的文档也找不到了,这时的心情恐怕不是用痛苦能够形容的。对于某些人来说,将文件拖放…...
ipv6域名解析 做网站/列表网推广收费标准
某天晚上凌晨突然收到一封国外boss的需求文件过来,附件夹带着一个excel文件,没来得及看密密麻麻的英文邮件内容,怀着忐忑不安的心情打开附件,以为又是一个难搞的复杂需求,结果内容只有一条。关掉附件,常出了…...
做网站需要板块/电脑培训学校排名
常见的排序(java)1.冒泡排序2.选择排序3.快速排序4.插入排序5.归并排序1.冒泡排序 说明:相邻元素之间进行比较,坐标小的数比坐标大的数大时,进行交换,每轮都会使这一轮范围内的最大的数放到底部࿰…...
做同步网站/怎么在百度免费推广
#监听用户打开的应用程序# (重点) 时时刻刻监听某些操作的行为,watch dog 看门狗 任务栈:管理activity,一个应用就有一个任务栈,打开所有的activity都存放在任务栈在服务中跳转activity必须给要跳转的act…...
怎么开网站/青岛网络推广公司哪家好
大家好,经常有读者说自己动力不足,并问我该如何学习和坚持?该如何找资料学习?我想说的是,除了必要的个人努力和坚持外,还需要有好的榜样和资料。今天给大家介绍一些公众号,号主来源于百度、阿里…...