13-k8s-ingress网络

news2025/1/11 12:26:13

文章目录

    • 一、ingress介绍
    • 二、创建nginx和tomcat供测试
    • 三、创建ingress-http
    • 四、yaml方式安装ingress
    • 五、helm方式安装ingress(推荐)
    • 六、Ingress的HTTPS代理

一、ingress介绍

  1. Service对集群之外暴露服务的主要方式有两种:NotePort和LoadBalancer,但是这两种方式,都有一定的缺点

    1)NodePort方式的缺点是会占用很多集群机器的端口,那么当集群服务变多的时候,这个缺点就愈发明显
    2)LB方式的缺点是每个service需要一个LB,浪费、麻烦,并且需要kubernetes之外设备的支持
    基于这种现状,kubernetes提供了Ingress资源对象,Ingress只需要一个NodePort或者一个LB就可以满足暴露多个Service的需求

  2. ingress相关涉及概念

    1)ingress:kubernetes中的一个对象,作用是定义请求如何转发到service的规则

    2)ingress controllel:具体实现反向代理及负载均衡的程序,对ingress定义的规则进行解析,根据配置的规则来实现请求转发,实现方式有很多,比如Nginx, Contour, Haproxy等等

  3. ingress工作机制

    Ingress相当于一个七层的负载均衡器,是kubernetes对反向代理的一个抽象,它的工作原理类似于Nginx。原理是安装完ingress后,在Ingress Service中定义哪个域名对应kubernetes集群中的哪个Service,Ingress Controller通过监听这些映射规则并转化为Nginx(或Contour、Haproxy)的反向代理配置,并将反向代理配置写入这些Nginx(或Contour、Haproxy)服务,最后由Nginx(或Contour、Haproxy)对外提供服务
    在这里插入图片描述

二、创建nginx和tomcat供测试

  1. 创建空间:kubectl create ns ingress-nginx

  2. 创建nginx pod和tomcat的pod

    1)编写yaml文件:vi /opt/nginx-tomcat-deployment.yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      namespace: ingress-nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx-pod
      template:
        metadata:
          labels:
            app: nginx-pod
        spec:
          containers:
            - name: nginx-container
              image: nginx:latest
              ports:
                - name: nginx-port
                  containerPort: 80
                  protocol: TCP
    
    ---
    
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: tomcat-deployment
      namespace: ingress-nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: tomcat-pod
      template:
        metadata:
          labels:
            app: tomcat-pod
        spec:
          containers:
            - name: tomcat-container
              image: tomcat:8.5-jre10-slim
              ports:
                - name: tomcat-port
                  containerPort: 8080
                  protocol: TCP
    
    apiVersion: 定义所使用的Kubernetes API的版本,这里是"apps/v1"。
    kind: 定义资源的类型,这里是"Deployment"。
    metadata: 元数据,用于描述该Deployment的属性。
    	name: 定义Deployment的名称为"tomcat-deployment"。
    	namespace: 定义Deployment所属的命名空间为"dev"。
    spec: Deployment的规格,指定了Deployment的配置选项。
    	replicas: 定义要创建的Pod的副本数量,这里是3个。
    	selector: 用于选择要管理的Pod的标签。
    		matchLabels: 匹配标签的列表,这里选择带有"app: tomcat-pod"标签的Pod。
    	template: 定义要创建的Pod的模板。
    		metadata: Pod的元数据,用于描述Pod的属性。
    			labels:Pod添加的标签,这里是"app: tomcat-pod"。
    		spec: Pod的规格设置。
    			containers: 定义Pod中的容器列表。
    				name: 容器的名称为"tomcat-container"。
    				image: 定义容器所使用的镜像为"tomcat:8.5-jre10-slim"。
    				ports: 定义容器暴露的端口列表。
    					name: 定义端口的名称为"tomcat-port"。
    					containerPort: 定义容器内部监听的端口号为8080。
    					protocol: 定义端口的协议为TCP

    2)创建pod:kubectl apply -f /opt/nginx-tomcat-deployment.yaml

    3)查看创建的pod:kubectl get pod
    在这里插入图片描述

  3. 准备Service

    1)新建nginx-tomcat.yaml文件:vi /opt/nginx-tomcat.yaml

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-service
      namespace: ingress-nginx
    spec:
      selector:
        app: nginx-pod
      type: ClusterIP
      clusterIP: None
      ports:
        - protocol: TCP
          port: 80
          targetPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: tomcat-service
      namespace: ingress-nginx
    spec:
      selector:
        app: tomcat-pod
      type: ClusterIP
      clusterIP: None
      ports:
        - protocol: TCP
          port: 8080
          targetPort: 8080
    
    apiVersion: 定义所使用的Kubernetes API的版本,这里是"v1"。
    kind: 定义资源的类型,这里是"Service",表示创建一个Service资源。
    metadata: 元数据,用于描述该Service的属性。
    	name: 定义Service的名称为"nginx-service"。
    	namespace: 定义Service所属的命名空间为"dev"。
    spec: Service的规格,指定了Service的配置选项。
    	selector: 用于选择要匹配的Pod的标签。
    		app: 对应Pod的标签为"nginx-pod"。
    	type: 定义Service的类型,这里是"ClusterIP",表示创建一个仅在集群内部访问的Service。
    	clusterIP: 定义Service的虚拟IP地址,这里设置为"None",表示不会分配一个可路由的IP地址给Service。
    	ports: 定义Service暴露的端口列表。
    		protocol: 定义端口的协议为TCP。
    		port: 定义Service暴露的端口号为80。
    		targetPort: 定义将流量转发到Pod的目标端口为80

    2)创建pod:kubectl apply -f /opt/nginx-tomcat.yaml

    3)查看:kubectl get svc -n ingress-nginx
    在这里插入图片描述

