k8s中,一.service发布服务,二.dashboard:基于网页的k8s管理插件,三.资源服务与帐号权限

devtools/2025/2/10 17:54:39/
一.service资源对内发布服务Cluster IP对外发布服务NodePortIngress
二.dashboard:基于网页的k8s管理插件
三.资源服务与帐号权限一.service:用户无法预知pod的ip地址以及所在的节点,多个相同的pod如何访问他们上面的服务功能:1.服务自动感知:pod迁移后访问service的ip,不受影响2.服务的自动发现:服务创建时自动在内部dns上注册域名服务名称.名称空间.svc.cluster.local3.服务负载均衡:访问多个相同标签的服务1.ClusterIP类型:集群内部发布服务(标签服务)1.1  资源清单文件生成#命令生成资源清单文件kubectl create service clusterip websvc --tcp=80:80 --dry-run=client -o yaml#自定义[root@master ~]# vim websvc.yaml---kind: ServiceapiVersion: v1metadata:name: websvc  spec:type: ClusterIP  #服务类型selector:app: web       #标签ports:           #端口- protocol: TCP  #协议port: 80 	      #服务的端口targetPort: 80 #后端pod端口1.2 解析域名# 安装工具软件包[root@master ~]# dnf install -y bind-utils# 查看 DNS 服务地址[root@master ~]# kubectl -n kube-system get service kube-dnsNAME       TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)kube-dns   ClusterIP   10.245.0.10   <none>        53/UDP,53/TCP,9153/TCP# 域名解析测试[root@master ~]# host websvc.default.svc.cluster.local 10.245.0.10websvc.default.svc.cluster.local has address 10.245.5.181.3 通过标签完成请求转发,服务和service资源设置相同标签,创建后端应用[root@master ~]# vim web1.yaml ---kind: PodapiVersion: v1metadata:name: web1labels:app: web   # 服务靠标签寻找后端spec:containers:- name: apacheimage: myos:httpd1.4 给service服务设置固定的ip---kind: ServiceapiVersion: v1metadata:name: websvcspec:type: ClusterIPclusterIP: 10.245.1.80  #固定的ipselector:app: webports:- protocol: TCPport: 80targetPort: 801.5 端口别名,解决后端pod中多个服务的端口不一致情况service资源设置:---kind: ServiceapiVersion: v1metadata:name: websvcspec:type: ClusterIPclusterIP: 10.245.1.80  # 固定的ipselector:app: webports:- protocol: TCPport: 80targetPort: myhttp  # 端口别名pod资源设置:---kind: PodapiVersion: v1metadata:name: web1labels:app: web   	# 服务靠标签寻找后端spec:containers:- name: apacheimage: myos:httpdports:- name: myhttp  # 使用别名protocol: TCPcontainerPort: 802.NodePort:使用基于端口映射(30000-32767),外部服务请求节点,节点将请求转发给内部的clusteripnodeport--clusterip(service)--pod2.1 NodePort对外发布服务---kind: ServiceapiVersion: v1metadata:name: mysvcspec:type: NodePort            # 服务类型selector:app: webports:- protocol: TCPport: 80nodePort: 30080         # 映射端口号,不设置使用随机的端口号targetPort: 80	外部服务通过端口转发访问服务:curl http://node-0001:300803.Ingress(规则+控制器):通过http和https访问集群内部服务,支持域名解析ingress--service(clusterip)--pod前提:必须先配置好clusterip3.1 安装并配置ingress的规则# 查询ingress控制器类名称[root@master ~]# kubectl get ingressclasses.networking.k8s.io ---apiVersion: networking.k8s.io/v1kind: Ingressmetadata:name: simplespec:ingressClassName: ningx #控制器rules: 	       # 规则- host: foo.com   # 域名http:	       # 协议paths:	//前端参数- path: /bar	# 访问的url路径pathType: Exact #路径的类型(Prefix:宽松模式,访问路径以及子路径的内容,Exact:严格模式)//后端参数	backend: 	# 后端service: name: svc1	#服务名port:		#端口号number: 80status:loadBalancer: {}二.dashbord插件:基于网页的k8s用户界面1.安装dashborad[root@master ~]# cd plugins/dashboard[root@master dashboard]# docker load -i dashboard.tar.xz[root@master dashboard]# docker images|while read i t _;do[[ "${t}" == "TAG" ]] && continue[[ "${i}" =~ ^"harbor:443/".+ ]] && continuedocker tag ${i}:${t} harbor:443/plugins/${i##*/}:${t}docker push harbor:443/plugins/${i##*/}:${t}docker rmi ${i}:${t} harbor:443/plugins/${i##*/}:${t}donesed -ri 's,^(\s*image: )(.*/)?(.+),\1harbor:443/plugins/\3,' recommended.yaml[root@master dashboard]# kubectl apply -f recommended.yaml[root@master dashboard]# kubectl -n kubernetes-dashboard get pods2.修改nodePort发布服务---kind: ServiceapiVersion: v1metadata:labels:k8s-app: kubernetes-dashboardname: kubernetes-dashboardnamespace: kubernetes-dashboardspec:type: NodePortports:- port: 443nodePort: 30443targetPort: 8443selector:k8s-app: kubernetes-dashboard
三.资源与帐号权限1.角色与权限分类资源对象			描述					  作用域ServiceAccount	服务账号,为 Pod 中运行的进程提供了一个身份	单一名称空间Role			角色,包含一组代表相关权限的规则		单一名称空间RoleBinding		将权限赋予用户,Role、ClusterRole 均可使用	单一名称空间ClusterRole		角色,包含一组代表相关权限的规则		全集群ClusterRoleBinding	将权限赋予用户,只可以使用 ClusterRole	全集群2.资源对象的权限(对资源类型进行权限管理)create	 delete	deletecollection	get	list	 	创建	 删除		删除集合	     获取属性	获取列表(多个)  patch	 		update  	watch补丁(补充某一部分内容)	 更新	  	监控3.serviceaccount创建服务帐号# 资源对象模板kubectl -n kubernetes-dashboard create serviceaccount kube-admin --dry-run=client -o yaml[root@master ~]# vim admin-user.yaml---kind: ServiceAccountapiVersion: v1metadata:name: kube-adminnamespace: kubernetes-dashboard[root@master ~]# kubectl -n kubernetes-dashboard get serviceaccounts4.获取用户 token[root@master ~]# kubectl -n kubernetes-dashboard create token kube-admin6.自定义角色资源类型# 角色资源对象模板kubectl -n default create role myrole --resource=pods --verb=get,list --dry-run=client -o yaml---kind: RoleapiVersion: rbac.authorization.k8s.io/v1metadata:name: myrolenamespace: defaultrules:- apiGroups:- ""resources: # 设置的资源- podsverbs:  #设置的授权- get- list7.给kube-admin普通用户授权(RoleBinding)---kind: RoleBindingapiVersion: rbac.authorization.k8s.io/v1metadata:name: kube-admin-role   #授权策略名称namespace: defaultroleRef: 			#关联权限apiGroup: rbac.authorization.k8s.io #角色对象组kind: Role 			#角色资源对象name: myrole 		#角色资源名称subjects: 			#帐号授权配置- kind: ServiceAccount     #帐号资源对象name: kube-admin 		#帐号资源名称namespace: kubernetes-dashboard #帐号所在的名称空间9.给集群管理员授权(ClusterRoleBinding)---kind: ServiceAccountapiVersion: v1metadata:name: kube-adminnamespace: kubernetes-dashboard---kind: ClusterRoleBindingapiVersion: rbac.authorization.k8s.io/v1metadata:name: kube-admin-roleroleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-adminsubjects:- kind: ServiceAccountname: kube-adminnamespace: kubernetes-dashboard

