K8S中ingress详解

Ingress介绍

  • Kubernetes 集群中,服务(Service)是一种抽象,它定义了一种访问 Pod 的方式,无论这些 Pod 如何变化,服务都保持不变。服务可以被映射到一个静态的 IP 地址(ClusterIP)、一个 NodePort(在集群的每个节点上的特定端口)、一个 LoadBalancer(通过云服务提供商的负载均衡器)或一个外部 IP。

  • Service的两种服务暴露方式,NodePort 和 LoadBalancer,确存在一些局限性:

    • NodePort:当一个服务被配置为 NodePort 类型时,它会在集群的所有节点上的一个静态端口上暴露服务。这种方式的缺点是,如果集群中有大量的服务,那么就需要占用大量的端口,而这些端口资源是有限的。

    • LoadBalancer:这种方式通过云服务提供商的负载均衡器来暴露服务。虽然它解决了 NodePort 方式中端口资源有限的问题,但是每个服务都需要一个单独的负载均衡器,这不仅增加了成本,而且管理起来也相对复杂。

  • 为了解决这些问题,Kubernetes 引入了 Ingress 资源对象:

    • Ingress 是一种 API 对象,它管理外部访问到集群内服务的 HTTP 和 HTTPS 路由。它提供了一种规则,允许你将外部 HTTP/HTTPS 路由到集群内的多个服务。

    • Ingress 可以提供单一的 IP 地址,通过不同的 URL 路径或不同的端口来路由到不同的服务。

    • 它只需要一个 NodePort 或者一个 LoadBalancer,就可以将多个服务暴露给外部网络,这样做既节省了资源,又简化了配置。

    • Ingress 还支持 SSL/TLS 终止,可以为不同的服务配置 SSL 证书。

    • 它允许更复杂的路由规则,比如基于路径、主机名或 HTTP 头部的路由。

  • 实际上,Ingress相当于一个7层的负载均衡器,是kubernetes对反向代理的一个抽象,它的工作原理类似于Nginx,可以理解成在Ingress里建立诸多映射规则,Ingress Controller通过监听这些配置规则并转化成Nginx的反向代理配置 , 然后对外部提供服务。在这里有两个核心概念:

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

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

  • Ingress(以Nginx为例)的工作原理:

    • 定义路由规则:用户通过 Kubernetes API 创建 Ingress 规则,指定域名与集群内服务的映射关系。

    • 感知规则变化:Ingress 控制器(如基于 Nginx)实时监控 Kubernetes API,以便发现 Ingress 规则的更新。

    • 生成配置:一旦检测到变化,Ingress 控制器自动生成相应的 Nginx 配置,以实现定义的路由规则。

    • 更新 Nginx 配置:新生成的 Nginx 配置被应用到运行中的 Nginx 实例,无需重启服务即可动态更新路由规则。

    • 流量转发:Nginx 作为反向代理,根据更新的配置,将外部请求转发到集群内正确的服务。

    • SSL/TLS 终止(可选):如果配置了 SSL/TLS,Nginx 还可以在转发前终止加密连接,提高安全性和效率。

 

Ingress安装部署

