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

news/2025/2/26 13:23:11
一.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
	

一.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.niftyadmin.cn/n/5845876.html

相关文章

疯狂前端面试题(二)

一、Webpack的理解 Webpack 是一个现代 JavaScript 应用程序的静态模块打包工具。Webpack 能够将各种资源&#xff08;JavaScript、CSS、图片、字体等&#xff09;视为模块&#xff0c;并通过依赖关系图将这些模块打包成一个或多个最终的输出文件&#xff08;通常是一个或几个…

WPS如何接入DeepSeek(通过第三方工具)

WPS如何接入DeepSeek 一、下载并安装OfficeAI插件二、配置OfficeAI插件三、使用DeepSeek功能 本文介绍如何通过 WPS 的第三方工具调用 DeepSeek 大模型&#xff0c;实现自动化文本扩写、校对和翻译等功能。 一、下载并安装OfficeAI插件 1、访问OfficeAI插件下载地址&#xff…

在阿里云ECS上一键部署DeepSeek-R1

DeepSeek-R1 是一款开源模型&#xff0c;也提供了 API(接口)调用方式。据 DeepSeek介绍&#xff0c;DeepSeek-R1 后训练阶段大规模使用了强化学习技术&#xff0c;在只有极少标注数据的情况下提升了模型推理能力&#xff0c;该模型性能对标 OpenAl o1 正式版。DeepSeek-R1 推出…

Listener监听器和Filter过滤器

一.监听器 1.是javaweb的三大组件之一,分别是Servlet程序,Listener监听器,Filter过滤器 2.Listener是JvaEE的规范,就是接口,监听器的作用就是监听某种变化(一般是对象创建/销毁,属性变化),触发对应方法完成相应的任务 3.ServletContextListener:/*当一个类实现了ServletContex…

OSPF基础(2):数据包详解

OSPF数据包(可抓包) OSPF报文直接封装在IP报文中&#xff0c;协议号89 头部数据包内容&#xff1a; 版本(Version):对于OSPFv2&#xff0c;该字段值恒为2(使用在IPV4中)&#xff1b;对于OSPFv3&#xff0c;该字段值恒为3(使用在IPV6中)。类型(Message Type):该OSPF报文的类型。…

【Leetcode 热题 100】72. 编辑距离

问题背景 给你两个单词 w o r d 1 word_1 word1​ 和 w o r d 2 word_2 word2​&#xff0c; 请返回将 w o r d 1 word_1 word1​ 转换成 w o r d 2 word_2 word2​ 所使用的最少操作数 。 你可以对一个单词进行如下三种操作&#xff1a; 插入一个字符删除一个字符替换一…

flink判断两个事件之间有没有超时(不使用CEP)

1.为啥不使用cep呢&#xff0c;cep的超时时间设置不好配置化&#xff0c;无法满足扩展要求 2.超时怎么界定。A事件发生后&#xff0c;过了N时间&#xff0c;还没有收到B事件&#xff0c;算超时。 代码如下&#xff1a; import com.alibaba.fastjson.JSONObject; import lombo…

Docker 和 Docker Compose

Docker 和 Docker Compose 是两个相关但用途不同的工具&#xff0c;它们在容器化应用的管理和部署中扮演不同的角色。以下是它们的核心区别&#xff1a; 1. 功能定位 Docker: 是一个容器化平台&#xff0c;用于创建、运行和管理单个容器。适用于单个容器应用的开发和测试。通过…