当前位置: 首页 > news >正文

【云原生】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

  1. 把端口号对外暴露,通过IP+端口号进行访问
    使用Service里面的NodePort实现

  2. NodePort缺陷

  • 在每个节点上都会启动一个端口,在访问的时候通过任何节点,通过节点IP+暴露端口号实现访问
  • 意味着每个端口只能使用一次,一个端口对应一个应用
  • 实际访问中都是用域名,根据不同域名跳转到不同端口服务中
  1. Ingerss和Pod关系
  • pod和ingress通过service关联的
  • ingress作为统一入口,由service关联一组pod
    在这里插入图片描述
  1. ingress工作流程
    在这里插入图片描述
    ingress不是k8s内置的,需要部署。

  2. 使用ingress——以nginx为例
    第一步 部署ingress Controller
    第二步 创建ingress规则

  3. 使用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)不支持应用级别的版本管理。

  • 之前方式部署应用基本过程
  1. 编写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安装及配置仓库

  1. helm安装
    第一步:下载helm安装压缩文件,上传到Linux系统中
    第二步:解压helm压缩文件,把解压后的linux-amd64/helm目录移动到/usr/bin/ 目录下
    在这里插入图片描述
    在这里插入图片描述

  2. 配置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 listhelm status +安装之后名称
    在这里插入图片描述
    在这里插入图片描述
    从下图可以看到,目前ui-weave-scope并没有对外暴露端口,需要修改service类型为“NodePort”
    在这里插入图片描述

** 修改service的yaml文件,type改为NodePort

kubectl get svc
kubectl edit svc + 名称

在这里插入图片描述
再次查看,既可以看到对外暴露的端口号。
在这里插入图片描述

8. 自己创建chart

  1. 使用命令创建Chart
    helm create chart名称
    在这里插入图片描述
    在这里插入图片描述
  • Chart.yaml:用于描述这个 Chart 的基本信息,包括名字、描述信息以及版本等。
  • values.yaml :用于存储 templates 目录中模板文件中用到变量的值(全局变量)。
  • Templates: 目录里面存放所有 yaml 模板文件。
  • charts:目录里存放这个 chart
  1. 在 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

在这里插入图片描述

  1. 安装mychart
    安装前删除已存在的nginx:kubectl delete deployment pod名称
kubectl install web1 mychartkubectl get svc

在这里插入图片描述

  1. 应用升级
    helm upgrade chart名称 目录
helm upgrade web1 mychart/

在这里插入图片描述

9. 实现yaml高效复用

通过传递参数,动态渲染模板,yaml内容动态传入参数生成。
在chart里有一个values.yaml文件,定义yaml文件全局变量。

yaml 文件大体有几个地方不同

  • image
  • tag
  • label
  • port
  • replicas
  1. 在values.yaml定义变量和值
    在这里插入图片描述

  2. 在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

  1. PV:持久化存储,对存储资源进行抽象,对外提供可以调用的地方(生产者)

  2. PVC:用于调用,不需要关心内部实现细节(消费者)

  3. 实现流程
    在这里插入图片描述
    pv相当于物理主机,pvc相当于电脑中的C盘D盘等存储磁盘,必须依赖于主机存在,类似于pvc必须要绑定pv

  4. 步骤
    ①在pv目录下创建两个yaml文件,pv.yamlpvc.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绝大多数使用手动探测,即通过搜索危险函数的方式进行漏洞寻找,以此来提升审计能力&#xf…...

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&#xff1a;监听单个ref的值&#xff0c;直接监听例子2&#xff1a;监听多个ref的值&#xff0c;采用数组形式例子3&#xff1a;深度监听例子4&#xff1a;监听reactive响应式对象单一属性&#xff0c;采用回调函数的…...

GlassFish的安装与使用

一、产品下载与安装glassfish下载地址&#xff1a;https://download.oracle.com/glassfish/5.0.1/release/index.html下载后解压即完成安装&#xff0c;主要目录说明&#xff1a;bin目录&#xff1a;为asadmin命令所在目录。glassfish为主目录&#xff1a;glassfish\bin目录为命…...

【java】Java 重写(Override)与重载(Overload)

