当前位置: 首页 > news >正文

k8s的对外服务--ingress

service作用体现在两个方面

1、集群内部 不断跟踪pod的变化,更新endpoint中的pod对象,基于pod的IP地址不断变化的一种服务发现机制

2、集群外部 类似负载均衡器,把流量ip+端口,不涉及转发url(http,https),把请求转发到pod

nodePort:容器端口----service端口----nodePort,设定了nodePort,每个节点都会有一个端口被打开,30000-32767

IP+端口 节点ip+30000+32767,实现负载均衡

loadbalancer 云平台上的一种service服务,云平台提供负载均衡ip地址

extrenal 域名映射

ingress 基于域名进行映射,把url(http https)请求转发到service,再由service请求转发到每一个pod

ingress只要一个或者是少量的公网ip或者LB,可以把多个http请求暴漏到外网,七层反向代理

service的service,是一组域名和URL路径,把一个或者多个请求转发到service的规则

先是七层代理----四层代理----podingress      service	nginx
ingress的组成

ingress是一个api的对象,通过yaml文件来进行配置,ingress的作用是定义请求如何转发到service的规则,配置模版

ingress通过http和https暴漏集群内部service,给service提供一个外部的url,负载均衡,ssl/tls(https)的能力,实现一个基于域名的负载均衡

ingress如何实现

ingress-controller:具体的实现反向代理和负载均衡的程序,对ingress定义的规则进行解析,根据ingress的配置进行请求的转发

ingress-controller不是k8s自带的组件功能,ingress-controller一个统称
​
nginx ingress controller
traefik都是ingress-controller  都是开源的
ingress资源的定义项

1、定义外部流量的路由规则

2、定义服务的暴漏方式,主机名,访问路径和其他的选项

3、负载均衡(ingress-controller)

ingress-controller的运行方式是pod方式运行集群当中

nginx-ingress-controller
wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/mandatory.yaml

ingress暴漏服务方式

1、deployment+LoadBalancer模式,ingress部署在公有云,会ingress配置文件里面有type,type:LoadBalancer,公有云平台会为个LoadBalancer的service创建一个负载均衡器,绑定一个公网地址,通过域名指向这个公网地址就可以实现集群对外暴漏

2、方式二:Daemonset+hostnetwork+nodeSelector

Daemonsetset 在每个节点都会创建一个pod

hostnetwork pod共享节点主机的网络命名空间,容器内直接使用节点主机的ip+端口,pod中的容器可以直接访问主机上的网络资源

nodeSelecor 根据标签选择部署的节点,nginx-ingress-controller部署的节点

缺点:直接利用节点主机的网络和端口,一个node只能部署一个ingress-controller pod比较适合大并发的生产环境,性能最好的
Daemonset+hostnetwork+nodeSelector实现
修改生成的配置文件mandatory.yaml.............apiVersion: apps/v1
kind: DaemonSet
metadata:name: nginx-ingress-controllernamespace: ingress-nginxlabels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginx
spec:#replicas: 1selector:matchLabels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginxtemplate:metadata:labels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginxannotations:prometheus.io/port: "10254"prometheus.io/scrape: "true"spec:# wait up to five minutes for the drain of connectionsterminationGracePeriodSeconds: 300serviceAccountName: nginx-ingress-serviceaccounthostNetwork: truenodeSelector:test1: "true"#     kubernetes.io/os: linuxcontainers:- name: nginx-ingress-controllerimage: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.30.0args:- /nginx-ingress-controller- --configmap=$(POD_NAMESPACE)/nginx-configuration
.............把镜像(拖到opt)上传
tar -xf ingree.contro-0.30.0.tar.gz
docker load  -i ingree.contro-0.30.0.tar.gz service 的yaml文件
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: nfs-pvc
spec:accessModes:- ReadWriteManystorageClassName: nfs-client-storageclassresources:requests:storage: 2Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-applabels:app: nginx
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.22volumeMounts:- name: nfs-pvcmountPath: /usr/share/nginx/htmlvolumes:- name: nfs-pvcpersistentVolumeClaim:claimName: nfs-pvc
---
apiVersion: v1
kind: Service
metadata:name: nginx-app-svc
spec:ports:- protocol: TCPport: 80targetPort: 80selector:app: nginx
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: nginx-app-ingress
spec:rules:- host: www.test1.comhttp:paths:- path: /pathType: Prefix
#根据前缀进行匹配 / www.test1.com/  www.test1.com/ www.test1.com /www/www1/www2backend:service:name: nginx-app-svcport:number: 80给node节点设置标签
kubectl label nodes node02 test1=true给node02节点做映射
20.0.0.70 master01
20.0.0.71 node01
20.0.0.72 node02 www.test1.com