三、创建ingress-http

  1. 创建ingress

    1)新建ingress-http.yaml文件:vi /opt/ingress-http.yaml

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: ingress-http
      namespace: ingress-nginx
    spec:
      rules:
        - host: nginx.bulut.com
          http:
            paths:
              - path: /
                pathType: Exact
                backend:
                  service:
                    name: nginx-service
                    port:
                      number: 80  
        - host: tomcat.bulut.com
          http:
            paths:
              - path: /
                pathType: Exact
                backend:
                  service:
                    name: tomcat-service
                    port:
                      number: 8080
      ingressClassName: nginx
    
    apiVersion: 定义所使用的Kubernetes API的版本,这里是"networking.k8s.io/v1",表示使用了网络扩展API。
    kind: 定义资源的类型,这里是"Ingress",表示创建一个Ingress资源。
    metadata: 元数据,用于描述该Ingress的属性。
    	name: 定义Ingress的名称为"ingress-http"。
    	namespace: 定义Ingress所属的命名空间为"dev"。
        annotations: 
          kubernetes.io/ingress.class: "nginx"
          nginx.ingress.kubernetes.io/rewrite-target: /  #表示匹配的路径,匹配部分需要重写逻辑
    spec: Ingress的规格,指定了Ingress的配置选项。
    	rules: 定义Ingress规则的列表。
    		- host: 指定Ingress规则要匹配的主机名。
    			nginx.bulut.com: 匹配主机为"nginx.bulut.com"。
    			tomcat.bulut.com: 匹配主机为"tomcat.bulut.com"。
    		http: 指定该规则使用HTTP协议。
    			paths: 定义路径与后端服务之间的映射关系。
    				- path: 指定要映射的路径为"/",表示将该规则应用于所有路径。
    				pathType: 指定路径类型为"Exact",表示精确匹配路径。Prefix表示前缀匹配,通常跟rewrite-target组合使用。
    				backend: 指定要将流量转发到的后端服务。
    					service: 指定后端服务的名称。
    						name: 后端服务的名称分别为"nginx-service""tomcat-service"。
    						port: 指定要将流量转发到的后端服务的端口。
    							number: 后端服务的端口号分别为808080

    2)创建pod:kubectl apply -f /opt/ingress-http.yaml

    3)查看:kubectl get ingress ingress-http -n ingress-nginx
    在这里插入图片描述

    4)查看详情:kubectl describe ingress ingress-http -n ingress-nginx
    在这里插入图片描述

  2. 查看ingress运行所在服务器:kubectl get pods -n ingress-nginx -o wide
    在这里插入图片描述