一.service资源
    对内发布服务
        Cluster IP
    对外发布服务
        NodePort
        Ingress
二.dashboard:基于网页的k8s管理插件
三.资源服务与帐号权限

一.service:用户无法预知pod的ip地址以及所在的节点,多个相同的pod如何访问他们上面的服务
        功能:
        1.服务自动感知:pod迁移后访问service的ip,不受影响
        2.服务的自动发现:服务创建时自动在内部dns上注册域名
            服务名称.名称空间.svc.cluster.local
        3.服务负载均衡:访问多个相同标签的服务
    
    1.ClusterIP类型:集群内部发布服务(标签服务)
      1.1  资源清单文件生成
        #命令生成资源清单文件
        kubectl create service clusterip websvc --tcp=80:80 --dry-run=client -o yaml
        
        #自定义
        [root@master ~]# vim websvc.yaml
        ---
        kind: Service
        apiVersion: v1
        metadata:
          name: websvc  
        spec:
          type: ClusterIP  #服务类型
          selector:
            app: web       #标签
          ports:           #端口
          - protocol: TCP  #协议
            port: 80           #服务的端口
            targetPort: 80 #后端pod端口

      1.2 解析域名
        # 安装工具软件包
        [root@master ~]# dnf install -y bind-utils
        # 查看 DNS 服务地址
        [root@master ~]# kubectl -n kube-system get service kube-dns
        NAME       TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)
        kube-dns   ClusterIP   10.245.0.10   <none>        53/UDP,53/TCP,9153/TCP
        # 域名解析测试
        [root@master ~]# host websvc.default.svc.cluster.local 10.245.0.10
        websvc.default.svc.cluster.local has address 10.245.5.18

      1.3 通过标签完成请求转发,服务和service资源设置相同标签,创建后端应用
        [root@master ~]# vim web1.yaml 
        ---
        kind: Pod
        apiVersion: v1
        metadata:
          name: web1
          labels:
            app: web   # 服务靠标签寻找后端
        spec:
          containers:
          - name: apache
            image: myos:httpd

     1.4 给service服务设置固定的ip
        ---
        kind: Service
        apiVersion: v1
        metadata:
          name: websvc
        spec:
          type: ClusterIP
          clusterIP: 10.245.1.80  #固定的ip
          selector:
            app: web
          ports:
          - protocol: TCP
            port: 80
            targetPort: 80

    1.5 端口别名,解决后端pod中多个服务的端口不一致情况
        service资源设置:
        ---
        kind: Service
        apiVersion: v1
        metadata:
          name: websvc
        spec:
          type: ClusterIP
          clusterIP: 10.245.1.80  # 固定的ip
          selector:
            app: web
          ports:
          - protocol: TCP
            port: 80
            targetPort: myhttp  # 端口别名
        pod资源设置:
        ---
        kind: Pod
        apiVersion: v1
        metadata:
          name: web1
          labels:
            app: web       # 服务靠标签寻找后端
        spec:
          containers:
          - name: apache
            image: myos:httpd
          ports:
          - name: myhttp  # 使用别名
            protocol: TCP
            containerPort: 80

    2.NodePort:使用基于端口映射(30000-32767),外部服务请求节点,节点将请求转发给内部的clusterip
        nodeport--clusterip(service)--pod
    2.1 NodePort对外发布服务
        ---
        kind: Service
        apiVersion: v1
        metadata:
          name: mysvc
        spec:
          type: NodePort            # 服务类型
          selector:
            app: web
          ports:
          - protocol: TCP
            port: 80
            nodePort: 30080         # 映射端口号,不设置使用随机的端口号
            targetPort: 80    
        外部服务通过端口转发访问服务:curl http://node-0001:30080

    3.Ingress(规则+控制器):通过http和https访问集群内部服务,支持域名解析
        ingress--service(clusterip)--pod
        前提:必须先配置好clusterip
        
    3.1 安装并配置ingress的规则
        # 查询ingress控制器类名称
        [root@master ~]# kubectl get ingressclasses.networking.k8s.io 
        ---
        apiVersion: networking.k8s.io/v1
        kind: Ingress
        metadata:
          name: simple
        spec:
          ingressClassName: ningx #控制器
          rules:            # 规则
          - host: foo.com   # 域名
            http:           # 协议
              paths:    
            //前端参数
              - path: /bar    # 访问的url路径
                pathType: Exact #路径的类型(Prefix:宽松模式,访问路径以及子路径的内容,Exact:严格模式)
            //后端参数    
                backend:     # 后端
                  service: 
                    name: svc1    #服务名
                    port:        #端口号
                      number: 80
        status:
          loadBalancer: {}