3、deployment+NodePort

主要通过nginx-ingress-controller
host-ingress的配置找到pod----controller---请求发到pod
NodePort---controller---ingress----service---pod
NodePort暴漏端口的方式是最简单的方法,NodePort多了一层nat(地址转换),并发量大的对性能会有一定影响,内部都会用NodePort修改配置文件生成service-nodePort的yaml文件
wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml用最原始的生成的mandatory.yaml修改service的标签
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: nfs-pvc1
spec:accessModes:- ReadWriteManystorageClassName: nfs-client-storageclassresources:requests:storage: 2Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-app1labels:app: nginx2
spec:replicas: 3selector:matchLabels:app: nginx2template:metadata:labels:app: nginx2spec:containers:- name: nginximage: nginx:1.22volumeMounts:- name: nfs-pvcmountPath: /usr/share/nginx/htmlvolumes:- name: nfs-pvcpersistentVolumeClaim:claimName: nfs-pvc1
---
apiVersion: v1
kind: Service
metadata:name: nginx-app-svc1
spec:ports:- protocol: TCPport: 80targetPort: 80selector:app: nginx2
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: nginx-app-ingress
spec:rules:- host: www.test2.comhttp:paths:- path: /pathType: Prefix
#根据前缀进行匹配 / www.test1.com/  www.test1.com/ www.test1.com /www/www1/www2backend:service:name: nginx-app-svc1port:number: 80生成的service-nodeport.yaml
apiVersion: v1
kind: Service
metadata:name: ingress-nginxnamespace: ingress-nginxlabels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginx
spec:type: NodePortports:- name: httpport: 80targetPort: 80protocol: TCP- name: httpsport: 443targetPort: 443protocol: TCPselector:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginx
#现在执行这个yaml文件,会生成一个service,在ingress-nginx这个命名空间生成一个service,所有的controller的请求都会
#从这个定义的service的nodeport的端口,把请求转发到自定义的service的pod做映射
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
20.0.0.70 master01
20.0.0.71 node01 www.test2.com
20.0.0.72 node02 www.test1.com
虚拟主机的方式实现http代理

ingress的方式实现:一个ingress可以访问不同的主机