四、yaml方式安装ingress

ps:master节点操作

  1. 切换路径:cd /opt

  2. 创建ingress-nginx

    1)下载ingress-nginx的yaml文件:wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.2.0/deploy/static/provider/cloud/deploy.yaml

    2)修改yaml文件内容

    image: k8s.gcr.io/ingress-nginx/controller:v1.2.0@sha256:d8196e3bc1e72547c5dec66d6556c0ff92a23f6d0919b206be170bc90d5f9185
    
    image: k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.1.1@sha256:64d8c73dca984af206adf9d6d7e46aa550362b1d7a01f3a0a91b20cc67868660
    
    image: k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.1.1@sha256:64d8c73dca984af206adf9d6d7e46aa550362b1d7a01f3a0a91b20cc67868660
    

    改为

    image: docker.io/dyrnq/controller:v1.2.0@sha256:d8196e3bc1e72547c5dec66d6556c0ff92a23f6d0919b206be170bc90d5f9185
    
       
    image: registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.1.1@sha256:64d8c73dca984af206adf9d6d7e46aa550362b1d7a01f3a0a91b20cc67868660
    
    image: registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.1.1@sha256:64d8c73dca984af206adf9d6d7e46aa550362b1d7a01f3a0a91b20cc67868660
    
    image: docker.io/dyrnq/controller:v1.2.0@sha256:d8196e3bc1e72547c5dec66d6556c0ff92a23f6d0919b206be170bc90d5f9185
    的备用地址:
    image: registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.2.0@sha256:d8196e3bc1e72547c5dec66d6556c0ff92a23f6d0919b206be170bc90d5f9185
    可忽略
    

    3)创建pod:kubectl apply -f /opt/deploy.yaml

    4)查看ingress-nginx的pod:kubectl get pod -n ingress-nginx -o wide
    在这里插入图片描述

    5)查看ingress-nginx的Service:kubectl get svc -n ingress-nginx
    在这里插入图片描述

  3. 访问nginx和tomcat服务

    1)设置主机名映射:vi /etc/hosts

    ps:这里的ip取运行ingress-nginx-controller pod的节点,因为我都是在worker1运行的,所以取192.168.248.11

    192.168.248.11 tomcat.bulut.com
    192.168.248.11 nginx.bulut.com
    

    2)重置网络:service network restart

    3)查看ingress-nginx的Service开放的端口:kubectl get svc -n ingress-nginx
    在这里插入图片描述

    4)访问nginx:curl http://nginx.bulut.com:32397
    在这里插入图片描述

    5)访问tomcat:curl http://tomcat.bulut.com:32397
    在这里插入图片描述

  4. 原理说明:可以将ingress-nginx的Service开放的端口,理解成是nginx的端口。然后根据域名进行匹配,就跟nginx的前缀匹配一样,进行反向代理。

  5. 本地连接测试

    1)查看ingress pod所在:kubectl describe pod ingress-nginx-controller-77d4dc6978-bq2xt -n ingress-nginx
    在这里插入图片描述

    2)在本地的hosts文件配置映射

    192.168.248.11 tomcat.bulut.com
    192.168.248.11 nginx.bulut.com
    

    3)浏览器访问:http://nginx.bulut.com:32397/
    在这里插入图片描述

  6. ingress默认使用的http 80;https 443;采用nodeport方式默认的端口暴露范围在 30000-32767。通过更改apiserver nodeport端口范围,达到更改ingress端口的作用。

    1)修改apiserver端口范围:vi /etc/kubernetes/manifests/kube-apiserver.yaml
    添加 --service-node-port-range=1-32767

    2)重新启动apiserver:kubectl delete pod kube-apiserver-master -n kube-system

    3)修改配置,更改ingress端口:vi /opt/ingress-service.yaml

    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app.kubernetes.io/component: controller
        app.kubernetes.io/instance: ingress-nginx
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx
        app.kubernetes.io/version: 1.2.0
      name: ingress-nginx-controller
      namespace: ingress-nginx
    spec:
      externalTrafficPolicy: Local
      ports:
      - appProtocol: http
        name: http
        port: 80
        nodePort: 80
        protocol: TCP
        targetPort: http
      - appProtocol: https
        name: https
        port: 443
        protocol: TCP
        targetPort: https
      selector:
        app.kubernetes.io/component: controller
        app.kubernetes.io/instance: ingress-nginx
        app.kubernetes.io/name: ingress-nginx
      type: LoadBalancer
    

    4)启动:kubectl apply -f /opt/ingress-service.yaml

    5)访问:http://tomcat.bulut.com/和http://nginx.bulut.com/

    ps:nginx.bulut.comtomcat.bulut.com主机名需要跟ingress-nginx所在的主机ip做映射。
    在这里插入图片描述

