k8s Dashboard 运维维护记录

ops/2024/10/20 15:49:50/

k8s Dashboard 运维维护记录

k8s Dashboard 运维维护记录

Q1:需要使用firefox浏览器访问

提示了证书错误NET::ERR_CERT_INVALID,原因是由于物理机的浏览器证书不可用

需要注意的是,若提示“连接不安全”的警告时,点击“高级”,点击“添加例外”后即可:

Q2:使用低权限登录dashboard界面

bootstrap.kubeconfig

配置Dashboard

Dashboard的配置是难点,尤其是涉及到安全权限相关,相当复杂,坑也比较多。

进入Dashboard的登录界面后,认证方式有Kubeconfig和令牌两种方式(实际上还有账号密码的方式,默认不开启不显示)。看到Kubeconfig和令牌,估计头都大了。是否有简便的方法,让我们能直接访问Dashboard?当然有,选择跳过,会出现如上页面:

我们看到了很多权限错误提示,主要是
system:serviceaccount:kube-system:kubernetes-dashboard的权限不足引起的

因此,我们可以更改RoleBinding修改为ClusterRoleBinding,并且修改roleRef中的kind和name,使用cluster-admin这个非常牛逼的CusterRole(超级用户权限,其拥有访问kube-apiserver的所有权限)。如下:

#源文件

---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: kubernetes-dashboard-minimalnamespace: kube-system
roleRef:apiGroup: rbac.authorization.k8s.iokind: Rolename: kubernetes-dashboard-minimal
subjects:
- kind: ServiceAccountname: kubernetes-dashboardnamespace: kube-system

#修改后

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: kubernetes-dashboard-minimalnamespace: kube-system
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-admin
subjects:
- kind: ServiceAccountname: kubernetes-dashboardnamespace: kube-system

修改后,重新创建kubernetes-dashboard.yaml,Dashboard就可以拥有访问整个K8S 集群API的权限。我们重新访问Dashboard

还可以安装Dashboard的Heapster插件

Q3:dashboard -v2.7.0 创建admin账号

用户文件admin-user.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---
apiVersion: v1
kind: Secret
metadata:name: admin-usernamespace: kubernetes-dashboardannotations:kubernetes.io/service-account.name: "admin-user"   
type: kubernetes.io/service-account-token

#获取token

#方法1
kubectl get secret admin-user -n kubernetes-dashboard -o jsonpath={".data.token"} | base64 -d
#方法2
kubectl describe serviceaccounts -n kubernetes-dashboard  admin-user| grep Tokens
kubectl -n kubernetes-dashboard  describe secrets  admin-user

Q4:安装部署dashboard

出现登录界面

创建一个cluster-admin角色的service account , 和一个clusterrolebinding, 以便访问所有的k8s资源

>kubectl create serviceaccount cluster-admin-dashboard-sa

>kubectl create clusterrolebinding cluster-admin-dashboard-sa \

--clusterrole=cluster-admin \

--serviceaccount=default:cluster-admin-dashboard-sa

Copy产生的Token,并使用此Token登录到dashboard中

>kubectl get secret | grep cluster-admin-dashboard-sa

>kubectl describe secrets/cluster-admin-dashboard-sa-token-cp4th

方法2获取token

kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')

Q5:SecurityContext.RunAsUser is forbidden