二.dashbord插件:基于网页的k8s用户界面
    1.安装dashborad
        [root@master ~]# cd plugins/dashboard
        [root@master dashboard]# docker load -i dashboard.tar.xz
        [root@master dashboard]# docker images|while read i t _;do
            [[ "${t}" == "TAG" ]] && continue
            [[ "${i}" =~ ^"harbor:443/".+ ]] && continue
            docker tag ${i}:${t} harbor:443/plugins/${i##*/}:${t}
            docker push harbor:443/plugins/${i##*/}:${t}
            docker rmi ${i}:${t} harbor:443/plugins/${i##*/}:${t}
        done
        sed -ri 's,^(\s*image: )(.*/)?(.+),\1harbor:443/plugins/\3,' recommended.yaml
        [root@master dashboard]# kubectl apply -f recommended.yaml
        [root@master dashboard]# kubectl -n kubernetes-dashboard get pods
        
    2.修改nodePort发布服务
        ---
        kind: Service
        apiVersion: v1
        metadata:
          labels:
            k8s-app: kubernetes-dashboard
          name: kubernetes-dashboard
          namespace: kubernetes-dashboard
        spec:
          type: NodePort
          ports:
            - port: 443
              nodePort: 30443
              targetPort: 8443
          selector:
            k8s-app: kubernetes-dashboard
三.资源与帐号权限
    1.角色与权限分类
        资源对象            描述                      作用域
        ServiceAccount    服务账号,为 Pod 中运行的进程提供了一个身份    单一名称空间

        Role            角色,包含一组代表相关权限的规则        单一名称空间
        RoleBinding        将权限赋予用户,Role、ClusterRole 均可使用    单一名称空间

        ClusterRole        角色,包含一组代表相关权限的规则        全集群
        ClusterRoleBinding    将权限赋予用户,只可以使用 ClusterRole    全集群

    2.资源对象的权限(对资源类型进行权限管理)
        create     delete    deletecollection    get    list         
        创建     删除        删除集合         获取属性    获取列表(多个)  
        patch             update      watch
        补丁(补充某一部分内容)     更新          监控

    3.serviceaccount创建服务帐号
        # 资源对象模板
        kubectl -n kubernetes-dashboard create serviceaccount kube-admin --dry-run=client -o yaml
        
        [root@master ~]# vim admin-user.yaml
            ---
            kind: ServiceAccount
            apiVersion: v1
            metadata:
              name: kube-admin
              namespace: kubernetes-dashboard
        
        [root@master ~]# kubectl -n kubernetes-dashboard get serviceaccounts
    
    4.获取用户 token
        [root@master ~]# kubectl -n kubernetes-dashboard create token kube-admin

    6.自定义角色资源类型
        # 角色资源对象模板
        kubectl -n default create role myrole --resource=pods --verb=get,list --dry-run=client -o yaml
        ---
        kind: Role
        apiVersion: rbac.authorization.k8s.io/v1
        metadata:
          name: myrole
          namespace: default
        rules:
        - apiGroups:
          - ""
          resources: # 设置的资源
          - pods
          verbs:  #设置的授权
          - get
          - list

    7.给kube-admin普通用户授权(RoleBinding)
        ---
        kind: RoleBinding
        apiVersion: rbac.authorization.k8s.io/v1
        metadata:
          name: kube-admin-role   #授权策略名称
          namespace: default
        roleRef:             #关联权限
          apiGroup: rbac.authorization.k8s.io #角色对象组
          kind: Role             #角色资源对象
          name: myrole         #角色资源名称
        subjects:             #帐号授权配置
        - kind: ServiceAccount     #帐号资源对象
          name: kube-admin         #帐号资源名称
          namespace: kubernetes-dashboard #帐号所在的名称空间

    9.给集群管理员授权(ClusterRoleBinding)
        ---
        kind: ServiceAccount
        apiVersion: v1
        metadata:
          name: kube-admin
          namespace: kubernetes-dashboard
        
        ---
        kind: ClusterRoleBinding
        apiVersion: rbac.authorization.k8s.io/v1
        metadata:
          name: kube-admin-role
        roleRef:
          apiGroup: rbac.authorization.k8s.io
          kind: ClusterRole
          name: cluster-admin
        subjects:
        - kind: ServiceAccount
          name: kube-admin
          namespace: kubernetes-dashboard
    


http://www.ppmy.cn/devtools/157694.html

相关文章

HarmonyOS:查询设备信息

说明 本模块首批接口从API version 6开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 部分参数返回值为default的&#xff0c;会在正式发布的版本中配置。 本模块接口返回设备常量信息&#xff0c;建议应用只调用一次&#xff0c;不需要频繁调用…

软件工程-软件需求分析基础

基本任务 准确地回答“系统必须做什么&#xff1f;”&#xff0c;也就是对目标系统提出完整、准确、清晰、具体的要求 目标是&#xff0c;在分析阶段结束之前&#xff0c;系统分析员应该写出软件需求规格说明书&#xff0c;以书面形式准确地描述软件需求。 准则 1&#xff…

基于机器学习的DDoS检测系统实战

基于机器学习的DDoS检测系统实战&#xff08;PythonScikit-learn&#xff09;&#xff5c;毕业设计必备 摘要&#xff1a;本文手把手教你从0到1实现一个轻量级DDoS攻击检测系统&#xff0c;涵盖数据预处理、特征工程、模型训练与可视化分析。 一、项目背景与意义 DDoS&#x…

RK3568上使用C++结合V4L2拉流,并RKMPP硬件编解码,并保存为MP4文件

在RK3568平台上使用C结合V4L2捕获视频流&#xff0c;并通过RKMPP进行硬件编码后保存为MP4文件&#xff0c;可以按照以下步骤实现&#xff1a; 1. 环境准备 硬件&#xff1a;RK3568开发板、摄像头模块。软件依赖&#xff1a; Linux内核支持V4L2。Rockchip MPP库&#xff08;RKM…

接入 deepseek 实现AI智能问诊

1. 准备工作 注册 DeepSeek 账号 前往 DeepSeek 官网 注册账号并获取 API Key。 创建 UniApp 项目 使用 HBuilderX 创建一个新的 UniApp 项目&#xff08;选择 Vue3 或 Vue2 模板&#xff09;。 安装依赖 如果需要在 UniApp 中使用 HTTP 请求&#xff0c;推荐使用 uni.requ…

Linux系统 环境变量

环境变量 写在前面概念查看环境变量main函数的参数argc & argvenv bash环境变量 写在前面 对于环境变量&#xff0c;本篇主要介绍基本概念及三四个环境变量 —— PATH、HOME、PWD。其中 PATH 作为 “ 敲门砖 ”&#xff0c;我们会更详细讲解&#xff1b;理解环境变量的全局…

MybatisPlus较全常用复杂查询引例(limit、orderby、groupby、having、like...)

MyBatis-Plus 是一个 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。以下是 MyBatis-Plus 中常用复杂查询&#xff08;如 LIMIT、ORDER BY、GROUP BY、HAVING、LIKE 等&#xff09;的引例&#xff1a; 1. 环境准备…

【Java基础篇】——第2篇:Java语法基础

第2篇&#xff1a;Java语法基础 2.1 引言 在上一篇中&#xff0c;我们介绍了Java的基本概念、应用场景以及如何搭建开发环境。本篇将深入探讨Java的语法基础&#xff0c;涵盖变量与数据类型、运算符、控制结构、数组、方法、面向对象编程的进一步内容、异常处理以及常用的编程…