五、helm方式安装ingress(推荐)

  1. 卸载原来的ingress:kubectl delete -f /opt/deploy.yaml

  2. 搜索 ingress-nginx :helm search repo ingress-nginx

  3. 给节点设置标签,后面set设置ingress只能部署在 ingress=true的节点上:kubectl label node worker1 ingress=true

  4. 直接安装ingress

    ps:因为是从github拉取,所以很慢甚至拉不到。如果拉不到,直接跳过此步骤。如果可以,直接进入第11步

    helm install ingress-nginx ingress-nginx/ingress-nginx  -n  ingress-nginx --set controller.hostNetwork=true  --set controller.dnsPolicy=ClusterFirstWithHostNet     --set controller.kind=DaemonSet    --set controller.image.registry=registry.cn-hangzhou.aliyuncs.com  --set controller.image.image=google_containers/nginx-ingress-controller   --set controller.admissionWebhooks.patch.image.registry=registry.cn-hangzhou.aliyuncs.com  --set controller.admissionWebhooks.patch.image.image=google_containers/kube-webhook-certgen --set controller.admissionWebhooks.patch.image.tag="v1.8.1"    --set controller.nodeSelector.ingress="true"   --set controller.service.type=ClusterIP    --set controller.admissionWebhooks.enabled=false
    
  5. 在/opt/helm目录下拉取镜像

    cd /opt/helm
    helm pull ingress-nginx/ingress-nginx
    
  6. 解压:tar -zxvf ingress-nginx-4.7.1.tgz

  7. 进入解压目录:cd /opt/helm/ingress-nginx

  8. 修改配置文件:vi values.yaml

    ps:不同地方的修改点用------------隔开

    ------4------
    controller:
      name: controller
      image:
        ## Keep false as default for now!
        chroot: false
        registry: registry.cn-hangzhou.aliyuncs.com
        image: google_containers/nginx-ingress-controller
        ## for backwards compatibility consider setting the full image url via the repository value below
        ## use *either* current default registry/image or repository format or installing chart by providing the values.yaml will fail
        ## repository:
        tag: "v1.8.1"
        # digest: sha256:e5c4824e7375fcf2a393e1c03c293b69759af37a9ca6abdb91b13d78a93da8bd
        # digestChroot: sha256:e0d4121e3c5e39de9122e55e331a32d5ebf8d4d257227cb93ab54a1b912a7627
    ------2------
    dnsPolicy: ClusterFirstWithHostNet
    ------1------
    hostNetwork: true
    
    ------3------
    kind: DaemonSet
    
    
    -------5-----
        patch:
          enabled: true
          image:
            registry: registry.cn-hangzhou.aliyuncs.com
            image: google_containers/kube-webhook-certgen
            ## for backwards compatibility consider setting the full image url via the repository value below
            ## use *either* current default registry/image or repository format or installing chart by providing the values.yaml will fail
            ## repository:
            tag: "v1.8.1"
            ## digest: sha256:543c40fd093964bc9ab509d3e791f9989963021f1e9e4c9c7b6700b02bfb227b
            ## pullPolicy: IfNotPresent
    ------6------
    nodeSelector:
        kubernetes.io/os: linux
        ingress: "true"
      ## Liveness and readiness probe values
      ## Ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes         
    ------7------            
        type: ClusterIP
        ## type: NodePort     
    ------8------       
      admissionWebhooks:
        annotations: {}
        # ignore-check.kube-linter.io/no-read-only-rootfs: "This deployment needs write access to root filesystem".
    
        ## Additional annotations to the admission webhooks.
        ## These annotations will be added to the ValidatingWebhookConfiguration and
        ## the Jobs Spec of the admission webhooks.
        enabled: false
    
  9. 创建ingress-nginx资源:helm install ingress-nginx -n ingress-nginx .

    ps卸载:helm uninstall ingress-nginx -n ingress-nginx

  10. 查看:kubectl get pod -n ingress-nginx -o wide
    在这里插入图片描述

  11. 访问http://nginx.bulut.com/和http://tomcat.bulut.com/

    ps:如果没有经过第三步,需要补充一些第三步的步骤,比如创建ingress的映射关系等等
    在这里插入图片描述

