Kubernetes Dashboard
Minikube 环境搭建
Kubernetes 的基本架构
Kubernetes 声明式语言 YAML
YAML操作Kubernetes核心对象
CentOs搭建Kubernetes集群
Kubernetes进阶对象Deployment、DaemonSet、Service
Kubernetes进阶对象Ingress、Ingress Class、Ingress Controller
Kubernetes集群部署项目实践
Kubernetes高级对象PersistentVolume、PersistentVolumeClaim、StorageClass
CentOS部署NFS
Kubernetes使用NFS实现数据持久化
Kubernetes高级对象StatefulSet
Kubernetes 应用滚动更新
Kubernetes 容器资源管理Resources和探针Probe
Kubernetes 名称空间Namespace
Kubernetes 系统监控Metrics Server、HorizontalPodAutoscaler、Prometheus
Kubernetes集群持久化部署实践
Kubernetes Dashboard
Dashboard
Dashboard 的项目网站,可以查看说明文档和基本的使用情况。
下载yaml
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.6.0/aio/deploy/recommended.yaml
注意需要修改镜像,不然可能会拉去不下来镜像(ps:国外拉不下来的镜像,可以到阿里云找对应的国内镜像替代)
cat recommended.yaml | grep -i image#image: kubernetesui/dashboard:v2.6.0 --原有镜像image: registry.cn-hangzhou.aliyuncs.com/kube-iamges/dashboard:v2.0.0-beta8imagePullPolicy: Always#image: kubernetesui/metrics-scraper:v1.0.8 --原有镜像 image: registry.cn-hangzhou.aliyuncs.com/kube-iamges/metrics-scraper:v1.0.1
yaml简单说明
- 所有的对象都属于“kubernetes-dashboard”名字空间。
- Dashboard 使用 Deployment 部署了一个实例,端口号是 8443。
- 容器启用了 Liveness 探针,使用 HTTPS 方式检查存活状态。
- Service 对象使用的是 443 端口,它映射了 Dashboard 的 8443 端口
使用命令 kubectl apply 就可以轻松部署 Dashboard :
kubectl apply -f recommended.yaml
# 查看pod
kubectl get pod -n kubernetes-dashboard
#查看dashboard svc
kubectl get svc -n kubernetes-dashboard
svc不是typeNode类型,无法外部直接访问,下面提供两种方式支持外部访问
1修改SVC类型为NodePort
修改SVC类型为NodePort,允许机器外部提供访问能力
# 修改服务的配置
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard
# 找到 type: ClusterIP#修改成type: NodePort # 将类型更改为 NodePort
#修改后保存查看,已有外部访问端口
kubectl get svc -n kubernetes-dashboard
2Ingress/Ingress Controller
也可以通过ingress Controller 提供外部访问能力
由于 Dashboard 默认使用的是加密的 HTTPS 协议,拒绝明文 HTTP 访问,所以我们要先生成证书,让 Ingress 也走 HTTPS 协议。
直接用 Linux 里的命令行工具“openssl”来生成一个自签名的证书(如果你有条件,也可以考虑找 CA 网站申请免费证书):
openssl req -x509 -days 365 -out k8s.test.crt -keyout k8s.test.key \-newkey rsa:2048 -nodes -sha256 \-subj '/CN=k8s.test' -extensions EXT -config <( \printf "[dn]\nCN=k8s.test\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:k8s.test\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth")
它生成的是一个 X509 格式的证书,有效期 365 天,私钥是 RSA2048 位,摘要算法是 SHA256,签发的网站是“k8s.test”。
运行命令行后会生成两个文件,一个是证书“k8s.test.crt”,另一个是私钥“k8s.test.key”,我们需要把这两个文件存入 Kubernetes 里供 Ingress 使用。
注意:
使用上述命令生成的自签名证书 k8s.test.crt 和私钥 k8s.test.key 是自签名的证书,其安全性在开发或测试环境中通常是可以接受的,但不会被主流浏览器(如Chrome、Firefox、Edge等)视为安全,因为它们未经公共颁发机构(CA)的认证和签名。
在开发或测试环境中,可以使用这样的自签名证书来进行测试和开发工作。浏览器通常会显示安全警告,因为它们无法验证该证书的真实性和信任级别,因此认为连接可能不是私密的或不安全的。
要在浏览器中消除这些警告,需要手动将生成的证书导入到浏览器的信任存储中,具体步骤可以参考之前提到的浏览器信任证书的操作。这样浏览器就会信任您的自签名证书,不再显示安全警告。
因为这两个文件属于机密信息,存储的方式需要用 Secret
dashborad.yml
apiVersion: v1
kind: Secret
metadata:name: dash-tlsnamespace: kubernetes-dashboard
type: kubernetes.io/tlsdata:tls.crt: LS0tLS1CRUdJTiBDRVJU...自己生成的crttls.key: LS0tLS1CRUdJTiBQUklW...自己生成的key
vim dashboard-secret.yml
kubectl apply -f dashboard-secret.yml
#或者根据文件生成 kubectl create secret tls dash-tls -n kubernetes-dashboard --cert=k8s.test.crt --key=k8s.test.keykubectl get secrets -n kubernetes-dashboard
Ingress Class
dash-ink.yml
apiVersion: networking.k8s.io/v1
kind: IngressClassmetadata:name: dash-inknamespace: kubernetes-dashboard
spec:controller: nginx.org/ingress-controller
Ingress 对象可以用 kubectl create 命令自动生成
kubectl create ing dash-ing --rule="k8s.test/=kubernetes-dashboard:443" --class=dash-ink -n kubernetes-dashboard $out
因为是 HTTPS 协议,所以我们要在 Ingress 里多加一点东西,一个是“annotations”字段,指定后端目标是 HTTPS 服务,另一个是“tls”字段,指定域名和证书,也就是刚才创建的 Secret:
dash-ingress.yml
apiVersion: networking.k8s.io/v1
kind: Ingressmetadata:name: dash-ingnamespace: kubernetes-dashboardannotations:nginx.org/ssl-services: "kubernetes-dashboard"spec:ingressClassName: dash-inktls:- hosts:- k8s.testsecretName: dash-tlsrules:- host: k8s.testhttp:paths:- path: /pathType: Prefixbackend:service:name: kubernetes-dashboardport:number: 443
Ingress Controller
dash-kic.yml
apiVersion: apps/v1
kind: DaemonSet
metadata:name: dash-kic-depnamespace: nginx-ingress
spec:selector:matchLabels:app: dash-kic-deptemplate:metadata:labels:app: dash-kic-depapp.kubernetes.io/name: nginx-ingressspec:serviceAccountName: nginx-ingresshostNetwork: trueautomountServiceAccountToken: truesecurityContext:seccompProfile:type: RuntimeDefaultcontainers:- image: nginx/nginx-ingress:2.2-alpineimagePullPolicy: IfNotPresentname: nginx-ingressports:- name: httpcontainerPort: 80- name: httpscontainerPort: 443- name: readiness-portcontainerPort: 8081- name: prometheuscontainerPort: 9113readinessProbe:httpGet:path: /nginx-readyport: readiness-portperiodSeconds: 1resources:requests:cpu: "100m"memory: "128Mi"#limits:# cpu: "1"# memory: "1Gi"securityContext:allowPrivilegeEscalation: true
# readOnlyRootFilesystem: truerunAsUser: 101 #nginxrunAsNonRoot: truecapabilities:drop:- ALLadd:- NET_BIND_SERVICEenv:- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespace- name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.nameargs:- -nginx-configmaps=$(POD_NAMESPACE)/nginx-config- -ingress-class=dash-ink
要让我们在外面能够访问 Ingress Controller,还要为它再定义一个 Service,类型是“NodePort”,端口指定是“30443”:
dash-kic-svc.yml
apiVersion: v1
kind: Service
metadata:name: dash-kic-svcnamespace: nginx-ingressspec:ports:- port: 443protocol: TCPtargetPort: 443nodePort: 30443selector:app: dash-kic-deptype: NodePort
创建上面的 Ingress Class、Ingress、Ingress Controller、Service
vim dash-ink.ymlvim dash-ingress.ymlvim dash-kic.ymlvim dash-kic-svc.ymlkubectl apply -f dash-ink.yml -f dash-ingress.yml -f dash-kic.yml -f dash-kic-svc.yml kubectl get ingressclasses.networking.k8s.io -n kubernetes-dashboard
kubectl get ingress -n kubernetes-dashboard
kubectl get pod,svc -n kubernetes-dashboard
kubectl get pod,svc -n nginx-ingress
查看nginx相关配置
# 查看nginx controller容器
kubectl get pod -n nginx-ingress
#进入nginx容器中
kubectl exec -it -n nginx-ingress dash-kic-dep-cx2vq -- sh
#查看配置文件cat /etc/nginx/nginx.conf# 其他配置ls /etc/nginx/conf.d/
对象关系图
外部访问 Dashboard
创建用户,登录进 Dashboard。Dashboard官网示例
dashboard-adminuser.yml
apiVersion: v1
kind: ServiceAccount
metadata:name: admin-usernamespace: kubernetes-dashboard---apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: admin-user
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-admin
subjects:
- kind: ServiceAccountname: admin-usernamespace: kubernetes-dashboard
vim dashboard-adminuser.yml
kubectl apply -f dashboard-adminuser.yml
获取sa的token,通过token的方式登录部署好的dashboard
# 获取账户
kubectl get secret -n kubernetes-dashboard
# 根据上面的命令 获取token
kubectl describe secrets -n kubernetes-dashboard admin-user-token-xxxx
登录访问
使用dashboard service
ip+service typenode端口
在当前页面用键盘输入 thisisunsafe ,不是在地址栏输入,就直接敲键盘就行了,页面即会自动刷新进入网页。
使用域名
https://k8s.test:30443/ (注意添加域名解析)
访问流程
https://k8s.test:30443/ 时,请求的处理过程如下:
外部请求到 NodePort 服务
浏览器请求 https://k8s.test:30443/。
假设 30443 是一个 NodePort,Kubernetes 会将请求转发到集群内部。
NodePort 服务到 Nginx Ingress Controller 的 Service
请求会先到达暴露在 NodePort 30443 上的服务,即 dash-kic-svc。
该服务会将请求转发到与其关联的 Pod,通常是 Nginx Ingress Controller 的 Pod。
Nginx Ingress Controller
运行在 dash-kic-dep(Deployment)中的 Nginx Ingress Controller Pod 接收到请求。
Nginx Ingress Controller 根据配置的 Ingress 资源进行处理。
Ingress 资源规则
Nginx Ingress Controller 会根据你配置的 Ingress 资源规则 (dash-ing) 解析请求。
例如,根据 host 和 path,确定应该将请求转发到哪个后端服务。
转发到后端服务
在这个例子中,Ingress 资源会将请求转发到 kubernetes-dashboard 服务的 443 端口。
相关文章:

