【云原生】Kubernetes(k8s)Istio Gateway 介绍与实战操作

news2024/11/20 10:36:18

文章目录

    • 一、概述
    • 二、Istio 架构
    • 三、通过 istioctl 部署 Istio
      • 1)安装istioctl 工具
      • 2)通过istioctl安装istio
      • 3)检查
    • 四、Istio Gateway
    • 五、Istio VirtualService 虚拟服务
    • 六、示例演示(bookinfo)
      • 1)安装bookinfo应用
        • 1、创建命令空间
        • 2、添加label
        • 3、开始部署bookinfo
      • 2)添加路由规则
      • 3)访问服务
        • 1、通过NodePort访问
        • 2、通过externalip访问
      • 4)卸载bookinfo服务
      • 5)卸载 istio
    • 七、Istio Gateway 示例演示
      • 1)Helm 安装 Nginx,Apache
      • 2)http 测试
        • 1、配置 Gateway
        • 2、配置 VirtualService
        • 3、测试验证
      • 3)https 测试
        • 1、生成证书(有证书可忽略)
        • 2、配置 Gateway 和 VirtualService
    • 八、Ingress Controller 与 Istio Gateway 比较

一、概述

Istio 提供一种简单的方式来为已部署的服务建立网络,该网络具有负载均衡、服务间认证、监控、网关等功能,而不需要对服务的代码做任何改动。这里主要讲Istio Gateway服务。

  • istio 适用于容器或虚拟机环境(特别是 k8s),兼容异构架构。
  • istio 使用 sidecar(边车模式)代理服务的网络,不需要对业务代码本身做任何的改动。
  • HTTP、gRPC、WebSocket 和 TCP 流量的自动负载均衡。
  • istio 通过丰富的路由规则、重试、故障转移和故障注入,可以对流量行为进行细粒度控制;支持访问控制、速率限制和配额。
  • istio 对出入集群入口和出口中所有流量的自动度量指标、日志记录和跟踪。
  • istio 支持蓝绿发布和金丝雀发布(灰度发布)等。

Istio Gateway 描述在网格边缘运行的负载均衡器 接收传入或传出的 HTTP/TCP 连接。规格 描述应公开的一组端口,协议的类型 使用、负载均衡器的 SNI 配置等。

  • 使用网关为网格来管理入站和出站流量,可以让用户指定要进入或离开网格的流量。
  • Gateway 用于为 HTTP / TCP 流量配置负载均衡器,并不管该负载均衡器将在哪里运行。网格中可以存在任意数量的 Gateway,并且多个不同的 Gateway 实现可以共存。实际上,通过在配置中指定一组工作负载(Pod)标签,可以将 Gateway 配置绑定到特定的工作负载,从而允许用户通过编写简单的 Gateway Controller 来重用现成的网络设备。
  • Gateway 只用于配置 L4-L6 功能(例如,对外公开的端口,TLS 配置),所有主流的 L7 代理均以统一的方式实现了这些功能。然后,通过在 Gateway 上绑定 VirtualService 的方式,可以使用标准的 Istio 规则来控制进入 Gateway 的 HTTP 和 TCP 流量。

官方文档:https://istio.io/latest/zh/docs/
Istio Gateway 官方文档:https://preliminary.istio.io/latest/zh/docs/reference/config/networking/gateway/
GitHub地址:https://github.com/istio/istio

二、Istio 架构

在Kubernetes环境中,Ingress controller用于管理进入集群的流量。在Istio服务网格中 Istio Ingress Gateway承担相应的角色,它使用新的配置模型(Gateway 和 VirtualServices)完成流量管理的功能。通过下图做一个总的描述。
在这里插入图片描述

  1. 用户向某端口发出请求;
  2. 负载均衡器监听端口,并将请求转发到集群中的某个节点上。Istio Ingress Gateway Service 会监听集群节点端口的请求;
  3. Istio Ingress Gateway Service 将请求交给Istio Ingress Gateway Pod 处理。IngressGateway Pod 通过 Gateway 和 VirtualService 配置规则处理请求。其中,Gateway 用来配置端口、协议和证书,VirtualService 用来配置一些路由信息(找到请求对应处理的服务App Service);
  4. Istio Ingress Gateway Pod将请求转给App Service;
  5. 最终的请求会交给App Service 关联的App Deployment处理。