pod1apiVersion: apps/v1
kind: Deployment
metadata:name: deployment1labels:test: nginx1
spec:replicas: 1selector:matchLabels:test: nginx1template:metadata:labels:test: nginx1spec:containers:- name: nginx1image: nginx:1.22
---
apiVersion: v1
kind: Service
metadata:name: svc-1
spec:ports:- port: 80targetPort: 80protocol: TCPselector:test: nginx1pod2apiVersion: apps/v1
kind: Deployment
metadata:name: deployment2labels:test: nginx2
spec:replicas: 1selector:matchLabels:test: nginx2template:metadata:labels:test: nginx2spec:containers:- name: nginx2image: nginx:1.22
---
apiVersion: v1
kind: Service
metadata:name: svc-2
spec:ports:- port: 80targetPort: 80protocol: TCPselector:test: nginx2pod-ingressapiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: ingress1
spec:rules:- host: www1.test.comhttp:paths:- path: /pathType: Prefixbackend:service:name: svc-1port:number: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: ingress2
spec:rules:- host: www2.test.comhttp:paths:- path: /pathType: Prefixbackend:service:name: svc-2port:number: 80做映射
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
20.0.0.70 master01
20.0.0.71 node01 www2.test.com
20.0.0.72 node02 www1.test.com查看对外访问的端口(service)
kubectl get svc -o wide -n ingress-nginx 
NAME            TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE   SELECTOR
ingress-nginx   NodePort   10.96.23.193   <none>        80:30150/TCP,443:30780/TCP   42m   app.kubernetes.io/name=ingress-nginx,app.kubernetes.io/part-of=ingress-nginx
ingress实现https代理访问
openssl req -x509 -sha256 -nodes -days 365 -newkey ras:2048 -keyout tls.key -out tls.crt -subj "/CN=nginxsvc/O=nginxsvc
req	生成证书文件的请求
x509	生成x509自签名的证书
-sha256	表示使用sha-256的散列算法
-nodes	表示生成的密钥不加密
-days 365 证书有效期是365
-newkey rsa:2048 RSA的密钥对创建tls
kubectl create secret tls tls-secret --key tls.key --cert tls.crtmkdir httpsapiVersion: apps/v1
kind: Deployment
metadata:name: nginx-httpslabels:app: https
spec:replicas: 3selector:matchLabels:app: httpstemplate:metadata:labels:app: httpsspec:containers:- name: nignximage: nginx:1.22
---
apiVersion: v1
kind: Service
metadata:name: nginx-svc
spec:ports:- port: 80targetPort: 80protocol: TCPselector:app: https
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: nignx-ingress-https
spec:tls:- hosts:- www.123cc.comsecretName: tls-secret
#加密的配置保存在ingress当中,请求--ingress-controller--ingress---转发service
#在代理进行时,就要先验证密钥对,然后再把请求转发service对应的podrules:- host: www.123cc.comhttp:paths:- path: /pathType: Prefixbackend:service:name: nginx-svcport:number: 80
做映射
www.123cc.comcurl -k https://www.123cc.com:32674
nginx的登录账户认证
mkdir  basic-auth
cd basic-auth/
yum -y install httpd
htpasswd -c auth xiaobu
kubectl create secret generic basic-auth --from-file=authkubectl describe secrets basic-auth 
Name:         basic-auth
Namespace:    default
Labels:       <none>
Annotations:  <none>Type:  OpaqueData
====
auth:  45 bytesapiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: ingress-authannotations:
#开启认证模块的配置nginx.ingress.kubernetes.io/auth-type: basic
#设置认证类型为basic,这是k8s自带的认证加密的模块nginx.ingress.kubernetes.io/auth-secret: basic-auth
#把认证的加密模块导入到ingress中nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required -xiaobu'
#设置认证窗口的提示信息
spec:rules:- host: www.xiaobu.comhttp:paths:- path: /pathType: Prefixbackend:service:name: nginx-svcport:number: 80做映射
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
20.0.0.70 master01 www.xiaobu.com
20.0.0.71 node01 www.test2.com
20.0.0.72 node02 www.test1.com www.123cc.com
20.0.0.73 hub.test.com www.test1.com www.test2.com访问
www.xiaobu.com:31328
nginx的重写,nginx的重定向
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: nginx-rewriteannotations:nginx.ingress.kubernetes.io/rewrite-target: https://www.123cc.com:32674
#访问页面会跳转到指定的页面
spec:rules:- host: www.xiaokai.comhttp:paths:- path: /pathType: Prefixbackend:service:name: nginx-svcport:number: 80
访问
www.xiaokai.com:31328
traefik

traefik ingress controller traefik是一个为了让部署微服务更加快捷而诞生的一个http反向代理,负载均衡

traefik设计时就能够实时的和k8s API交互,感知后端service以及pod的变化,可以自动更新配置和重载

pod内nginx 80 8081

traefik的部署方式

daemonset

特点,优点: 每个节点都会部罢一个traefik,节点感知,可以自动发现,更新容器的配置。不需要手动重载。

缺点: 资源占用,大型集群中,deamonset可能会运行多个traefik的实力,尤其是节点上不需要大量容器运行的情况下,没有办法扩缩容

部署对外集群 对外的业务会经常变更,Daemonset可以更好的,自动大发现服务配置变更

deployment:

有点:集中办公控制,可以使用少量的实例来运行处理整个集群的流量,更容易升级和维护

缺点:deployment的负载均衡不会均分到每个节点

手动更新,他无法感知容器内部配置的变化

部署对内集群 对内的相对稳定,更新和变化也比较少,适合deployment

对外标签  traffic-type: internal 对内服务
对内标签  traffic-type: external 对外服务

nginx-ingress和traefik-ingress

工作原理都一样,都是7层代理,都可以动态的更新配置,都可以自动发现服务

traefik-ingress 自动更新的重载更快,更方便

traefik的并发能力只能nginx-ingress的6成 60%

