13-k8s-ingress网络

文章目录

    • 一、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-deploymentnamespace: ingress-nginx
    spec:replicas: 1selector:matchLabels:app: nginx-podtemplate:metadata:labels:app: nginx-podspec:containers:- name: nginx-containerimage: nginx:latestports:- name: nginx-portcontainerPort: 80protocol: TCP---apiVersion: apps/v1
    kind: Deployment
    metadata:name: tomcat-deploymentnamespace: ingress-nginx
    spec:replicas: 1selector:matchLabels:app: tomcat-podtemplate:metadata:labels:app: tomcat-podspec:containers:- name: tomcat-containerimage: tomcat:8.5-jre10-slimports:- name: tomcat-portcontainerPort: 8080protocol: 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-servicenamespace: ingress-nginx
    spec:selector:app: nginx-podtype: ClusterIPclusterIP: Noneports:- protocol: TCPport: 80targetPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:name: tomcat-servicenamespace: ingress-nginx
    spec:selector:app: tomcat-podtype: ClusterIPclusterIP: Noneports:- protocol: TCPport: 8080targetPort: 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-httpnamespace: ingress-nginx
    spec:rules:- host: nginx.bulut.comhttp:paths:- path: /pathType: Exactbackend:service:name: nginx-serviceport:number: 80  - host: tomcat.bulut.comhttp:paths:- path: /pathType: Exactbackend:service:name: tomcat-serviceport:number: 8080ingressClassName: 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:d8196e3bc1e72547c5dec66d6556c0ff92a23f6d0919b206be170bc90d5f9185image: k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.1.1@sha256:64d8c73dca984af206adf9d6d7e46aa550362b1d7a01f3a0a91b20cc67868660image: k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.1.1@sha256:64d8c73dca984af206adf9d6d7e46aa550362b1d7a01f3a0a91b20cc67868660
    

    改为

    image: docker.io/dyrnq/controller:v1.2.0@sha256:d8196e3bc1e72547c5dec66d6556c0ff92a23f6d0919b206be170bc90d5f9185image: registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.1.1@sha256:64d8c73dca984af206adf9d6d7e46aa550362b1d7a01f3a0a91b20cc67868660image: 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: controllerapp.kubernetes.io/instance: ingress-nginxapp.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginxapp.kubernetes.io/version: 1.2.0name: ingress-nginx-controllernamespace: ingress-nginx
    spec:externalTrafficPolicy: Localports:- appProtocol: httpname: httpport: 80nodePort: 80protocol: TCPtargetPort: http- appProtocol: httpsname: httpsport: 443protocol: TCPtargetPort: httpsselector:app.kubernetes.io/component: controllerapp.kubernetes.io/instance: ingress-nginxapp.kubernetes.io/name: ingress-nginxtype: 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: controllerimage:## Keep false as default for now!chroot: falseregistry: registry.cn-hangzhou.aliyuncs.comimage: 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: trueimage:registry: registry.cn-hangzhou.aliyuncs.comimage: 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: linuxingress: "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.crt3. 创建Ingress1)新建ingress-https.yaml文件:vi /opt/ingress-https.yaml ```java
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: ingress-https
spec:tls:- secretName: tls-secrethosts:- nginx.bulut.com- tomcat.bulut.comrules:- host: nginx.bulut.comhttp:paths:- path: /pathType: Exactbackend:service:name: nginx-serviceport:number: 80- host: tomcat.bulut.comhttp:paths:- path: /pathType: Exactbackend:service:name: tomcat-serviceport: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.rhkb.cn/news/160051.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL进阶(再论JDBC)——JDBC编程思想的分析 JDBC的规范架构 JDBC相关的类分析

前言 SQL(Structured Query Language)是一种用于管理关系型数据库的标准化语言,它用于定义、操作和管理数据库中的数据。SQL是一种通用的语言,可以用于多种关系型数据库管理系统(RDBMS),如MySQ…

电力物联网关智能通讯管理机-安科瑞黄安南

众所周知,网关应用于各种行业的终端设备的数据采集与数据分析,然后去实现设备的监测、控制、计算,为系统与设备之间建立通讯联系,达到双向的数据通讯。 网关可以实时监测并及时发现异常数据,同时自身根据用户规则进行…

nginx.4——正向代理和反向代理(七层代理和四层代理)

