kubernetes-dashboard 实现 http 访问以及免 token 登录

news2024/10/9 10:28:05

文章目录

    • @[toc]
    • 下载官方 yaml 文件
    • 修改 yaml 文件
      • 修改 service 端口
      • 修改 clusterrolebinding
      • 修改 deployment 内容
        • 修改探针检测
        • 修改镜像拉取策略
        • 修改容器端口
        • 关闭 token 登录
      • 增加 ingress
      • 完整版 yaml

下载官方 yaml 文件

  • 最后有完整版的 yaml 文件,不想看细节的话,可以拉到最后取 yaml 内容 [还是建议看看修改了哪些比较好]

可以根据自己的需求选择版本

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

修改 yaml 文件

docker hub 可以看到 kubernetesui/dashboard:v2.7.0 镜像的 EXPOSE 暴露了 84439090 两个端口,yaml 文件里面默认是开放的 443 端口,开启 http 访问就需要修改一些信息

修改 service 端口

修改前

  • 增加 80 端口
spec:
  ports:
    - port: 443
      targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard

修改后

spec:
  ports:
    - port: 443
      targetPort: 8443
      name: https
    - port: 80
      targetPort: 9090
      name: http
  selector:
    k8s-app: kubernetes-dashboard

如果想用 ip+端口 的方式访问,这里需要增加配置,改成 nodeport 的形式,nodePort 改成自己主机空闲的端口,取值范围在 apiserver--service-node-port-range 参数里面可以看得到

spec:
  ports:
    - port: 443
      targetPort: 8443
      name: https
      nodePort: 32001
    - port: 80
      targetPort: 9090
      name: http
      nodePort: 32002
  type: NodePort
  selector:
    k8s-app: kubernetes-dashboard

修改 clusterrolebinding

  • 默认绑定的 kubernetes-dashboard 权限太少了,这里换成权限比较高的 cluster-admin

修改前

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: kubernetes-dashboard
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: kubernetes-dashboard
subjects:
  - kind: ServiceAccount
    name: kubernetes-dashboard
    namespace: kubernetes-dashboard

修改后

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: kubernetes-dashboard
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  # 主要修改了这里
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: kubernetes-dashboard
    namespace: kubernetes-dashboard

修改 deployment 内容

修改探针检测

  • 后面要修改 dashboard 的启动参数,这里不改的话,活性检测会失败,导致 pod 会不断重启

修改前

          livenessProbe:
            httpGet:
              scheme: HTTPS
              path: /
              port: 8443

修改后

          livenessProbe:
            httpGet:
              scheme: HTTP
              path: /
              port: 9090

修改镜像拉取策略

  • 官方 yaml 里面默认配置的是 Always
sed -i 's/imagePullPolicy: Always/imagePullPolicy: IfNotPresent/g' recommended.yaml

修改容器端口

  • 增加 9090 端口

修改前

          ports:
            - containerPort: 8443
              protocol: TCP

修改后

          ports:
            - containerPort: 8443
              protocol: TCP
            - containerPort: 9090
              protocol: TCP

关闭 token 登录

  • 注释掉 --auto-generate-certificates 参数

修改前

          args:
            - --auto-generate-certificates
            - --namespace=kubernetes-dashboard
            # Uncomment the following line to manually specify Kubernetes API server Host
            # If not specified, Dashboard will attempt to auto discover the API server and connect
            # to it. Uncomment only if the default does not work.
            # - --apiserver-host=http://my-address:port

修改后

          args:
            # - --auto-generate-certificates
            - --namespace=kubernetes-dashboard
            # Uncomment the following line to manually specify Kubernetes API server Host
            # If not specified, Dashboard will attempt to auto discover the API server and connect
            # to it. Uncomment only if the default does not work.
            # - --apiserver-host=http://my-address:port

增加 ingress

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
   name: kubernetes-dashboard
   namespace: kubernetes-dashboard
spec:
  rules:
  - host: k8s.tools.dashboard
    http:
      paths:
      - backend:
          serviceName: kubernetes-dashboard
          servicePort: 80
        path: /
  • 配置好本地解析,访问 http://k8s.tools.dashboard 就可以进入到 dashboard 了,并且不需要输入 token

在这里插入图片描述