文章目录重写(Override)方法的重写规则Super 关键字的使用重载(Overload)重载规则实例重写与重载之间的区别总结重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变&#xff0c;核心重写&#xff01; 重写的好处在于…...

OpenCV-PyQT项目实战(12)项目案例08:多线程视频播放

欢迎关注『OpenCV-PyQT项目实战 Youcans』系列&#xff0c;持续更新中 OpenCV-PyQT项目实战&#xff08;1&#xff09;安装与环境配置 OpenCV-PyQT项目实战&#xff08;2&#xff09;QtDesigner 和 PyUIC 快速入门 OpenCV-PyQT项目实战&#xff08;3&#xff09;信号与槽机制 …...

面向对象设计模式:结构型模式之装饰器模式

文章目录一、引入二、装饰器模式2.1 Intent 意图2.2 Applicability 适用性2.3 类图2.4 优缺点2.5 应用实例&#xff1a;Java IO 类2.6 应用实例&#xff1a;咖啡馆订购系统一、引入 咖啡馆订购系统 Initial 初始 4 种咖啡 House blend (混合咖啡)Dark Roast (深度烘培)Decaf (…...

Unity iOS 无服务器做一个排行榜 GameCenter

排行榜需求解决方案一(嗯目前只有一)UnityEngine.SocialPlatformsiOS GameCenterAppStoreConnect配置Unity 调用(如果使用GameCenter系统的面板&#xff0c;看到这里就可以了&#xff09;坑(需要获取数据做自定义面板的看这里)iOS代码Unity 代码吐槽需求 需求&#xff1a;接入…...

现在招个会自动化测试的人是真难呀~你会个锤子的自动化测试

现在招个会自动化测试的人是真难呀~ 前一段时间公司计划要招2个自动化测试到岗&#xff0c;同事面试了十几个来应聘的人&#xff0c;发现一个很奇怪的现象&#xff0c;在面试的时候&#xff0c;如果问的是框架API、脚本编写这些问题&#xff0c;基本上所有人都能对答如流&…...

OracleDatabase——数据库表空间dmp导出与导入

由于公司的程序一直部署在客户现场内网&#xff0c;内网调试难度高&#xff0c;一般是有备份还原数据库的需求&#xff0c;这里简记备份&#xff08;导出&#xff09;数据库dmp文件与恢复&#xff08;导入&#xff09;的步骤。 一、导出dmp文件 exp与expdp命令异同 相同点&a…...

20张图带你彻底了解ReentrantLock加锁解锁的原理

哈喽大家好&#xff0c;我是阿Q。 最近是上班忙项目&#xff0c;下班带娃&#xff0c;忙的不可开交&#xff0c;连摸鱼的时间都没有了。今天趁假期用图解的方式从源码角度给大家说一下ReentrantLock加锁解锁的全过程。系好安全带&#xff0c;发车了。 简单使用 在聊它的源码…...

Dockerfile构建Springboot镜像

Dockerfile构建Springboot镜像 文章目录 Dockerfile构建Springboot镜像 简介实例演示 前期准备 Docker环境Springboot项目Dockerfile文件 Windows 要求构建镜像启动测试 Linux 要求构建镜像启动测试 简介 容器技术大流行的时代&#xff0c;也是docker大流行的时代。 此文…...

从深分页查询到覆盖索引

最近看到一道面试题&#xff0c;如何优化深分页查询 最简单的例子是 select * from web_bill_main limit 30000,10;分页达到30000行&#xff0c;需要把前面29999行都过滤掉&#xff0c;才能找到这10条数据 所以整体时间花了80ms(工具显示时间) 我当时的第一反应是&#xff0…...

Go语言学习的第三天--下部分(Gin框架的基础了解)

每天都会分享Go的知识&#xff0c;喜欢的朋友关注一下。每天的学习分成两部分基础&#xff08;必要的&#xff0c;基础不牢地动山摇&#xff09;&#xff0c;另一部分是Go的一些框架知识&#xff08;会不定时发布&#xff0c;因为小Wei也是一名搬砖人&#xff09;。但是可以保证…...

JDK的动态代理(powernode 文档)(内含源代码)

JDK的动态代理&#xff08;powernode 文档&#xff09;&#xff08;内含源代码&#xff09; 源代码下载链接地址&#xff1a;https://download.csdn.net/download/weixin_46411355/87546086 一、动态代理 目录JDK的动态代理&#xff08;powernode 文档&#xff09;&#xff0…...

构建个人技能知识库:从Markdown管理到自动化实践

1. 项目概述&#xff1a;一个技能库的诞生与价值最近在整理个人知识体系时&#xff0c;我一直在思考一个问题&#xff1a;如何将那些零散的、跨领域的“技能点”系统化地管理起来&#xff0c;形成一个可以持续迭代、随时取用的个人工具箱&#xff1f;这不仅仅是写一份简历上的技…...

5个Zutilo技巧让你成为Zotero文献管理高手

5个Zutilo技巧让你成为Zotero文献管理高手 【免费下载链接】Zutilo Zotero plugin providing some additional editing features 项目地址: https://gitcode.com/gh_mirrors/zu/Zutilo 还在为Zotero的批量操作烦恼吗&#xff1f;每天面对成百上千的文献条目&#xff0c;…...

imFile下载管理器:从入门到精通的免费全能下载解决方案

imFile下载管理器&#xff1a;从入门到精通的免费全能下载解决方案 【免费下载链接】imfile-desktop A full-featured download manager. 项目地址: https://gitcode.com/gh_mirrors/im/imfile-desktop imFile是一款功能全面的免费下载管理器&#xff0c;支持HTTP、FTP、…...

STM32实战:手把手教你用Cubemx配置交流充电桩的CP信号检测(附代码)

STM32实战&#xff1a;从零构建充电桩CP信号检测系统 充电桩作为新能源汽车基础设施的核心组件&#xff0c;其通信协议的可靠性直接关系到充电安全。在实际工程中&#xff0c;CP&#xff08;Control Pilot&#xff09;信号的检测往往是开发者的第一个技术拦路虎。我曾在一个海外…...

APK安装器终极指南:在Windows上轻松安装安卓应用的5个简单步骤

APK安装器终极指南&#xff1a;在Windows上轻松安装安卓应用的5个简单步骤 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否想在Windows电脑上直接运行安卓应用&a…...

终极指南:3分钟学会在Windows电脑上安装安卓应用

终极指南&#xff1a;3分钟学会在Windows电脑上安装安卓应用 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾经想过在Windows电脑上直接运行手机应用&#xff…...

利用MCP协议与Crypto APIs为AI助手集成多链交易数据查询能力

1. 项目概述&#xff1a;一个为AI助手注入区块链洞察力的MCP服务器 如果你和我一样&#xff0c;日常开发中经常需要查询不同区块链上的交易详情——比如验证一笔以太坊上的USDT转账是否成功&#xff0c;或者追溯某个比特币地址的资金来源——那你肯定体会过在十几个浏览器标签…...

地表温度反演进阶:对比单窗算法与大气校正法,用ENVI/ERDAS分析Landsat 7 ETM+数据哪个更准?

地表温度反演技术深度对比&#xff1a;单窗算法与大气校正法的实战解析 遥感技术在地表温度反演领域的应用已经发展出多种成熟算法&#xff0c;其中单窗算法和大气校正法&#xff08;RTE&#xff09;是最为常用的两种方法。对于中高级遥感用户而言&#xff0c;理解这两种算法的…...

ANSYS Workbench网格进阶:巧用‘Face Meshing’与‘Sweep’扫掠,让你的轴承座仿真既快又准

ANSYS Workbench网格进阶&#xff1a;巧用‘Face Meshing’与‘Sweep’扫掠提升轴承座仿真效率 轴承座作为机械传动系统中的关键部件&#xff0c;其应力分布与变形分析的准确性直接影响设备可靠性评估。传统四面体网格虽能快速生成&#xff0c;但在应力集中区域往往需要极高密度…...

GPTs 商店深度观察:超级 Agent 的孵化器?

GPTs 商店深度观察:会是下一代超级 AI Agent 的全民孵化器吗? 摘要/引言 2024年6月,OpenAI官方公布了一组数据:GPTs商店上线仅7个月,平台上的自定义GPT数量已经突破1200万,月活使用用户超过8000万,累计为开发者创造的分成收入超过3.2亿美元。这个上线之初被很多业内人士…...