六、Ingress的HTTPS代理

ps:master节点操作

  1. 生成证书

    openssl req -newkey rsa:2048 -nodes -keyout tls.key -x509 -days 3650 -out tls.crt -subj "/C=CN/ST=HN/L=CS/O=bulut/OU=bulut/CN=bulut.com/emailAddress=bulut@163.com"
    

    参数说明

req:表示证书请求的子命令
-newkey rsa:2048:表示生成私钥
-nodes:表示私钥不加密
-keyout tls.key:表示生成的私钥输出文件
-x509:表示输出证书
-days 3650:表示证书有效期
-out tls.crt:表示生成的证书输出文件
-subj “/C=CN/ST=HN/L=CS/O=bulut/OU=bulut/CN=bulut.com/emailAddress=bulut@163.com”:表示自动输入证书拥有者信息,分别表示:国家/省份/城市/公司名/部门名/域名/邮件地址


2. 创建密钥:kubectl create secret tls tls-secret --key tls.key --cert tls.crt

3. 创建Ingress

1)新建ingress-https.yaml文件:vi /opt/ingress-https.yaml 

```java
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-https
spec:
  tls:
    - secretName: tls-secret
      hosts:
        - nginx.bulut.com
        - tomcat.bulut.com
  rules:
    - host: nginx.bulut.com
      http:
        paths:
          - path: /
            pathType: Exact
            backend:
              service:
                name: nginx-service
                port:
                  number: 80
    - host: tomcat.bulut.com
      http:
        paths:
          - path: /
            pathType: Exact
            backend:
              service:
                name: tomcat-service
                port:
                  number: 8080

apiVersion: networking.k8s.io/v1: 这指定了使用的Kubernetes API版本。
kind: Ingress: 这指定了资源类型为Ingress。
metadata: 这是Ingress对象的元数据,包括名称(name)和命名空间(namespace)。
spec: 这是Ingress规范,定义了Ingress的规则和TLS配置。
	tls: 这指定了使用的TLS证书的名称(secretName)和绑定的主机名列表(hosts)。
	rules: 这定义了Ingress的路由规则。
		host: 这指定了请求的主机名。
		http: 这定义了针对HTTP请求的规则。
			paths: 这定义了路由到该主机的路径规则。
				path: 这指定了请求的路径。
				pathType: 这指定了路径的匹配类型,例如Exact表示精确匹配。
				backend: 这指定了路由到的后端服务。
					service: 这定义了后端服务的名称(name)和端口(port)。

2)创建pod:kubectl apply -f /opt/ingress-https.yaml

  1. Ingress查看:kubectl get ingress ingress-https
    在这里插入图片描述

  2. Ingress详情的查看:kubectl describe ingress ingress-https
    在这里插入图片描述

  3. 访问tomcat和nginx

    curl --insecure https://nginx.bulut.com
    curl --insecure https://tomcat.bulut.com
    

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

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

相关文章

强化学习基础(2)—常用算法总结

目录 1.Value-Based 2. Policy-Based 参考文献 1.Value-Based Sarsa(State-action-reward-state’-action):是为了建立和优化状态-动作(state-action)的价值Q表格所建立的方法。首先初始化Q表格,根据当前的状态和动作与环境进行…

Mapping 设计指南

Mapping 设计指南 目录概述需求: 设计思路实现思路分析1、properties2.fields 3.search_analyzer4.2、format1、enabled2、doc_values 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0…

数据库、数据中台、数据仓库、数据湖区别

数据时代,各行业的企业都已经开始通过数据库来沉淀数据,但是真的论起数据库、数据仓库、数据中台,还是新出现的数据湖,它们的概念和区别,可能知道的人就比较少了,今天我们详细来比较了解一下。 一、数据仓…

FPGA通过读写突发对DS1302时钟的配置驱动

文章目录 前言一、pandas是什么?1、理论原理1、DS1302实时时钟芯片1、特性2、引脚定义3、有关读写操作的详细内容1、读写的几个端口信号2、命令字节3、突发读写时钟寄存器4、写保护位 4、数据读写时序&寄存器地址表1、数据单字节读写时序2、寄存器地址表 5、数据…

✔ ★【备战实习(面经+项目+算法)】 10.16学习时间表(总计学习时间:5h)

✔ ★【备战实习(面经项目算法)】 坚持完成每天必做如何找到好工作1. 科学的学习方法(专注!效率!记忆!心流!)2. 每天认真完成必做项,踏实学习技术 认真完成每天必做&…

C++指针解读(10)-- 动态内存分配

栈和堆是进程内存空间中非常重要的2块区域。栈用于存放程序临时创建的局部变量;堆用于存放进程运行中被动态分配的内存段。当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上;当利用free等函数释放内存时,被释放的…

虚拟机和Windows共享文件的几种方式(共享文件夹、网络映射、Winscp)

1、共享文件夹 在虚拟机的“/mnt/hgfs/”目录下能看到和Windows共享的文件; 2、网络映射 2.1、安装samba服务器 #安装samba服务器 apt-get install samba samba-common#添加samba账户 smbpasswd -a ckl passwd:1232.2、设置网络映射 3、Winscp共享文件 3.1、Wins…

snk-给github界面加一个有趣的动画

How to enable GitHub Actions on your Profile README for a snake-eating contribution graph 🐍 - DEV Community Platane/Platane (github.com) ① 创建New repository 名字和你自己的Github 用户名一样。 ② 创建之后,再这个Zero-coder仓库下创建…

[C国演义] 第十五章

第十五章 最长湍流子数组环绕字符串中唯⼀的⼦字符串 最长湍流子数组 力扣链接 子数组 ⇒ dp[i]的含义: 以arr[i] 结尾的所有子数组中的最长湍流子数组的长度 子数组 ⇒ 状态转移方程根据 最后一个位置来划分👇👇👇 初始化: 都初始化为…

任务调度框架-如何实现定时任务+RabbitMQ事务+手动ACK

任务调度框架 Java中如何实现定时任务? 比如: 1.每天早上6点定时执行 2.每月最后一个工作日,考勤统计 3.每个月25号信用卡还款 4.会员生日祝福 5.每隔3秒,自动提醒 10分钟的超时订单的自动取消,每隔30秒或1分钟查询…

Gson反序列化原理

前言 序列化和反序列化是日常工作中经常使用的工具,一般用于对象的持久化保存或者对象的网络传输,一般有两种情况,一种是对象本身实现了Serializable接口,这种情况下可以利用jdk自带的功能或者Kryo等这种封装好的序列化反序列化工…

10.Linear Map transformation rules

线性映射 从一个基底到另一个基底 所遵循的转换规则。 假设: 由一个矩阵给出的线性映射在这,并且是在基底e上表示, 该线性映射将e1变成0.5个e1,将e2变成2个e2; 假设有个向量V,其分量是【1,1…

福昕阅读器打开pdf文档时显示的标题不是文件名

0 Preface/Foreword 1 现象 文件名为:Demo-20231017 打开效果:显示名字为 word template 2 解决方法 2.1 利用打印方式将word生产pdf 在word生产pdf文件时,使用打印方式生成pdf文档。 2.2 删除word文档设置的标题 文件---》信息---》标…

“赔率”和“概率”

赔率与概率不同 Odds ! Probability 许多人将“赔率”和“概率”这两个词混为一谈。它们都表示对可能性或机会的估计。我可以理解普通人这样做,但我经常看到数据科学家和统计学家也混淆了这些概念,这是一种遗憾,因为在数学上它们有不同的含…

LVGL_基础控件btnmatrix

LVGL_基础控件btnmatrix 1、创建按钮矩阵 /* 分配按钮以及按钮上的文字 */ // 这里注意不要使用在函数退出时会被销毁的局部变量 // 可以用 "\n" 进行换行,最后一个按钮之后的元素必须是 NULL 或 "" // 换行 "\n" 和 "NULL&quo…

Z-Fighting问题解决(二) - Reverse-z

Z值相关技术概论理清 开始之前先简单理清科普一下涉及的跟三维图形学相关的深度Z相关的概念: Z-Buffer:上个世纪八十年代的图形学飞跃节点算法之一; Z缓冲是一种解决深度排序问题的方法,主要用于确定哪些物体在其他物体的前面。…

【Oracle】分析函数partition by,解决了使用group by后select语句中只能是分组的字段或者是一个聚合函数的问题

首先我们看一下group by的用法,比如根据省份分组。 select province, sum(persons) from t_person group by province;使用了group by后,select语句中只能是分组的字段(比如上面的province)或者是一个聚合函数(比如co…

【特纳斯电子】基于单片机的火灾监测报警系统-仿真设计

视频及资料链接:基于单片机的火灾监测报警系统-仿真设计 - 电子校园网 (mcude.com) 编号: T0152203M-FZ 设计简介: 本设计是基于单片机的火灾监测报警系统,主要实现以下功能: 1.通过OLED显示温度、烟雾、是否有火…

jenkins pipeline使用

1、jenkins全局配置 1.1、maven配置 1.2、jdk配置 1.3、git配置 2、构建环境配置 2.1、安装时间插件 Date Parameter 2.2、Git Parameter 插件安装 3、pipeline如下 pipeline {agent anyenvironment {image_name "192.168.122.150/ken-test/price-service:${date}&…

jmeter监控服务器的资源使用

一. 下载安装包SeverAgent-x.x.x.zip并安装到被监控服务器 下载地址:https://github.com/undera/perfmon-agent 下载完解压后执行运行,windows运行startAgent.bat, linux运行startAgent.sh 二. 在jmeter上添加插件jpgc-PerfMon Metrics Collector监听器…