完整版 yaml

---
apiVersion: v1
kind: Namespace
metadata:
  name: kubernetes-dashboard

---
apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard

---
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  ports:
    - port: 443
      targetPort: 8443
      name: https
    - port: 80
      targetPort: 9090
      name: http
  selector:
    k8s-app: kubernetes-dashboard
---

apiVersion: v1
kind: Secret
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard-certs
  namespace: kubernetes-dashboard
type: Opaque

---
apiVersion: v1
kind: Secret
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard-csrf
  namespace: kubernetes-dashboard
type: Opaque
data:
  csrf: ""

---
apiVersion: v1
kind: Secret
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard-key-holder
  namespace: kubernetes-dashboard
type: Opaque

---

kind: ConfigMap
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard-settings
  namespace: kubernetes-dashboard

---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
rules:
  # Allow Dashboard to get, update and delete Dashboard exclusive secrets.
  - apiGroups: [""]
    resources: ["secrets"]
    resourceNames: ["kubernetes-dashboard-key-holder", "kubernetes-dashboard-certs", "kubernetes-dashboard-csrf"]
    verbs: ["get", "update", "delete"]
    # Allow Dashboard to get and update 'kubernetes-dashboard-settings' config map.
  - apiGroups: [""]
    resources: ["configmaps"]
    resourceNames: ["kubernetes-dashboard-settings"]
    verbs: ["get", "update"]
    # Allow Dashboard to get metrics.
  - apiGroups: [""]
    resources: ["services"]
    resourceNames: ["heapster", "dashboard-metrics-scraper"]
    verbs: ["proxy"]
  - apiGroups: [""]
    resources: ["services/proxy"]
    resourceNames: ["heapster", "http:heapster:", "https:heapster:", "dashboard-metrics-scraper", "http:dashboard-metrics-scraper"]
    verbs: ["get"]

---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
rules:
  # Allow Metrics Scraper to get metrics from the Metrics server
  - apiGroups: ["metrics.k8s.io"]
    resources: ["pods", "nodes"]
    verbs: ["get", "list", "watch"]

---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: kubernetes-dashboard
subjects:
  - kind: ServiceAccount
    name: kubernetes-dashboard
    namespace: kubernetes-dashboard

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: kubernetes-dashboard
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: kubernetes-dashboard
    namespace: kubernetes-dashboard

---
kind: Deployment
apiVersion: apps/v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      k8s-app: kubernetes-dashboard
  template:
    metadata:
      labels:
        k8s-app: kubernetes-dashboard
    spec:
      securityContext:
        seccompProfile:
          type: RuntimeDefault
      containers:
        - name: kubernetes-dashboard
          image: kubernetesui/dashboard:v2.7.0
          imagePullPolicy: Always
          ports:
            - containerPort: 8443
              protocol: TCP
            - containerPort: 9090
              protocol: TCP
          args:
            # - --auto-generate-certificates
            - --namespace=kubernetes-dashboard
            # Uncomment the following line to manually specify Kubernetes API server Host
            # If not specified, Dashboard will attempt to auto discover the API server and connect
            # to it. Uncomment only if the default does not work.
            # - --apiserver-host=http://my-address:port
          volumeMounts:
            - name: kubernetes-dashboard-certs
              mountPath: /certs
              # Create on-disk volume to store exec logs
            - mountPath: /tmp
              name: tmp-volume
          livenessProbe:
            httpGet:
              scheme: HTTP
              path: /
              port: 9090
            initialDelaySeconds: 30
            timeoutSeconds: 30
          securityContext:
            allowPrivilegeEscalation: false
            readOnlyRootFilesystem: true
            runAsUser: 1001
            runAsGroup: 2001
      volumes:
        - name: kubernetes-dashboard-certs
          secret:
            secretName: kubernetes-dashboard-certs
        - name: tmp-volume
          emptyDir: {}
      serviceAccountName: kubernetes-dashboard
      nodeSelector:
        "kubernetes.io/os": linux
      # Comment the following tolerations if Dashboard must not be deployed on master
      tolerations:
        - key: node-role.kubernetes.io/master
          effect: NoSchedule

---
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: dashboard-metrics-scraper
  name: dashboard-metrics-scraper
  namespace: kubernetes-dashboard