三、通过 istioctl 部署 Istio

1)安装istioctl 工具

wget https://github.com/istio/istio/releases/download/1.16.0/istio-1.16.0-linux-amd64.tar.gz
tar -xf istio-1.16.0-linux-amd64.tar.gz
ln -s /opt/istio/istioctl/istio-1.16.0/bin/istioctl /usr/local/bin/istioctl
istioctl version

2)通过istioctl安装istio

要想知道有哪几个内置的配置文件,可以运行以下命令:

istioctl profile list

在这里插入图片描述

配置文件核心组件说明
defaultistio-ingressgateway、istiod根据 IstioOperator API 的默认设置启动组件。可用于生产部署。
demoistio-egressgateway、istio-ingressgateway、istiod旨在展示 Istio 的功能,启用了高级别的追踪和访问日志(需要具有适度的资源),适合学习使用。
minimalistiod与默认配置文件相同,但只安装了控制平面组件。
remote-配置 Multicluster Mesh 的 Remote Cluster。
empty-不部署任何东西。可以作为自定义配置的基本配置文件。
previewistio-ingressgateway、istiod实验性。用于探索 Istio 的新功能。不确保稳定性、安全性和性能。

当你足够熟悉 Istio 后,你可以自定义配置文件。但在此之前,我们还是先以 demo 来入门吧。

### 查看 demo 的配置信息
istioctl profile dump demo

### 开始安装
# 【方式一】通过--set传参
istioctl install --set profile=demo

# 【方式二】通过-f指定文件
cat >my-demo-config.yaml<<EOF
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  profile: demo
EOF

istioctl install -f my-demo-config.yaml

3)检查

istioctl version
kubectl -n istio-system get deploy

在这里插入图片描述

四、Istio Gateway

在Kubernetes环境中,Ingress controller用于管理进入集群的流量。在Istio服务网格中 Istio Ingress Gateway承担相应的角色,它使用新的配置模型(GatewayVirtualServices)完成流量管理的功能。

  • 网关是一个运行在网格边缘的负载均衡器,用于接收传入或传出的HTTP/TCP连接。
  • 主要工作是接受外部请求,把请求转发到内部服务。网格边缘的Ingress 流量,会通过对应的 Istio IngressGateway Controller 进入到集群内部。

官方文档:https://preliminary.istio.io/latest/zh/docs/reference/config/networking/gateway/

【示例配置】

# cat gateway.yaml
apiVersion: networking.istio.io/v1beta1 
kind: Gateway
metadata:
  name: canary-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "*"	# *表示通配符,通过任何域名都可以访问

在上面这个yaml里我们配置了一个监听80端口的入口网关,它会将80端口的http流量导入到集群内对应的Virtual Service上。

五、Istio VirtualService 虚拟服务

VirtualService 是Istio流量治理的一个核心配置,可以说是Istio流量治理中最重要、最复杂的。VirtualService在形式上表示一个虚拟服务,将满足条件的流量都转发到对应的服务后端,这个服务后端可以是一个服务,也可以是在DestinationRule中定义的服务的子集。

官方文档:https://preliminary.istio.io/latest/zh/docs/reference/config/networking/virtual-service/

【示例配置】

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews-route
spec:
  hosts:
  - reviews.prod.svc.cluster.local
  http:
  - name: "reviews-v2-routes"
    match:
    - uri:
        prefix: "/wpcatalog"
    - uri:
        prefix: "/consumercatalog"
    rewrite:
      uri: "/newcatalog"
    route:
    - destination:
        host: reviews.prod.svc.cluster.local
        subset: v2
  - name: "reviews-v1-route"
    route:
    - destination:
        host: reviews.prod.svc.cluster.local
        subset: v1