Kubernetes Dashboard
Minikube 环境搭建 Kubernetes 的基本架构 Kubernetes 声明式语言 YAML YAML操作Kubernetes核心对象 CentOs搭建Kubernetes集群 Kubernetes进阶对象Deployment、DaemonSet、Service Kubernetes进阶对象Ingress、Ingress Class、Ingress Controller Kubernetes集群部署项目实践 …...

NSSCTF-Web题目15
目录 [HNCTF 2022 WEEK2]ez_SSTI 1、题目 2、知识点 3、思路 [SWPUCTF 2022 新生赛]Ez_upload 1、题目 2、知识点 3、思路 [HNCTF 2022 WEEK2]ez_SSTI 1、题目 2、知识点 SSTI、Jinja2 参考链接:1. SSTI(模板注入)漏洞(…...
每天认识:轮询和中断
轮询(Polling)和中断(Interrupt)是两种不同的事件处理机制,通常用于操作系统、硬件设备或软件程序中,以响应外部事件或内部状态变化。下面分别解释这两个概念: 轮询(Polling&#x…...
SpringBoot中使用MQTT实现消息的订阅和发布
SpringBoot中使用MQTT实现消息的订阅和发布 背景 java框架SpringBoot通过mQTT通信 控制物联网设备 还是直接上代码 第一步依赖: <!--mqtt相关依赖--><dependency><groupId>org.springframework.integration</groupId><artifactId>s…...

等保测评练习10
等级保护初级测评师试题10 姓名: 成绩: 判断题(10110分) 1.等级保护2.0三级系统测评合格最低分为60分() 70分且不能有高风险 2.当远程管理云计算平台中设备是…...

VBA学习(16):工作表事件示例:输入数据后锁定单元格
在工作表单元格中输入数据后,该单元格就被锁定,不能再编辑。 打开VBE,在工程资源管理器中双击该工作表名称打开其代码模块,在其中输入下面的代码: 假设整个工作表的LockedFalse Private Sub Worksheet_Change(ByVal …...

mysql学习——SQL中的DDL和DML
SQL中的DDL和DML DDL数据库操作:表操作 DML添加数据修改数据删除数据 学习黑马MySQL课程,记录笔记,用于复习。 DDL DDL:Data Definition Language,数据定义语言,用来定义数据库对象(数据库,表&…...

什么是多态?一文彻底搞懂!
什么是多态 面向对象程序设计有三要素:封装、继承(或组合)、多态,前两者较好理解,多态总让人困惑,不知道具体有什么作用,更不知道为什么要用多态。今天就来详细分析下什么是多态,以…...

CST电磁仿真软件的参数类型和含义【电磁仿真入门教程】
如果你是一位工程师或设计师,那你对电磁仿真软件CST Studio Suite一定不会感到陌生。CST软件可以帮助你模拟电磁场和电路行为,从而优化产品设计。本文将带你了解CST电磁仿真软件的一些关键参数,并解释其含义。CST电磁仿真软件的参数是指在使用…...

华为HCIA综合实验(结合前几期所有内容)
第一章 实验目的 (1)配置Telnet,要求所有网络设备支持远程管理,密码为admin(2)配置Trunk,交换机之间的链路均为Trunk模式(3)配置VLAN,在SW2和SW3上创建相关…...

git 拉下来的项目,出现“加载失败”的解决方法
现象: 1、对加载失败的项目,尝试重新加载 解决思路:根据上面的提示,打开F盘对应的 .vcxproj文件,查看里面关于opencv454.props的内容 先删了,后面再补 2、当前的工作重点是消除加载失败的情况,…...

sql资料库
1、distinct(关键词distinct用于返回唯一不同的值):查询结果中去除重复行的关键字 select distinct(university) from user_profile select distinct university from user_profile distinct是紧跟在select后面的,不能在其他位置,不然就…...
【python入门】运算符
文章目录 算术运算符比较运算符赋值运算符逻辑运算符位运算符成员运算符身份运算符优先级 算术运算符 # 加法 print(5 3) # 输出: 8# 减法 print(5 - 3) # 输出: 2# 乘法 print(4 * 3) # 输出: 12# 除法(结果为浮点数) print(8.0 / 3) # 输出: 2.6…...

【C++高阶】掌握AVL树:构建与维护平衡二叉搜索树的艺术
📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C “ 登神长阶 ” 🤡往期回顾🤡:STL-> map与set 🌹🌹期待您的关注 🌹🌹 ❀AVL树 📒1. AVL树…...

机器学习-课程整理及初步介绍
简介: 机器学习是人工智能的一个分支,它使计算机系统能够从经验中学习并改进其在特定任务上的表现,而无需进行明确的编程。机器学习涉及多种算法和统计模型,它们可以从数据中学习规律,并做出预测或决策。机器学习的应用非常广泛&…...

北斗三号短报文通信终端 | 助力户外无网络场景作业
北斗三号短报文通信终端是一款专为户外无网络场景作业设计的先进通信工具,它依托于中国自主研发的北斗卫星导航系统,为用户在偏远地区或无网络覆盖区域提供了可靠的通信保障。以下是关于北斗三号短报文通信终端的详细介绍: 一、功能特点 北斗…...

RERCS系统开发实战案例-Part05 FPM Application的Feeder Class搜索组件的实施
1、通过事务码 SE24对Feeder Class实施 1)接口页签的简单说明: ① IF_FPM_GUIBB:通用UI构建块,整个UIBB模块的基础接口; ② IF_FPM_GUIBB_SEARCH:通用搜索UI构建块,搜索组件UIBB的基础接口&…...

算法常见手写代码
1.NMS def py_cpu_nms(dets, thresh):"""Pure Python NMS baseline."""#x1、y1、x2、y2、以及score赋值x1 dets[:, 0]y1 dets[:, 1]x2 dets[:, 2]y2 dets[:, 3]scores dets[:, 4]#每一个检测框的面积areas (x2 - x1 1) * (y2 - y1 1)#按…...

数据结构9——排序
一、冒泡排序 冒泡排序(Bubble Sort),顾名思义,就是指越小的元素会经由交换慢慢“浮”到数列的顶端。 算法原理 从左到右,依次比较相邻的元素大小,更大的元素交换到右边;从第一组相邻元素比较…...

分布式锁实现方案-基于Redis实现的分布式锁
目录 一、基于Lua看门狗实现 1.1 缓存实体 1.2 延迟队列存储实体 1.3 分布式锁RedisDistributedLockWithDog 1.4 看门狗线程续期 1.5 测试类 1.6 测试结果 1.7 总结 二、RedLock分布式锁 2.1 Redlock分布式锁简介 2.2 RedLock测试例子 2.3 RedLock 加锁核心源码分析…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...

RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...

label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...

页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...