spec:
  ports:
    - port: 8000
      targetPort: 8000
  selector:
    k8s-app: dashboard-metrics-scraper

---
kind: Deployment
apiVersion: apps/v1
metadata:
  labels:
    k8s-app: dashboard-metrics-scraper
  name: dashboard-metrics-scraper
  namespace: kubernetes-dashboard
spec:
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      k8s-app: dashboard-metrics-scraper
  template:
    metadata:
      labels:
        k8s-app: dashboard-metrics-scraper
    spec:
      securityContext:
        seccompProfile:
          type: RuntimeDefault
      containers:
        - name: dashboard-metrics-scraper
          image: kubernetesui/metrics-scraper:v1.0.8
          ports:
            - containerPort: 8000
              protocol: TCP
          livenessProbe:
            httpGet:
              scheme: HTTP
              path: /
              port: 8000
            initialDelaySeconds: 30
            timeoutSeconds: 30
          volumeMounts:
          - mountPath: /tmp
            name: tmp-volume
          securityContext:
            allowPrivilegeEscalation: false
            readOnlyRootFilesystem: true
            runAsUser: 1001
            runAsGroup: 2001
      serviceAccountName: kubernetes-dashboard
      nodeSelector:
        "kubernetes.io/os": linux
      # Comment the following tolerations if Dashboard must not be deployed on master
      tolerations:
        - key: node-role.kubernetes.io/master
          effect: NoSchedule
      volumes:
        - name: tmp-volume
          emptyDir: {}

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

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

相关文章

苹果中的这些小技巧,你知道吗

技巧一:iPhone镜像 觉得手机屏幕太小看电影玩游戏不爽怎么办?投屏功能帮我们解决了问题,使用方法也很简单。打开控制中心,点击投屏,选择设备,连接投屏。这里需要注意的是,手机和连接的设备必须在…

【MIKE水动力】MIKE11基本原理(上)

Mike11软件包由水动力、对流~扩散、水质、降雨~径流、洪水预报等模块组成,核心模块为水动力模块。Mike11水动力模块采用6点Abbott~Ionescu有限差分格式对圣维南方程组求解。 一、圣维南方程组 1、基本要素与假设条件 Mike11模型…

开源流程引擎activiti、flowable、camunda选哪个好?

市场上比较有名的开源流程引擎有osworkflow、jbpm、activiti、flowable、camunda。其中:Jbpm4、Activiti、Flowable、camunda四个框架同宗同源,祖先都是Jbpm4,开发者只要用过其中一个框架,基本上就会用其它三个。低代码平台、办公…

IO流概念、FileWriter类及FileReader类详解

目录 IO流概述和分类 ​编辑FileWriter写数据 FileWriter写数据的方法 FileWriter写数据常见问题 FileReader读数据 IO流概述和分类 IO流用来处理设备之间的数据传输–文件复制,上传文件和下载文件 IO流分类–输出流——FileWriter –输入流——FileReader 图式详解&am…

< 每日算法 - Javascript解析: 交通枢纽 >

每日算法 - JavaScript解析:交通枢纽一、任务描述:》 示例一:》示例二二、题意解析拓展知识三、解决方案:往期内容 💨一、任务描述: 为了缓解「力扣嘉年华」期间的人流压力,组委会在活动期间开…

谷歌优化排名怎么做?Google SEO怎么优化?

本文主要分享关于Google自然排名优化中的一些方法和技巧,让你更快的做好谷歌排名。 本文由光算创作,有可能会被修改和剽窃,我们佛系对待这种行为吧。 谷歌优化排名怎么做?Google SEO怎么优化? 答案是:创…

CMOS器件与TTL器件CMOS电平与TTL电平

常用的数字芯片,按制造工艺主要分为TTL器件和CMOS器件。TTL器件是指其内部主要逻辑单元为双极性晶体管,CMOS器件是指其内部的主要逻辑单元为MOS管。现在绝大部分数字芯片使用的工艺都是CMOS工艺,在一些比较老的74系列芯片中还使用的是TTL工艺…

51单片机最强模块化封装(1)