[root@k8s-master ~]# vi deploy.yaml
[root@k8s-master ~]# kubectl label node k8s-node1 node-role=ingress
node/k8s-node1 labeled
[root@k8s-master ~]# kubectl label node k8s-node2 node-role=ingress
node/k8s-node2 labeled
[root@k8s-master ~]# kubectl apply -f deploy.yaml
namespace/ingress-nginx created
serviceaccount/ingress-nginx created
serviceaccount/ingress-nginx-admission created
role.rbac.authorization.k8s.io/ingress-nginx created
role.rbac.authorization.k8s.io/ingress-nginx-admission created
clusterrole.rbac.authorization.k8s.io/ingress-nginx created
clusterrole.rbac.authorization.k8s.io/ingress-nginx-admission created
rolebinding.rbac.authorization.k8s.io/ingress-nginx created
rolebinding.rbac.authorization.k8s.io/ingress-nginx-admission created
clusterrolebinding.rbac.authorization.k8s.io/ingress-nginx created
clusterrolebinding.rbac.authorization.k8s.io/ingress-nginx-admission created
configmap/ingress-nginx-controller created
service/ingress-nginx-controller created
service/ingress-nginx-controller-admission created
daemonset.apps/ingress-nginx-controller created
job.batch/ingress-nginx-admission-create created
job.batch/ingress-nginx-admission-patch created
ingressclass.networking.k8s.io/nginx created
validatingwebhookconfiguration.admissionregistration.k8s.io/ingress-nginx-admission created
[root@k8s-master ~]# kubectl get pod 
No resources found in default namespace.
[root@k8s-master ~]# kubectl get pod  -n ingress-nginx
NAME                                   READY   STATUS              RESTARTS   AGE
ingress-nginx-admission-create-sgcg6   0/1     ContainerCreating   0          21s
ingress-nginx-admission-patch-2kdw2    0/1     CrashLoopBackOff    1          21s
ingress-nginx-controller-55776         0/1     ContainerCreating   0          21s
ingress-nginx-controller-vm965         0/1     ContainerCreating   0          21s
[root@k8s-master ~]# kubectl get pod  -n ingress-nginx -w
NAME                                   READY   STATUS              RESTARTS   AGE
ingress-nginx-admission-create-sgcg6   0/1     ContainerCreating   0          24s
ingress-nginx-admission-patch-2kdw2    0/1     CrashLoopBackOff    1          24s
ingress-nginx-controller-55776         0/1     ContainerCreating   0          24s
ingress-nginx-controller-vm965         0/1     ContainerCreating   0          24s
ingress-nginx-admission-create-sgcg6   0/1     Completed           0          25s
ingress-nginx-admission-create-sgcg6   0/1     Completed           0          25s
ingress-nginx-admission-patch-2kdw2    1/1     Running             2          28s
ingress-nginx-admission-patch-2kdw2    0/1     Completed           2          29s
ingress-nginx-admission-patch-2kdw2    0/1     Completed           2          29s
ingress-nginx-controller-55776         0/1     Running             0          87s
ingress-nginx-controller-vm965         0/1     Running             0          90s
^C[root@k8s-master ~]# kubectl get pod  -n ingress-nginx 
NAME                                   READY   STATUS      RESTARTS   AGE
ingress-nginx-admission-create-sgcg6   0/1     Completed   0          95s
ingress-nginx-admission-patch-2kdw2    0/1     Completed   2          95s
ingress-nginx-controller-55776         0/1     Running     0          95s
ingress-nginx-controller-vm965         0/1     Running     0          95s
[root@k8s-master ~]# kubectl get pod  -n ingress-nginx -w
NAME                                   READY   STATUS      RESTARTS   AGE
ingress-nginx-admission-create-sgcg6   0/1     Completed   0          105s
ingress-nginx-admission-patch-2kdw2    0/1     Completed   2          105s
ingress-nginx-controller-55776         1/1     Running     0          105s
ingress-nginx-controller-vm965         1/1     Running     0          105s

 

Ingress的HTTP代理

  • 准备service和pod为了后面的实验比较方便,创建如下图所示的模型

[root@k8s-master ~]# vim tomcat-nginx.yaml 
[root@k8s-master ~]# kubectl create ns test 
namespace/test created
[root@k8s-master ~]# kubectl apply -f tomcat-nginx.yaml 
deployment.apps/tomcat-deployment created
service/tomcat-service created