字段说明:
在这里插入图片描述

六、示例演示(bookinfo)

1)安装bookinfo应用

在这里插入图片描述
在线书店-bookinfo:该应用由四个单独的微服务构成,这个应用模仿在线书店的一个分类,显示一本书的信息,页面上会显示一本书的描述,书籍的细节(ISBN、页数等),以及关于这本书的一些评论。

Bookinfo应用分为四个单独的微服务

  • productpage这个微服务会调用details和reviews两个微服务,用来生成页面;
  • details这个微服务中包含了书籍的信息;
  • reviews这个微服务中包含了书籍相关的评论,它还会调用ratings微服务;
  • ratings这个微服务中包含了由书籍评价组成的评级信息。

reviews微服务有3个版本

  • v1版本不会调用ratings服务;
  • v2版本会调用ratings服务,并使用1到5个黑色星形图标来显示评分信息;
  • v3版本会调用ratings服务,并使用1到5个红色星形图标来显示评分信息。

1、创建命令空间

kubectl create ns bookinfo

2、添加label

因为Istio proxy的注入是基于label,因此我们需要为demo namespace添加label,

kubectl label namespace bookinfo istio-injection=enabled
kubectl get ns --show-labels bookinfo

3、开始部署bookinfo

cd /opt/istio/istioctl/istio-1.16.0
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml -n bookinfo
kubectl get pod -n bookinfo

在这里插入图片描述
然后我们可查看应用pod里的容器信息,可以看到已经被注入istio-proxy,

kubectl get pod productpage-v1-bf4b489d8-gt7gw -n bookinfo -o jsonpath='{.status.containerStatuses}' | jq

在这里插入图片描述

2)添加路由规则

服务部署后,还需要添加路由规则,将请求路由到对应的服务

kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml -n bookinfo
kubectl get virtualservice -n bookinfo

在这里插入图片描述

3)访问服务

1、通过NodePort访问

获取host ip,也就是ingressgateway pod所在机器ip

kubectl get po -l istio=ingressgateway -n istio-system -o jsonpath='{.items[0].status.hostIP}'

获取port,也就是80端口映射的目的端口,即31082

kubectl -n istio-system get service istio-ingressgateway

在这里插入图片描述

web:http://192.168.182.111:32688/productpage
在这里插入图片描述

2、通过externalip访问

因为我们是本地测试,肯定没法使用公网的LB,因此我们可以直接将externalip修改为某个node的ip或者VIP,这是设置一个VIP(跟node节点同网段),这样就能通过80端口访问

kubectl -n istio-system get service istio-ingressgateway

kubectl patch svc istio-ingressgateway --namespace istio-system --patch '{"spec": { "externalIPs": ["192.168.182.210"] }}'

在这里插入图片描述
从上图可知,会把VIP帮到kube-ipvs0虚拟网卡上。接下来就可以通过VIP访问web
在这里插入图片描述

4)卸载bookinfo服务

cd /opt/istio/istioctl/istio-1.16.0
sh samples/bookinfo/platform/kube/cleanup.sh

5)卸载 istio

istioctl manifest generate --set profile=demo | kubectl delete -f -

七、Istio Gateway 示例演示

在这里插入图片描述

1)Helm 安装 Nginx,Apache

# 添加chart源
helm repo add bitnami https://charts.bitnami.com/bitnami

# 安装Nginx 
helm pull bitnami/nginx --version 13.2.1
helm install my-nginx-1 ./nginx-13.2.1.tgz

# 安装Apache
helm pull bitnami/apache --version 9.2.7
helm install my-apache-1 ./apache-9.2.7.tgz

2)http 测试

1、配置 Gateway

网关将是 应用于在带有标签的容器上运行的代理 app: my-grafana-gateway


cat >my-http-gw.yaml<<EOF
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: my-http-gw
spec:
  selector:
    istio: ingressgateway # use Istio default gateway implementation
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - my-http-gw.com
EOF

使用默认网关,istio: ingressgateway需要跟默认网关svc的labels字段对应。
在这里插入图片描述