生成的yaml文件
wget  https://gitee.com/mirrors/traefik/raw/v1.7/examples/k8s/traefik-deployment.yaml
wget  https://gitee.com/mirrors/traefik/raw/v1.7/examples/k8s/traefik-rbac.yaml
wget  https://gitee.com/mirrors/traefik/raw/v1.7/examples/k8s/traefik-ds.yaml
wget  https://gitee.com/mirrors/traefik/raw/v1.7/examples/k8s/ui.yaml基于deployment的apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-traefiklabels:nginx: traefik
spec:replicas: 3selector:matchLabels:nginx: traefiktemplate:metadata:labels:nginx: traefikspec:containers:- name: nginximage: nginx:1.22
---
apiVersion: v1
kind: Service
metadata:name: nginx-traefik-svc1
spec:ports:- port: 80targetPort: 80protocol: TCPselector:nginx: traefik
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: nginx-traefik-test1
spec:rules:- host: www.bu.comhttp:paths:- path: /pathType: Prefixbackend:service:name: nginx-traefik-svc1port:number: 80

相关文章:

k8s的对外服务--ingress

service作用体现在两个方面 1、集群内部 不断跟踪pod的变化&#xff0c;更新endpoint中的pod对象&#xff0c;基于pod的IP地址不断变化的一种服务发现机制 2、集群外部 类似负载均衡器&#xff0c;把流量ip端口&#xff0c;不涉及转发url&#xff08;http&#xff0c;https&a…...

CSS 雷达监测效果