[root@k8s-master ~]# kubectl get pod -n test  -w
NAME                                 READY   STATUS              RESTARTS   AGE
tomcat-deployment-7db86c59b7-7zbnc   0/1     ContainerCreating   0          50s
tomcat-deployment-7db86c59b7-r5xsn   0/1     ContainerCreating   0          50s
tomcat-deployment-7db86c59b7-sphwk   0/1     ImagePullBackOff    0          50s
tomcat-deployment-7db86c59b7-sphwk   0/1     ErrImagePull        0          70s
tomcat-deployment-7db86c59b7-sphwk   0/1     ImagePullBackOff    0          82s
tomcat-deployment-7db86c59b7-r5xsn   1/1     Running             0          4m29s
tomcat-deployment-7db86c59b7-7zbnc   1/1     Running             0          4m29s
tomcat-deployment-7db86c59b7-sphwk   1/1     Running             0          5m7s
^C[root@k8s-master ~]# kubectl get deploy,pod -n test 
NAME                                READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/tomcat-deployment   3/3     3            3           6m52s

NAME                                     READY   STATUS    RESTARTS   AGE
pod/tomcat-deployment-7db86c59b7-7zbnc   1/1     Running   0          6m52s
pod/tomcat-deployment-7db86c59b7-r5xsn   1/1     Running   0          6m52s
pod/tomcat-deployment-7db86c59b7-sphwk   1/1     Running   0          6m52s
  • Ingress配置

[root@k8s-master ~]# cat ingress-dep_lb.yaml 

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ingress
  namespace: test
spec:
  ingressClassName: nginx
  rules:
  - host: www.test.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: svc-lb
            port:
              number: 80
  - host: tomcat.ctl.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: tomcat-service
            port:
              number: 80

[root@k8s-master ~]# kubectl apply -f ingress-dep_lb.yaml 
ingress.networking.k8s.io/nginx-ingress created
[root@k8s-master ~]# kubectl get service,ingress -n test
NAME                     TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
service/tomcat-service   LoadBalancer   10.96.166.18   <pending>     80:32593/TCP   10m

NAME                                      CLASS   HOSTS                         ADDRESS   PORTS   AGE
ingress.networking.k8s.io/nginx-ingress   nginx   www.test.com,tomcat.ctl.com             80      5s
[root@k8s-master ~]# kubectl get service,ingress -n test
NAME                     TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
service/tomcat-service   LoadBalancer   10.96.166.18   <pending>     80:32593/TCP   10m

NAME                                      CLASS   HOSTS                         ADDRESS                         PORTS   AGE
ingress.networking.k8s.io/nginx-ingress   nginx   www.test.com,tomcat.ctl.com   192.168.58.232,192.168.58.233   80      42s


[root@k8s-master ~]# kubectl get deploy,pod -n test 
NAME                                READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/tomcat-deployment   3/3     3            3           14m

NAME                                     READY   STATUS    RESTARTS   AGE
pod/tomcat-deployment-7db86c59b7-7zbnc   1/1     Running   0          14m
pod/tomcat-deployment-7db86c59b7-r5xsn   1/1     Running   0          14m
pod/tomcat-deployment-7db86c59b7-sphwk   1/1     Running   0          14m
[root@k8s-master ~]# kubectl get deploy,pod -n test  -o wide
NAME                                READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES                  SELECTOR
deployment.apps/tomcat-deployment   3/3     3            3           14m   tomcat       tomcat:8.5-jre10-slim   app=tomcat-pod

NAME                                     READY   STATUS    RESTARTS   AGE   IP               NODE        NOMINATED NODE   READINESS GATES
pod/tomcat-deployment-7db86c59b7-7zbnc   1/1     Running   0          14m   10.244.36.73     k8s-node1   <none>           <none>
pod/tomcat-deployment-7db86c59b7-r5xsn   1/1     Running   0          14m   10.244.36.72     k8s-node1   <none>           <none>
pod/tomcat-deployment-7db86c59b7-sphwk   1/1     Running   0          14m   10.244.169.131   k8s-node2   <none>           <none>
[root@k8s-master ~]# kubectl get service,ingress -n test
NAME                     TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
service/tomcat-service   LoadBalancer   10.96.166.18   <pending>     80:32593/TCP   14m