2、配置 VirtualService

要为进入上面的 Gateway 的流量配置相应的路由,必须为同一个 host 定义一个 VirtualService,并使用配置中的 gateways 字段绑定到前面定义的 Gateway 上:

cat >my-http-vs.yaml<<EOF
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: ratings-route
spec:
  hosts:
  - my-http-gw.com
  gateways:
  - my-http-gw # <---- bind to gateway
  http:
  - match:
    - uri:
        prefix: /nginx-1
    rewrite:
      uri: /
    route:
    - destination:
        host: my-nginx-1.default.svc.cluster.local  #<---- server name
        port:
          number: 80
  - match:
    - uri:
        prefix: /apache-1
    rewrite:
      uri: /
    route:
    - destination:
        host: my-apache-1.default.svc.cluster.local  #<---- server name
        port:
          number: 80
EOF

因为我们是本地测试,肯定没法使用公网的LB,因此我们可以直接将externalip修改为某个node的ip或者同网段的VIP,且type: LoadBalancer,这样就能通过80端口访问

kubectl -n istio-system get service istio-ingressgateway

# 192.168.182.210为VIP,无需自动创建,这个vip会自动绑定到kube-ipvs0虚拟网卡上
kubectl patch svc istio-ingressgateway --namespace istio-system --patch '{"spec": { "externalIPs": ["192.168.182.210"] }}'

在这里插入图片描述
配置hosts

192.168.182.210 my-http-gw.com

3、测试验证

http://my-http-gw.com/nginx-1
在这里插入图片描述
http://my-http-gw.com/apache-1
在这里插入图片描述

3)https 测试

1、生成证书(有证书可忽略)

自签名证书来只允许 https 流量来保证 istio ingress gateway 的安全。

openssl req -x509 -nodes -newkey rsa:2048 -keyout my-http-gw.com.key -out my-http-gw.com.cert -subj "/CN=*.my-http-gw.com"

### 证书添加到 kubernetes secret
kubectl create -n istio-system secret tls istio-ingressgateway-certs --key my-http-gw.com.key --cert my-http-gw.com.cert

### 查看证书和私钥是否部署成功
kubectl exec -it -n istio-system \
  $(kubectl -n istio-system get pods \
    -l istio=ingressgateway \
    -o jsonpath='{.items[0].metadata.name}') \
  -- ls -l /etc/istio/ingressgateway-certs/

2、配置 Gateway 和 VirtualService

网关将是 应用于在带有标签的容器上运行的代理 app: my-grafana-gateway

cat >my-https.yaml<<EOF
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: my-https-gw
spec:
  selector:
    istio: ingressgateway # use Istio default gateway implementation
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - my-http-gw.com
    tls:
     httpsRedirect: true
  - port:
      number: 443
      name: https
      protocol: HTTPS
    hosts:
    - my-http-gw.com
    tls:
      mode: SIMPLE
      serverCertificate: /opt/istio/test/tls/my-http-gw.com.crt
      privateKey: /opt/istio/test/tls/my-http-gw.com.key
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: https-route
spec:
  hosts:
  - my-https-gw.com
  gateways:
  - my-https-gw # <---- bind to gateway
  http:
  - match:
    - uri:
        prefix: /nginx-1
    rewrite:
      uri: /
    route:
    - destination:
        host: my-nginx-1  #<---- server name
        port:
          number: 80
  - match:
    - uri:
        prefix: /apache-1
    rewrite:
      uri: /
    route:
    - destination:
        host: my-apache-1  #<---- server name
        port:
          number: 80
EOF

八、Ingress Controller 与 Istio Gateway 比较

K8S官方维护的Nginx Ingress Controller及 Istio Gateway 比较:

NGINX Ingress ControllerIstio Gateway
根据HTTP Header选择路由规则仅支持单个Header,不支持多个Header组合支持
Header规则支持正则表达式支持支持
服务之间设置权重拆分流量支持支持
Header和权重规则组合使用支持支持
路由规则检查不支持支持
路由规则粒度serviceservice下的不同pod
支持的协议HTTP1.1/HTTP2/gRPC/TCP/WebsocketsHTTP1.1/HTTP2/gRPC/TCP/Websockets/MongoDB