<template><view class="center"><view class="loader"><view></view></view></view></template><script></script><style>/* 设置整个页面的背景颜色为深灰色 */body {background-col…...

C# System.MissingMethodException

C#应用程序工程调用C#类库工程生成的动态链接库调试时报错&#xff1a; System.MissingMethodException HResult0xFFFFFFFF Message找不到方法…… 软件结构如下&#xff1a; using System; using System.Collections.Generic; using System.Linq; using System.Text; usi…...

Redis面试题23

Redis 的持久化机制是什么&#xff1f; 答&#xff1a;Redis 提供了两种持久化机制来保证数据的持久性&#xff0c;即 RDB&#xff08;Redis Database&#xff09;和 AOF&#xff08;Append Only File&#xff09;。 RDB 持久化&#xff1a;RDB 是 Redis 默认的持久化方式。它…...

Linux中的yum源仓库和NFS文件共享服务

一.yum简介 1.1 yum简介 yum&#xff0c;全称“Yellow dog Updater, Modified”&#xff0c;是一个专门为了解决包的依赖关系而存在的软件包管理器。类似于windows系统的中电脑软件关键&#xff0c;可以一键下载&#xff0c;一键安装和卸载。yum 是改进型的 RPM 软件管理器&am…...

【LeetCode2744】最大字符串配对数目

1、题目描述 【题目链接】 标签&#xff1a;数组&#xff0c;哈希表&#xff0c;字符串&#xff0c;模拟  给你一个下标从 0 开始的数组 words &#xff0c;数组中包含 互不相同 的字符串。  如果字符串 words[i] 与字符串 words[j] 满足以下条件&#xff0c;我们称它们可以…...

安全加速SCDN是什么

安全加速SCDN&#xff08;Secure Content Delivery Network&#xff0c;SCDN&#xff09; 是集分布式DDoS防护、CC防护、WAF防护、BOT行为分析为一体的安全加速解决方案。已使用内容分发网络&#xff08;CDN&#xff09;或全站加速网络&#xff08;ECDN&#xff09;的用户&…...

Android 布局菜鸟 android中的布局类型和特点?

一、LinearLayout(线性布局) 1、 特点: 主要以水平或垂直方式来排列界面中的控件。并将控件排列到一条直线上。在线性布局中,如果水平排列,垂直方向上只能放一个控件,如果垂直排列,水平方向上也只能放一个控件。 2、适⽤场景: Android开发中最常见的 ⼀种布局⽅式,排列…...

2023总结与2024寒假计划

王泽政 2023 的总结 学习总结 关于 2023 学习总体上来讲&#xff0c;2023 学的东西还是不少的&#xff0c;有对技术栈广度的扩展&#xff0c;也有对计算机深度的挖掘。 学习内容总结&#xff1a; 学习 React 学习浏览器渲染原理 学习计算机网络 学习 Next.js 学习 Nest.…...

016-Vue-黑马2023:前后端分离开发(在线接口文档),前端工程化、Element、vue编写一个完成页面、Vue路由、vue打包部署到nginx

第三节 前后端分离开发 1、介绍 开发模式 前后端混合开发&#xff1a;传统开发模式 前后端分离开发&#xff1a;当前最为主流的开发模式 页面原型需求案例&#xff1a;分析出接口文档 离线开发文档示例&#xff1a; 2、YAPI&#xff08;官网已停用&#xff09; 202…...

如何给新华网投稿发稿?新华网的媒体发稿方法步骤

现如今&#xff0c;互联网已经成为了人们获取信息的主要途径&#xff0c;各大媒体网站也成为了发布自己作品的首选平台。其中&#xff0c;新华网作为中国最具影响力的新闻媒体之一&#xff0c;其内容覆盖面广、触及人群众多&#xff0c;因此&#xff0c;能够在新华网上发表文章…...

为什么 macOS 比 Windows 稳定?

在计算机操作系统领域&#xff0c;macOS 和 Windows 分别是苹果公司和微软公司的主打产品。尽管两者都拥有大量的用户群体&#xff0c;但在稳定性和用户体验方面&#xff0c;macOS 常常被认为优于 Windows。那么&#xff0c;为什么 macOS 比 Windows 更稳定呢&#xff1f; 我们…...

从matlab的fig图像文件中提取数据

这里用的是openfig&#xff08;&#xff09;函数打开的fig文件 →→→【matlab 中 fig 数据提取】 很简洁 →→→【MATLAB提取 .fig 文件中的数据】 这个给出了包含多个曲线的情况 →→→【提取matlab fig文件里的数据和legend】 chatgpt给出的方法 打开fig文件并保存数据 我的…...

基于网络爬虫的微博热点分析,包括文本分析和主题分析

基于Python的网络爬虫的微博热点分析是一项技术上具有挑战性的任务。我们使用requests库来获取微博热点数据&#xff0c;并使用pandas对数据进行处理和分析。为了更好地理解微博热点话题&#xff0c;我们采用LDA主题分析方法&#xff0c;结合jieba分词工具将文本分割成有意义的…...

前端图片转base64 方法

在uni-app、Vue.js或其他前端框架中&#xff0c;将图片转换为Base64编码的过程是相似的。以下是一个简单的示例&#xff0c;说明如何在这些环境中使用JavaScript将图片转换为Base64编码。 1. HTML部分 首先&#xff0c;你需要在HTML中放置一个文件输入元素&#xff0c;用于选…...

Go语言数据结构(一)双向链表

list容器 Go语言中list容器定义在"container/list"包中&#xff0c;实现了一个双向链表。本文第一部分总结源码包中的方法&#xff0c;第二部分展示使用list包的常见示例用法以及刷题时的用法。 食用指南&#xff1a;先看第二部分的常用示例用法然后再用到时在第一部…...

【MySql】MySQL 如何创建新用户

具体代码与实现方法 登录 MySQL&#xff1a; 使用 root 用户或具有相应权限的用户登录到 MySQL。可以使用以下命令&#xff1a; mysql -u root -p这里 -u 后面跟的是用户名&#xff0c;-p 表示提示输入密码。 创建新用户&#xff1a; 使用以下 SQL 命令创建新用户&#xff1a;…...

【DFS】200.岛屿数量

题目 法1&#xff1a;DFS 最简单的DFS必须掌握&#xff01;&#xff01;&#xff01; class Solution {public int numIslands(char[][] grid) {int m grid.length, n grid[0].length, ans 0;if (m 0 || n 0) {return ans;}boolean[][] visited new boolean[m][n];for…...

Vue动态添加新的属性到实例上(vue的问题)

当我们去看vue文档的时候&#xff0c;发现如果在实例创建之后添加新的属性到实例上&#xff0c;它不会触发视图更新。比如我们我们开始创建了一个对象实例&#xff0c;在实例创建之后为其增加新的属性&#xff0c;我们发现这个属性不能生效,此时需要使用this.$set()方法。 &…...

HarmonyOS应用开发者高级认证

一、判断题 云函数打包完成后&#xff0c;需要到AppGallery Connect创建对应函数的触发器才可以在端侧中调用&#xff08;错&#xff09; 在column和Row容器组件中&#xff0c;aligntems用于设置子组件在主轴方向上的对齐格式&#xff0c;justifycontent用于设置子组件在交叉轴…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...