文章目录前言一、sys文件创建和路径添加1.创建文件夹添加文件夹路径二、sys文件编写1.sys.h2.sys.c三、模块化的测试总结前言 今天将为大家讲解51单片机的模块化封装,为什么要讲这个模块化封装呢?模块化封装将提高我们代码的可移植性和可复用性&#xf…

力扣刷题记录——1002. 查找共用字符、905. 按奇偶排序数组、 977. 有序数组的平方

本专栏主要记录力扣的刷题记录,备战蓝桥杯,供复盘和优化算法使用,也希望给大家带来帮助,博主是算法小白,希望各位大佬不要见笑,今天要分享的是——《力扣刷题记录——1002. 查找共用字符、905. 按奇偶排序数…

服务器被ddos攻击的处置策略

如果您的服务器遭到了DDoS攻击,以下是一些可以采取的措施:使用防火墙和安全组进行限制:限制服务器的流量以防止进一步的攻击。升级服务器资源:为了应对更高的流量,可以升级服务器的内存,处理器等资源。安装…

GraspNet-1Billion

目录 .1 intro .2 Dataset 2.1 data collection: 2.2 data annotation 2.3 evaluation .3 backbone 3.1 Training and Inference 3.2 Experiment References .1 intro contribution: 一个具有统一评价体系的大规模抓取姿态检测数据集 评估系统通过解析计…

顶会论文 | 虚拟网络探测技术的探索与实践

作者:吕彪 阿里云网络齐天负责人 云网络由物理网络和虚拟网络共同组成,两者都会影响网络性能。过去的研究主要集中于解决物理网络探测,而在虚拟网络探测领域的相应研究则较少。本文将为大家分享一种专为大规模多租户虚拟网络设计的主动探测系…

SAP进阶技术分享一:ABAP增强(1)

一:基于源代码的增强 1.定义 源代码增强以子程序形式发布,可以用PERFORM调用这些子程序,发布的时候是空的,提供一个空代码的子过程,用户可以添加自己的代码。 2.特点 需要修改sap的标准代码。   屏幕增强以客户屏幕…

opencv轮廓相关函数

查找轮廓contours, hierarchy cv2.findContours(image,mode,method)参数:image:寻找轮廓所使用的图像。(寻找过程不修改此图像)mode:模式。cv2.RETR_EXTERNAL只检测外轮廓;cv2.RETR_LIST检测的轮廓不建立等…

【Qt】10.Linux下,Qt连接云MySQL数据库

目录 下载MySQL压缩包 配置MySQL Qt下编译MySQL 测试 下载MySQL压缩包 网址: MySQL :: Download MySQL Community Server (Archived Versions)https://downloads.mysql.com/archives/community/ 我为了跟云服务器上的MySQL版本一致,减少不必要的麻…

带你手撕排序算法

文章目录前言一、排序的相关概念二、插入排序1.直接插入(1)算法思想(2)算法讲解(3)代码及解析(4)代码总结2.希尔排序( 缩小增量排序 )(1)算法思想&#xff08…

maxcomputer的分区表相关操作

– 查看xsxw(学生行为表定义) desc xsxw; – 查看xsxw1(学生行为表定义) desc xsxw1; – 上面的两张表是通过ddl语句创建的分区表 – 创建ddl语句如下 – CREATE TABLE IF NOT EXISTS xsxw1( – xwsj STRING COMMENT ‘行为时间’, – xh STRING COMMENT ‘学号’, – xwdd ST…

基于OptiSystem的LD\LED\EDFA仿真分析

1、客户需求: (1) 仿真LD、LED直接调制系统的输出光谱,观察系统输出性能。 (2) 采用EDFA的光纤通信系统,实现对多路光波信号的放大,实现200km、40Gbit/s的传输。用仿真软件搭建一个…

关系数据库——关系代数

文章目录一、传统的集合运算二、专门的关系运算1.选择(restriction)2.投影(Projection)3.连接(join)1)等值连接2)自然连接4.除(Division)一、传统的集合运算 …

《深入浅出计算机组成原理》学习笔记 Day17

冒险和预测(一)1. 结构冒险2. 数据冒险参考1. 结构冒险 结构冒险本质上是一个硬件层面的资源竞争问题,也就是一个硬件电路层面的问题。 CPU 在同一个时钟周期内,同时在运行两条计算机指令的不同阶段,但这两个不同阶段…