NAME                                      CLASS   HOSTS                         ADDRESS                         PORTS   AGE
ingress.networking.k8s.io/nginx-ingress   nginx   www.test.com,tomcat.ctl.com   192.168.58.232,192.168.58.233   80      4m34s
[root@k8s-master ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.58.231 k8s-master
192.168.58.232 k8s-node1
192.168.58.233 k8s-node2
192.168.58.232 www.test.com
192.168.58.233 tomcat.ctl.com

Ingress的HTTPS代理

  • 创建证书和密钥

[root@k8s-master ~]# openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/C=CN/ST=BJ/L=BJ/O=nginx/CN=itopenlab.com"
Generating a 2048 bit RSA private key
.................................................................+++
.....+++
writing new private key to 'tls.key'
-----
[root@k8s-master ~]# kubectl create secret tls tls-secret --key tls.key --cert tls.crt
secret/tls-secret created

 

  • 创建ingress-https.yaml


[root@k8s-master ~]#  vim ingress-https.yaml
[root@k8s-master ~]# kubectl apply -f ingress-https.yaml 
ingress.networking.k8s.io/ingress-https created
[root@k8s-master ~]# kubectl get ing ingress-https -n test
NAME            CLASS    HOSTS                          ADDRESS   PORTS     AGE
ingress-https   <none>   nginx.ctl.com,tomcat.ctl.com             80, 443   8s
[root@k8s-master ~]# kubectl describe ing ingress-https -n test
Name:             ingress-https
Namespace:        test
Address:          
Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
TLS:
  tls-secret terminates nginx.ctl.com,tomcat.ctl.com
Rules:
  Host            Path  Backends
  ----            ----  --------
  nginx.ctl.com   
                  /   nginx-service:80 (<error: endpoints "nginx-service" not found>)
  tomcat.ctl.com  
                  /   tomcat-service:8080 (10.244.169.131:8080,10.244.36.72:8080,10.244.36.73:8080)
Annotations:      <none>
Events:           <none>
[root@k8s-master ~]# cat ingress-https.yaml 



apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-https
  namespace: test
spec:
  tls:
  - hosts:
    - nginx.ctl.com
    - tomcat.ctl.com
    secretName: tls-secret # 指定秘钥
  rules:
  - host: nginx.ctl.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-service
            port:
              number: 80
  - host: tomcat.ctl.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: tomcat-service
            port:
              number: 8080
[root@k8s-master ~]# kubectl get ing ingress-https -n test -o wide
NAME            CLASS    HOSTS                          ADDRESS   PORTS     AGE
ingress-https   <none>   nginx.ctl.com,tomcat.ctl.com             80, 443   105s
[root@k8s-master ~]# kubectl get service,ingress -n test
NAME                     TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
service/tomcat-service   LoadBalancer   10.96.166.18   <pending>     80:32593/TCP   36m

NAME                                      CLASS    HOSTS                          ADDRESS                         PORTS     AGE
ingress.networking.k8s.io/ingress-https   <none>   nginx.ctl.com,tomcat.ctl.com                                   80, 443   2m1s
ingress.networking.k8s.io/nginx-ingress   nginx    www.test.com,tomcat.ctl.com    192.168.58.232,192.168.58.233   80        26m
[root@k8s-master ~]# curl https://nginx.ctl.com
^C
[root@k8s-master ~]# kubectl get service,ingress -n test
NAME                     TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
service/tomcat-service   LoadBalancer   10.96.166.18   <pending>     80:32593/TCP   37m

NAME                                      CLASS    HOSTS                          ADDRESS                         PORTS     AGE
ingress.networking.k8s.io/ingress-https   <none>   nginx.ctl.com,tomcat.ctl.com                                   80, 443   3m37s
ingress.networking.k8s.io/nginx-ingress   nginx    www.test.com,tomcat.ctl.com    192.168.58.232,192.168.58.233   80        27m

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大模型:LangChain技术讲解

一、什么是LangChain 1、介绍 LangChain是一个用于开发由大型语言模型提供支持的Python框架。它提供了一系列工具和组件&#xff0c;帮助我们将语言模型集成到自己的应用程序中。 有了它之后&#xff0c;我们可以更轻松地实现对话系统、文本生成、文本分类、问答系统等功能。…

【优选算法篇】2----复写零

---------------------------------------begin--------------------------------------- 这道算法题相对于移动零&#xff0c;就上了一点点强度咯&#xff0c;不过还是很容易理解的啦~ 题目解析&#xff1a; 这道题如果没理解好题目&#xff0c;是很难的&#xff0c;但理解题…

office 2019 关闭word窗口后卡死未响应

最近关闭word文件总是出现卡死未响应的状态&#xff0c;必须从任务管理器才能杀掉word 进程&#xff0c;然后重新打开word再保存&#xff0c;很是麻烦。&#xff08;#其他特征&#xff0c;在word中打字会特别变慢&#xff0c;敲击键盘半秒才出现字符。&#xff09; office官网…

acm培训 part 1(学习总结)

第一部分的重点为语法糖&#xff0c;时空复杂度&#xff0c;stl容器等等&#xff0c;下面就简单介绍一下这些部分。 1. 语法糖 1.1 定义 语法糖是由英国计算机科学家彼得约翰兰达提出的一个术语&#xff0c;指的是编程语言中添加的某种语法&#xff0c;这种语法对语言的功能…

Arduino基础入门学习——OLED显示屏+DHT11采集温湿度并显示

Arduino基础入门学习——OLED显示屏DHT11显示温湿度 一、前言二、准备工作三、程序代码四、结束语 一、前言 本篇文章主要使用OLED液晶显示屏模块和DHT11温湿度传感器&#xff0c;获取环境温湿度并显示在显示屏&#xff0c;也算是结合之前我所编写的博客给大家带来一个算是比较…

Kubernetes相关知识入门详解

一、Pod的滚动升级 1.服务升级的一般思路&#xff1a;停止与该服务相关的所有服务pod&#xff0c;重新拉去更新后的镜像并启动。这种方法存在一个比较现实的问题是逐步升级导致较长时间的服务不可用。 2.Kubernetes滚动升级的思路&#xff1a;通过滚动升级的命令创建新的rc&…

云原生时代,如何构建高效分布式监控系统

文章目录 一.监控现状二.Thanos原理分析SidecarQuerierStoreCompactor 三.Sidecar or ReceiverThanos Receiver工作原理 四.分布式运维架构 一.监控现状 Prometheus是CNCF基金会管理的一个开源监控项目&#xff0c;由于其良好的架构设计和完善的生态&#xff0c;迅速成为了监控…

Qt 5.14.2 学习记录 —— 십구 事件

文章目录 1、事件的概念2、处理事件3、鼠标事件1、鼠标单击和双击2、鼠标移动3、鼠标滚轮滚动 4、键盘事件5、定时器事件6、窗口移动和大小改变事件 1、事件的概念 用户进行操作时会产生事件&#xff0c;事件可以关联处理函数。Qt封装了操作系统的事件机制&#xff0c;然后进一…

10. SpringCloud Alibaba Sentinel 规则持久化部署详细剖析

10. SpringCloud Alibaba Sentinel 规则持久化部署详细剖析 文章目录 10. SpringCloud Alibaba Sentinel 规则持久化部署详细剖析1. 规则持久化1.1 Nacos Server 配置中心-规则持久化实例 2. 最后&#xff1a; 1. 规则持久化 规则没有持久化的问题 如果 sentinel 流控规则没有…

地学专业想提前准备春招?怎么准备自己的简历?

眼看着即将过年&#xff0c;过完年后基本上春招也要开始提上日程 之前咱们说过&#xff0c;很多同学认为自身技术过硬就会一路顺风&#xff0c;自己经验丰富、编程技术过硬&#xff0c;就不愁找不到工作&#xff0c;这固然是取得好offer的基础。 但再好的技术也不可能通过混乱…

IoTDB结合Mybatis使用示例(增删查改自定义sql等)

IoTDB时序库是当前越来越流行以及基于其优势各大厂商越来越易接受的国产开源时序数据库&#xff0c;针对IoTDB的内容不做过多介绍&#xff0c;在使用该时序库时&#xff0c;往往有一定入门门槛&#xff0c;不同于关系型数据库或文档型数据库那般方便维护和接入开发&#xff0c;…

Go语言的栈空间管理

Go 语言的栈空间管理 Go 语言的栈空间管理是其并发模型的核心之一。Go 的运行时环境&#xff08;runtime&#xff09;采用动态栈分配机制&#xff0c;能够根据 Goroutine 的需求动态扩展和收缩栈空间&#xff0c;避免了传统固定栈大小的限制。Go 的栈管理经历了从 分块式栈 到…

细说STM32F407单片机电源低功耗StandbyMode待机模式及应用示例

目录 一、待机模式基础知识 1、进入待机模式 2、待机模式的状态 3、退出待机模式 二、待机模式应用示例 1、示例功能和CubeMX项目设置 &#xff08;1&#xff09; 时钟 &#xff08;2&#xff09; DEBUG、LED1、KeyRight、USART6、CodeGenerator &#xff08;3&#x…

我谈《概率论与数理统计》的知识体系

学习《概率论与数理统计》二十多年后&#xff0c;在廖老师的指导下&#xff0c;才厘清了各章之间的关系。首先&#xff0c;这是两个学科综合的一门课程&#xff0c;这一门课程中还有术语冲突的问题。这一门课程一条线两个分支&#xff0c;脉络很清晰。 概率论与统计学 概率论…

第十五届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组

第十五届的题目在规定时间内做出了前5道&#xff0c;还有2道找时间再磨一磨。现在把做的一些思路总结如下&#xff1a; 题1&#xff1a;握手问题 问题描述 小蓝组织了一场算法交流会议&#xff0c;总共有 50人参加了本次会议。在会议上&#xff0c;大家进行了握手交流。按照惯例…

OpenEuler学习笔记(四):OpenEuler与CentOS的区别在那里?

OpenEuler与CentOS的对比 一、基本信息 起源与背景&#xff1a; OpenEuler&#xff1a;由华为发起&#xff0c;后捐赠给开放原子开源基金会&#xff0c;旨在构建一个开放、多元化的云计算和边缘计算平台&#xff0c;以满足华为及其他企业的硬件和软件需求。CentOS&#xff1a;…

【MySQL — 数据库增删改查操作】深入解析MySQL的create insert 操作

数据库CRUD操作 1 CRUD简介 CURD是对数据库中的记录进行基本的增删改查操作: 2. Create 新增 语法 INSERT [INTO] table_name[(column [&#xff0c;column] ...)] VALUES(value_list)[&#xff0c;(value_list)] ... # value 后面的列的个数和类型&#xff0c;要和表结构匹配…

苍穹外卖—订单模块

该模块分为地址表的增删改查、用户下单、订单支付三个部分。 第一部分地址表的增删改查无非就是对于单表的增删改查&#xff0c;较基础&#xff0c;因此直接导入代码。 地址表 一个用户可以有多个地址&#xff0c;同时有一个地址为默认地址。用户还可为地址添加例如&q…

从ChatGPT热潮看智算崛起

2025年1月7日&#xff0c;科智咨询发布《2025年IDC产业七大发展趋势》&#xff0c;其中提到“ChatGPT开启生成式AI热潮&#xff0c;智能算力需求暴涨&#xff0c;算力供给结构发生转变”。 【图片来源于网络&#xff0c;侵删】 为何会以ChatGPT发布为节点呢&#xff1f;咱们一起…

【Uniapp-Vue3】setTabBar设置TabBar和下拉刷新API

一、setTabBar设置 uni.setTabBarItem({ index:"需要修改第几个", text:"修改后的文字内容" }) 二、tabBar的隐藏和显式 // 隐藏tabBar uni.hideTabBar(); // 显示tabBar uni.showTabBar(); 三、为tabBar右上角添加文本 uni.setTabBarBadge({ index:"…