这样一比较,就很显然看出,Istio Gateway比Ingress Controller强大,这里只是介绍了常用的负载转发功能,还有流量控制,安全控制等功能,如果只是简单的负载转发用istio就点大材小用了,如果公司需要更复杂网络管控,可以选择istio,所以一般在生产环境中可以使用Istio Gateway应对复杂的网络环境。

Istio Gateway 介绍与 简单使用就先到这里了,有疑问的小伙伴欢迎给我留言,后续会持续更新【云原生+大数据】相关的文章,请小伙伴耐心等待~

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

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

相关文章

MATLAB | 一起来感受数学之美,第一届迷你黑客大赛回顾

Hey真的是好久不见&#xff0c;最近确实是比较忙更新频率也下来了&#xff0c;过段时间应该能恢复正常更新速度&#xff0c;之前给大家解说过今年举办的math is beautiful迷你黑客大赛&#xff0c;但这其实是第二届大赛&#xff0c;本期推送带大家回顾一下第一期大赛&#xff0…

为什么索引可以让查询变快?终于有人说清楚了!

概述 人类存储信息的发展历程大致经历如下&#xff1a; 由于是个人凭着自己理解总结的&#xff0c;因此可能不一定精确&#xff0c;但是毋庸置疑的是&#xff0c;在当代&#xff0c;各大公司机构部门的数据都是维护在数据库当中的。 数据库作为数据存储介质发展的最新产物&am…

大数据面试之MapReduce常见题目

大数据面试之MapReduce常见题目 MapReduce中Shuffle过程及优化 1.1 Shuffle的详细图解 1.2 Shuffle的详细文字过程 Shuffle文字部分描述&#xff1a; ​ Shuffle横跨Map和Reduce阶段&#xff0c;是指map()方法之后&#xff0c;reduce()方法之前&#xff0c;中间这段汇洗的过…

Web前端大作业制作个人网页(html+css+javascript)

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

功能强大UI美观的视频答题猜歌闯关娱乐微信小程序源码下载

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 这是一款拥有后端的闯关娱乐小程序 支持个人小程序和企业小程序上线运营 功能强大齐全,带数据本地化 (数据在自己服务器自己管理无需担心第三方失效的问题) 支持看视频答题闯关 支持…

Java多线程处理笔记

学习视频:598-JavaSE进阶-多线程概述_哔哩哔哩_bilibili 目录 多线程概述 进程和线程的关系 多线程并发的理解 分析程序存在几个线程 实现线程的第一种方式 实现线程的第二种方式 采用匿名内部类的方式 线程生命周期 获取线程的名字 获取当前线程对象 线程的sleep方法 …

Spring Cloud Stream 结合rocketmq

Spring Cloud Stream 结合rocketmq 官方网址&#xff1a;https://github.com/alibaba/spring-cloud-alibaba/wiki/RocketMQ 你可以在这个地址上下载到相关示例项目&#xff0c;配置项等相关信息 spring-cloud-stream 文档&#xff08;这个地址似乎只有集合kafaka和rabbit的示…

Akka 学习(六)Actor的监督机制

目录一 监督机制1.1 错误隔离性1.2 系统冗余性1.3 Actor的监督1.3.1 监督体系1.3.2 理解1,3.3 监督策越一 监督机制 1.1 错误隔离性 在学习Akka如何对失败情况进行响应之前&#xff0c;先了解一些在分布式应用程序中都应该遵循的通用策略&#xff1a;隔离错误。假设每个组件都…

【刷题-数组篇】狂刷力扣三十题,“数组”嘎嘎乱写 | 2022 12-5到12-9