kube-controller-manager: I1225 10:38:50.459168 92029 event.go:255] Event(v1.ObjectReference{Kind:"ReplicaSet", Namespace:"kubernetes-d

ashboard", Name:"kubernetes-dashboard-5996555fd8", UID:"ea499098-0f62-4d57-a6c6-604923a24333", APIVersion:"apps/v1", ResourceVersion:"2478690", FieldPath:"

"}): type: 'Warning' reason: 'FailedCreate' Error creating: pods "kubernetes-dashboard-5996555fd8-mvmht" is forbidden: SecurityContext.RunAsUser is forbidden

因为Pods需要设置安全策略

securityContext:

allowPrivilegeEscalation: false

readOnlyRootFilesystem: true

runAsUser: 1001

runAsGroup: 2001

去掉SecurityContextDeny,降低安全配置

vi /etc/kubernetes/apiserver.conf

vi /usr/lib/systemd/system/kube-apiserver.service

systemctl daemon-reload

systemctl restart kube-apiserver.service

重启服务

systemctl restart kube-apiserver

SecurityContextDeny:此准入控制器将拒绝任何试图设置某些升级的SecurityContext字段的pod

systemctl status etcd -l

查看项

kube-apiserver -h | grep enable-admission-plugins

配置点

/etc/kubernetes/apiserver.conf

Q6:SecurityContextDeny介绍

禁止创建设置了 Security Context 的 pod。这个插件将会将使用了 SecurityContext的pod中定义的选项全部失效。关于 SecurityContext的描述:SecurityContext 在container中定义了操作系统级别的安全设定(uid, gid, capabilities, SELinux等等)

Security Context时运用于容器的操作系统安全设置(uid、gid、capabilities、SELinux role等),Admission Control的SecurityContextDeny插件的作用是,禁止创建设置了Security Context的Pod,例如包含以下配置项的Pod:

  • spec.containers.securityContext.seLinuxOptions
  • spec.containers.securityContext.runAsUser

解析

LimitRanger:此准入控制器将确保所有资源请求不会超过 namespace 的 LimitRange

SecurityContextDeny:此准入控制器将拒绝任何试图设置某些升级的SecurityContext字段的pod

ServiceAccount:此准入控制器实现serviceAccounts的自动化

ResourceQuota:此准入控制器将观察传入请求并确保它不违反命名空间的ResourceQuota对象中列举的任何约束

NodeRestriction:该准入控制器限制了 kubelet 可以修改的Node和Pod对象

NamespaceExists:此许可控制器检查除 Namespace 其自身之外的命名空间资源上的所有请求。如果请求引用的命名空间不存在,则拒绝该请求

NamespaceLifecycle:此准入控制器强制执行正在终止的命令空间中不能创建新对象,并确保Namespace拒绝不存在的请求。此准入控制器还防止缺失三个系统保留的命名空间default、kube-system、kube-public

Q7:or the --apiserver-host param points to a server that does not exist. Reason: Get https://192.168.10.20:6443/version?timeout=32s: x509: certificate signed by unknown authority

证书格式不对

Q8:docker logs contain_id

2021/07/12 03:36:05 Initializing csrf token from kubernetes-dashboard-csrf secret

panic: Get "https://10.0.0.1:443/api/v1/namespaces/kubernetes-dashboard/secrets/kubernetes-dashboard-csrf": x509: certificate is valid for 127.0.0.1, 192.168.10.20, 192.168.10.21, 192.168.10.22, not 10.0.0.1

IP列表不在证书范围内


http://www.ppmy.cn/ops/22163.html

相关文章

CMUS狮身人面像(六)-调整语音识别准确性

调整语音识别准确性 精度差的原因测试数据库设置运行测试 语音识别的准确性并不总是很高。 首先,重要的是要了解您的准确性是否只是低于预期,还是总体上非常低。如果总体精度非常低,则您很可能错误配置了解码器。如果低于预期,可…

开源相机管理库Aravis例程学习(五)——camera-api

开源相机管理库Aravis例程学习(五)——camera-api 简介例程代码函数说明arv_camera_get_regionarv_camera_get_pixel_format_as_stringarv_camera_get_pixel_formatARV_PIXEL_FORMAT_BIT_PER_PIXEL 简介 本文针对官方例程中的:03-camera-api…

社交到底是什么?

社交的核心:感受世界而非自我展示 社交常常被误解为一个自我展示的舞台,然而,真正的社交远比这更深刻。它不是关于我们如何展示自己的优势,而是关于我们如何与世界建立联系,了解和探索他人。本文将探讨社交的真正意义…

白话机器学习1:分类问题中的评价指标

机器学习中的评价指标非常多,它们用来衡量模型的性能和预测能力。不同类型的机器学习任务可能需要不同的评价指标。以下是一些常见的评价指标,按照不同类型的机器学习任务分类: 对于分类问题: 准确率(Accuracy&#…

用Jenkins实现cherry-pick多个未入库的gerrit编译Android固件

背景: 在做Android固件开发的时候,通常我们可以利用gerrit-trigger插件,开发者提交一笔的时候自动触发jenkins编译,如果提交的这一笔的编译依赖其他gerrit才能编译过,我们可以在commit message中加入特殊字段,让jenkins在编译此笔patch的时候同时抓取依赖的gerrit代码下…

求解素数-埃氏筛选

什么是素数了?就是除了0和1之外,一个数只能由1和它本身相乘得来,这就是素数 第一种暴力求解: package com.fan.suanfati;import java.util.Scanner;public class SuShu {public static void main(String[] args) {System.out.println("请输入数字,以便求出该数字内的素数…

Django初步了解

目录 一、什么是Django 二、Django的设计模式 三、涉及的英文缩写及其含义 四、安装(官方教程) 一、什么是Django Django是一个Python Web框架,可以快速开发网站,提供一站式的解决方案,包括缓存、数据库ORM、后台…

Memory augment is All You Need for image restoration 论文翻译

目录 一.介绍 二.实际工作 A.图像阴影去除 B.图像去雨 C.存储模块的开发 三.网络结构 A.内存扩充 B.损失函数设计 四.实验 A.与最先进方法的比较 B.MemoryNet消融研究 五.结论 CVPR2023 MemoryNet 记忆增强是图像恢复所需要的一切 论文地址https://arxiv.org/abs/…