1、正向代理反向代理 nginx当中有两种代理方式 七层代理(http协议) 四层代理(tcp/udp流量转发) 七层代理 七层代理:代理的是http的请求和响应。 客户端请求代理服务器,由代理服务器转发给客户端http请求。转发到内部服务器(可以单台&#…

Avalonia 实现跨平台的视频聊天、屏幕分享(源码,支持Win、银河麒麟、统信UOS)

现在最火的.NET跨平台UI框架莫过于Avalonia了。Avalonia 基于.NET Core,因此它可以运行在任何支持.NET Core的平台上。之前基于CPF跨平台UI框架写过一个视频聊天的demo,而现在看来Avalonia是大势所趋,于是,我再写一个Avalonia版本…

基于区块链与联邦学习技术的数据交易平台

目录 基于区块链与联邦学习技术的数据交易平台 基于区块链与联邦学习技术的数据交易平台 联邦学习与区块链的集成的优势在于能够确认参与各方的身份并实现学习过程追溯。 首先,通过的身份认证系统与定制化的联邦学习协议来解决交易各方身份确认的问题。 如图1所示…

Q-learning如何与ABC等一些元启发式算法能够结合在一起?

1、出现的问题 Q-learning能和元启发式算法(如ABC、PSO、GA、SSA等)结合在一起,实现工作流调度问题? Q-learning和ABC (Artificial Bee Colony) 等元启发式算法可以结合在一起以解决特定类型的问题。Q-learning是一种强化学习算法…

QTday1

#include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {this->resize(430,330);this->setWindowTitle("QQ");this->setWindowIcon(QIcon("E:\\桌面\\qq.png"));this->setWindowFlag(Qt::FramelessWindowHint…

Windows工业三防平板全功能NFC近距离感应一维/二维扫描

Windows系统工业三防平板电脑是一种在智慧工厂仓储物流、MES数采、车载设备、设备检测、自动化控制等领域广泛应用的先进设备。此外,它还在公共服务领域,如高速交通、物流运输、电力检测、公务执法、银行金融、船舶装备、户外勘测、建筑工程、汽车检测、…

【python高级】设计模式、类工厂、对象工厂

一、说明 最近试着读Design pattern, 不过有些概念实在太抽象了, 整理一下自己所学抽象工厂的精神,就是要有abstract class(not implement),而所有不同种类的对象,都是继承这个abstract class&a…

unordered_set unordered_map 的封装

目录 1. 哈希的概念 1.1. 哈希冲突 1.2. 哈希函数: 1. 直接定址法 2. 除留余数法 1.3. 闭散列实现哈希 1.4. 开散列实现哈希 2. 哈希的应用 2.1 位图的概念 2.1.1. 问题: 2.2.1. set ​编辑 2.2.2. reset 2.2.3. test() 2.2. 位图的实现…

使用解构赋值简化axios返回对象属性元素的提取

axios返回的response通常都会进行一层封装,把响应的数据封装到了data这个对象,所以提取数据起来不太方便,往往需要res.data.xxx这样获取里面的数据, 具体可以参考下面的数据结构: 假如data的数据是下面的结构&#xf…

【Unity引擎核心-Object,序列化,资产管理,内存管理】

文章目录 整体介绍Native & Managed Objects什么是序列化序列化用来做什么Editor和运行时序列化的区别脚本序列化针对序列化的使用建议 Unity资产管理导入Asset Process为何要做引擎资源文件导入Main-Assets和 Sub-Assets资产的导入管线Hook,AssetPostprocessor…

傅里叶变换和其图像处理中的应用

以下部分文字资料整合于网络,本文仅供自己学习用! 一、为什么要在频域进行图像处理? 一些在空间域表述困难的增强任务,在频率域中变得非常普通 滤波在频率域更为直观,你想想嘛,所谓滤波,就是…

Spring Boot Bean 注入的常用方式教程

Spring Boot Bean 注入是一种将依赖对象引入到应用程序组件中的机制,它有助于实现松耦合和可测试的代码。这种注入方式允许我们将依赖关系委托给 Spring 容器来管理,从而提高了代码的可维护性和可读性。Spring Boot 提供了多种 Bean 注入方式&#xff0c…

Linux-CentOS8-Oracle19c 安装详解

Linux-CentOS8-Oracle19c安装图解 文章目录 Linux-CentOS8-Oracle19c安装图解预备1. Oracle19c 安装手册:2. 安装虚拟机:4G内存,2*2核心,30G3. 下载CentOS8镜像。4. 开始准备预安装5. 修改Oracle账户密码6. 修改SELINUX值在文件&a…

AWS SAP-C02教程2--存储资源

存储资源在架构设计中是一个少不了的环节,而在AWS中有不同类型的存储资源,对应会有不同用途不同价格,SAP考试中考察各种存储是少不了,以下是涉及到的存储 目录 1 非结构化存储1.1 EBS(块存储)1.1.1 基本限制1.1.2 类型1.1.3 RAID 配置选项1.1.4 Snapshot1.2 Local Insta…

thinkphp6 入门(8)-- Session

开启Session Session功能默认是没有开启的(API应用通常不需要使用Session) think\middleware\SessionInit// 添加引用 use think\facade\Session; 赋值 Session::set(name, thinkphp);取值 // 如果值不存在,返回null Session::get(name)…

CSS的布局 Day03

一、显示模式: 网页中HTML的标签多种多样,具有不同的特征。而我们学习盒子模型、使用定位和弹性布局把内容分块,利用CSS布局使内容脱离文本流,使用定位或弹性布局让每块内容摆放在想摆放的位置,让网站页面布局更合理、…

ESP32-IPS彩屏ST7789-Arduino-简单驱动

目的: 使ESP32能够驱动点亮ST7789显示屏 前提条件: ESP32 ST7789 (240 x240,IPS) 杜邦线 Arduino 过程: 0x00--接线 0x01--驱动: 彩屏驱动库 针对不同的彩屏驱动芯片,常用的 Arduino…

如何实现 Es 全文检索、高亮文本略缩处理(封装工具接口极致解耦)

如何实现 Es 全文检索、高亮文本略缩处理 前言技术选型JAVA 常用语法说明全文检索开发高亮开发Es Map 转对象使用核心代码 Trans 接口(支持父类属性的复杂映射)Trans 接口可优化的点高亮全局配置类如下真实项目落地效果为什么不用 numOfFragments、fragm…