前言 &#xff08;12月5日&#xff09;突然想起了很久以前别人&#xff08;具体来源已经记不清了&#xff09;传给我的一套题单。网上的题单不少&#xff0c;光收藏可不行&#xff0c;关键还得下手。 这套题单的题目数量为300出头&#xff0c;什么时候刷完我还没有明确计划&a…

web前端大作业 (仿英雄联盟网站制作HTML+CSS+JavaScript) 学生dreamweaver网页设计作业

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

2.IOC之xml配置

1.使用IDEA创建工程 2.引入项目使用的依赖 <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.2.RELEASE</version></dependency> </depe…

英文外链代发怎么做有效果?英文外链购买平台

英文外链代发怎么做有效果&#xff1f; 答案是&#xff1a;选择权重较好的GPB外链 我们首先要知道一个观点&#xff0c;什么样的外链才有效果&#xff1f; 1.英文外链网站的有一定的权重&#xff0c;可高可低&#xff0c;但一定要有权重&#xff0c;数值指标可以参考MOZ的Do…

10.AOP之xml配置

1.使用IDEA创建工程 2.引入项目使用的依赖 <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.2.RELEASE</version></dependency><depend…

HPPH偶联无机纳米材料/白蛋白/白蛋白纳米粒/抗体/量子点/活性基团/荧光/细胞膜的研究

小编分享了HPPH偶联无机纳米材料/白蛋白/白蛋白纳米粒/抗体/量子点/活性基团/荧光/细胞膜的研究知识&#xff0c;一起来看&#xff01; HPPH偶联无机纳米材料/白蛋白纳米粒的研究&#xff1a; HPPH 具有的光动力活性的作用光谱以及靶向性&#xff0c;对组织的穿透率&#xff0…

Android基础学习(十九)—— 进程与线程

1、进程 程序和进程的区别&#xff1a;&#xff08;1&#xff09;程序是静态的&#xff0c;就是存放在磁盘里的可执行文件&#xff0c;就是一系列的指令集合&#xff1b;&#xff08;2&#xff09;进程是动态的&#xff0c;是程序的一次执行过程&#xff0c;同一程序多次执行会…

物联网开发笔记(58)- 使用Micropython开发ESP32开发板之控制2.90寸电子墨水屏模块

一、目的 这一节我们学习如何使用我们的ESP32开发板来控制2.90寸电子墨水屏模块。 二、环境 ESP32 2.90寸 电子墨水屏模块 Thonny IDE 几根杜邦线 接线方法&#xff1a; 三、墨水屏驱动 此处注意注意&#xff1a;不同的型号、不同厂家的墨水屏驱动方式有些不同&#xff0c;…

VIIF:自监督:自适应:GAN

Self-supervised feature adaption for infrared and visible image fusion &#xff08;红外和可见光图像融合的自监督特征自适应&#xff09; 总述&#xff1a;首先&#xff0c;我们采用编码器网络来提取自适应特征。然后&#xff0c;利用两个具有注意机制块的解码器以自我…

【扫描PDF】如何将颜色淡的扫描PDF颜色变深,便于阅读??PDF中文字太淡怎么加深?汇总网上已有的方法,一波小结

一、问题背景 如果你扫描得到的PDF&#xff0c;像下图一样文字颜色非常淡&#xff0c;看起来不舒服&#xff0c;需要加深处理&#xff0c;就烦请看我下面的几个解决方法&#xff0c;都是从网上汇总得到&#xff0c;加上自己的实践和体会总结。 二、Adobe Acrobat DC PDF扫描…

20221209英语学习

今日新词&#xff1a; receiver n.收受者; 收件人; 接待者; (电话)听筒, 耳机; 收音机; (电视)接收机; 接收器; 接球手 annoy n.同“annoyance” delight n.快乐&#xff0c;愉快 railroad n.铁路, 铁道, 铁路公司, 铁路系统 brilliance n.光辉, 【光】辉度, 漂亮, (名声)…

3.IOC之注解配置

1.编写Spring框架核心配置文件applicationContext.xml 在项目目录“/src/main/resources”下新建applicationContext.xml文件&#xff0c;具体代码如下。 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework…