k3s入门教程(二)部署前后端分离程序

文章目录

  • 部署基础服务
    • 部署Redis
    • 部署MySQL
    • 端口转发测试
  • 运行与构建前后端镜像
    • 构建后端镜像 `docker build -t ruoyi-admin:v3.8 .`
    • 构建前端镜像 `docker build -t ruoyi-ui:v3.8 .`
    • 创建私库,推拉镜像
  • 前后端应用部署
    • 后端应用部署
    • 前端应用部署
  • 启动顺序与初始化容器
    • 修改前端部署配置,使用until-do实现等待就绪
    • 修改后端部署配置
  • Ingress入口
    • ingress作用
    • ingress部署
    • ingress路径类型
    • ingress部署(主机名匹配)

部署基础服务

# 安装仓库(通过镜像安装)
[root@k3s-m soft]# helm repo add stable https://mirror.azure.cn/kubernetes/charts/
"stable" has been added to your repositories
[root@k3s-m soft]# helm repo add bitnami https://charts.bitnami.com/bitnami/
"bitnami" has been added to your repositorieshelm repo update# 配置k8s路径
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
# 持久配置
echo 'export KUBECONFIG=/etc/rancher/k3s/k3s.yaml' | sudo tee -a /etc/profile
# 查看配置
echo $KUBECONFIG# 查看已有部署
[root@k3s-m ~]# helm list
NAME    	NAMESPACE	REVISION	UPDATED                                	STATUS  	CHART       	APP VERSION
my-mysql	default  	1       	2025-06-07 14:37:37.262899896 +0800 CST	deployed	mysql-1.6.9 	5.7.30     
mysql   	default  	1       	2025-06-06 21:54:20.065172314 +0800 CST	deployed	mysql-1.6.9 	5.7.30     
redis   	default  	1       	2025-06-06 22:33:45.539588468 +0800 CST	deployed	redis-10.5.7	5.0.7      
# 删除部署
[root@k3s-m ~]# helm delete my-mysql
release "my-mysql" uninstalled

部署Redis

helm search repo bitnami/redis --versions
# 这里需要注意,新版本的参数语法可能有所不同,会导致standalone失效
helm install redis bitnami/redis --version 17.3.7 \
--set architecture=standalone \
--set-string auth.password=123456 \
--set replica.replicaCount=0 \
--set master.persistence.enabled=false \
--set master.persistence.medium=Memory \
--set master.persistence.sizeLimit=1Gi \--kubeconfig=/etc/rancher/k3s/k3s.yaml# 复制地址,以供后续链接使用
redis-master.default.svc.cluster.local
# 查看pod
[root@k3s-m helm]# kubectl get pod
NAME                        READY   STATUS    RESTARTS        AGE
mynginx                     1/1     Running   11 (134m ago)   7d20h
redis-master-0              1/1     Running   0               4m38s
NAME: redis
LAST DEPLOYED: Wed Jun 11 10:45:53 2025
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: redis
CHART VERSION: 17.3.7
APP VERSION: 7.0.5** Please be patient while the chart is being deployed **Redis® can be accessed via port 6379 on the following DNS name from within your cluster:redis-master.default.svc.cluster.localTo get your password run:export REDIS_PASSWORD=$(kubectl get secret --namespace default redis -o jsonpath="{.data.redis-password}" | base64 -d)To connect to your Redis® server:1. Run a Redis® pod that you can use as a client:kubectl run --namespace default redis-client --restart='Never'  --env REDIS_PASSWORD=$REDIS_PASSWORD  --image docker.io/bitnami/redis:7.0.5-debian-11-r7 --command -- sleep infinityUse the following command to attach to the pod:kubectl exec --tty -i redis-client \--namespace default -- bash2. Connect using the Redis® CLI:REDISCLI_AUTH="$REDIS_PASSWORD" redis-cli -h redis-masterTo connect to your database from outside the cluster execute the following commands:kubectl port-forward --namespace default svc/redis-master 6379:6379 &REDISCLI_AUTH="$REDIS_PASSWORD" redis-cli -h 127.0.0.1 -p 6379

部署MySQL

  1. 将ruoyi-vue项目中的sql文件夹拷贝到服务器,执行命令生成configMap
[root@k3s-m app]# kubectl create configmap ruoyi-init-sql --from-file=/home/app/sql
configmap/ruoyi-init-sql created
  1. 编写部署配置文件ruoyi-mysql.yaml
auth:rootPassword: "123456"database: ry-vueinitdbScriptsConfigMap: ruoyi-init-sqlprimary:persistence:size: 2Gienabled: truesecondary:replicaCount: 2persistence:size: 2Gienabled: truearchitecture: replication
[root@k3s-m helm]# ls
ruoyi-mysql.yaml
# 注意指定版本,否则可能导致副本数不生效。
[root@k3s-m helm]# helm install db -f ruoyi-mysql.yaml  bitnami/mysql   --version 9.4.1  --kubeconfig=/etc/rancher/k3s/k3s.yaml 
NAME: db
LAST DEPLOYED: Wed Jun 11 10:52:49 2025
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: mysql
CHART VERSION: 9.4.1
APP VERSION: 8.0.31** Please be patient while the chart is being deployed **Tip:Watch the deployment status using the command: kubectl get pods -w --namespace defaultServices:echo Primary: db-mysql-primary.default.svc.cluster.local:3306echo Secondary: db-mysql-secondary.default.svc.cluster.local:3306Execute the following to get the administrator credentials:echo Username: rootMYSQL_ROOT_PASSWORD=$(kubectl get secret --namespace default db-mysql -o jsonpath="{.data.mysql-root-password}" | base64 -d)To connect to your database:1. Run a pod that you can use as a client:kubectl run db-mysql-client --rm --tty -i --restart='Never' --image  docker.io/bitnami/mysql:8.0.31-debian-11-r0 --namespace default --env MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD --command -- bash2. To connect to primary service (read/write):mysql -h db-mysql-primary.default.svc.cluster.local -uroot -p"$MYSQL_ROOT_PASSWORD"3. To connect to secondary service (read-only):mysql -h db-mysql-secondary.default.svc.cluster.local -uroot -p"$MYSQL_ROOT_PASSWORD"# 复制访问地址
echo Primary: db-mysql-primary.default.svc.cluster.local:3306
echo Secondary: db-mysql-secondary.default.svc.cluster.local:3306

端口转发测试

[root@k3s-m helm]# kubectl get svc
NAME                          TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
kubernetes                    ClusterIP   10.43.0.1      <none>        443/TCP    13d
redis-headless                ClusterIP   None           <none>        6379/TCP   16m
redis-master                  ClusterIP   10.43.156.26   <none>        6379/TCP   16m
db-mysql-secondary-headless   ClusterIP   None           <none>        3306/TCP   9m11s
db-mysql-primary-headless     ClusterIP   None           <none>        3306/TCP   9m11s
db-mysql-secondary            ClusterIP   10.43.81.111   <none>        3306/TCP   9m11s
db-mysql-primary              ClusterIP   10.43.71.82    <none>        3306/TCP   9m11s[root@k3s-m helm]# kubectl port-forward svc/db-mysql-primary --address=192.168.55.10 3306:3306
Forwarding from 192.168.55.10:3306 -> 3306
[root@k3s-m helm]# kubectl port-forward svc/redis-master --address=192.168.55.10 6379:6379
Forwarding from 192.168.55.10:6379 -> 6379

运行与构建前后端镜像

构建后端镜像 docker build -t ruoyi-admin:v3.8 .

#编译
FROM maven AS build
WORKDIR /build/app
#将本地的maven目录装载到容器中的maven目录下,这样就不用重复下载依赖的jar包了
#VOLUME ~/.m2 /root/.m2
COPY . .
RUN mvn clean package#打包
FROM openjdk:8u342-jre
WORKDIR /app/ruoyi
COPY --from=build /build/app/ruoyi-admin/target/ruoyi-admin.jar .
EXPOSE 8080
ENTRYPOINT ["java","-jar","ruoyi-admin.jar"]

构建前端镜像 docker build -t ruoyi-ui:v3.8 .

FROM node:14-alpine AS build
WORKDIR /build/ruoyi-ui
COPY . .
# 安装依赖并打包到正式环境
RUN npm install --registry=https://registry.npmmirror.com && npm run build:prodFROM nginx:1.22
WORKDIR /app/ruoyi-ui
COPY --from=build /build/ruoyi-ui/dist .
EXPOSE 80

创建私库,推拉镜像

# 本地docker自建仓库
docker run -d  -p 5000:5000  --name registry  registry:2
# k3s仓库配置/etc/rancher/k3s/registries.yaml
mirrors:"192.168.55.1:5000":endpoint:- "http://192.168.55.1:5000"insecure: true	# 信任非https协议
#重启master组件
systemctl restart k3s
#重启node组件
systemctl restart k3s-agent
查看containerd的配置文件
cat  /var/lib/rancher/k3s/agent/etc/containerd/config.toml
# 宿主机标记并推送镜像
docker tag ruoyi-admin:v3.8 127.0.0.1:5000/ruoyi-admin:v3.8
docker push 127.0.0.1:5000/ruoyi-admin:v3.8
docker tag ruoyi-ui:v3.8 127.0.0.1:5000/ruoyi-ui:v3.8
docker push 127.0.0.1:5000/ruoyi-ui:v3.8
# 虚拟机拉去镜像
crictl pull 192.168.55.1:5000/ruoyi-ui:v3.8
crictl pull 192.168.55.1:5000/ruoyi-admin:v3.8

前后端应用部署

  1. 复制dns地址
#Redis can be accessed via port 6379 on the following DNS name from within your cluster:
redis-master.default.svc.cluster.local#MySQL DNS NAME
Primary: db-mysql-primary.default.svc.cluster.local:3306
Secondary: db-mysql-secondary.default.svc.cluster.local:3306

后端应用部署

  1. 编写配置文件 application-k8s.yaml
# 数据源配置
spring:# redis 配置redis:# 地址host: redis-master# 端口,默认为6379port: 6379# 数据库索引database: 0# 密码password: 123456# 连接超时时间timeout: 10slettuce:pool:# 连接池中的最小空闲连接min-idle: 0# 连接池中的最大空闲连接max-idle: 8# 连接池的最大数据库连接数max-active: 8# #连接池最大阻塞等待时间(使用负值表示没有限制)max-wait: -1msdatasource:type: com.alibaba.druid.pool.DruidDataSourcedriverClassName: com.mysql.cj.jdbc.Driverdruid:# 主库数据源master:url: jdbc:mysql://db-mysql-primary:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8username: rootpassword: 123456# 从库数据源slave:# 从数据源开关/默认关闭enabled: trueurl: jdbc:mysql://db-mysql-secondary:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8username: rootpassword: 123456# 初始连接数initialSize: 5# 最小连接池数量minIdle: 10# 最大连接池数量maxActive: 20# 配置获取连接等待超时的时间maxWait: 60000# 配置连接超时时间connectTimeout: 30000# 配置网络超时时间socketTimeout: 60000# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒timeBetweenEvictionRunsMillis: 60000# 配置一个连接在池中最小生存的时间,单位是毫秒minEvictableIdleTimeMillis: 300000# 配置一个连接在池中最大生存的时间,单位是毫秒maxEvictableIdleTimeMillis: 900000# 配置检测连接是否有效validationQuery: SELECT 1 FROM DUALtestWhileIdle: truetestOnBorrow: falsetestOnReturn: falsewebStatFilter: enabled: truestatViewServlet:enabled: true# 设置白名单,不填则允许所有访问allow:url-pattern: /druid/*# 控制台管理用户名和密码login-username: ruoyilogin-password: 123456filter:stat:enabled: true# 慢SQL记录log-slow-sql: trueslow-sql-millis: 1000merge-sql: truewall:config:multi-statement-allow: true
  1. 使用配置文件生成configMap
[root@k3s-m app]# kubectl create configmap ruoyi-admin-config --from-file=/home/app/application-k8s.yaml
configmap/ruoyi-admin-config created
  1. 编写部署配置 ruoyi-admin.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: ruoyi-adminlabels:app: ruoyi-admin
spec:replicas: 1selector:matchLabels:app: ruoyi-admintemplate:metadata:labels:app: ruoyi-adminspec:containers:- name: ruoyi-adminimage: 10.150.36.72:5000/ruoyi-admin:v3.8ports:- containerPort: 8080volumeMounts:# springBoot启动时,在jar包所在位置的config目录下查找配置文件# jar包所在的位置就是dockerfile中WORKDIR定义的目录,即/app/ruoyi- mountPath: /app/ruoyi/configname: config# 使用application-k8s.yaml作为配置文件# 启动命令如下: java -jar ruoyi-admin.jar --spring.profiles.active=k8sargs: ["--spring.profiles.active=k8s"]volumes:- name: configconfigMap:name: ruoyi-admin-config
---
apiVersion: v1
kind: Service
metadata:name: ruoyi-admin
spec:type: ClusterIPselector:app: ruoyi-adminports:- port: 8080targetPort: 8080
  1. 执行部署命令
kubectl apply -f ruoyi-admin.yaml 
kubectl get pods
kubectl logs -f ruoyi-admin-559d7f64c5-vx2lc kubectl get svc
kubectl port-forward svc/ruoyi-admin --address=192.168.55.10 8080:8080

前端应用部署

  1. 编写nginx配置
server {listen       80;server_name  localhost;charset utf-8;location / {# dockerfile中WORKDIR目录root   /app/ruoyi-ui;try_files $uri $uri/ /index.html;index  index.html index.htm;}location /prod-api/ {proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# 后端service的DNSproxy_pass http://ruoyi-admin:8080/;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}
}
  1. 使用nginx.conf生成configMap
[root@k3s-m app]# kubectl create configmap ruoyi-ui-config --from-file=/home/app/nginx.conf 
configmap/ruoyi-ui-config created
  1. 编写k3s部署配置ruoyi-ui.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: ruoyi-uilabels:app: ruoyi-ui
spec:replicas: 1selector:matchLabels:app: ruoyi-uitemplate:metadata:labels:app: ruoyi-uispec:containers:- name: ruoyi-uiimage: 192.168.55.1:5000/ruoyi-ui:v3.8ports:- containerPort: 80volumeMounts:- mountPath: /etc/nginx/conf.dname: configvolumes:- name: configconfigMap:name: ruoyi-ui-configitems:- key: nginx.confpath: default.conf
---
apiVersion: v1
kind: Service
metadata:name: ruoyi-ui
spec:type: NodePortselector:app: ruoyi-uiports:- port: 80targetPort: 80nodePort: 30080
  1. 执行部署命令
kubectl apply -f ruoyi-ui.yaml 
kubectl get pods
  1. 访问前端页面:http://192.168.55.10:30080/index

启动顺序与初始化容器

我们可以使用初始化容器(Init Container)来控制启动顺序。
● Pod中的初始化容器在应用容器之前启动。
● 初始化容器未执行完成,应用容器不会启动。
● 多个初始化容器按顺序执行,前一个执行完成才会执行下一个。

修改前端部署配置,使用until-do实现等待就绪

apiVersion: apps/v1
kind: Deployment
metadata:name: ruoyi-uilabels:app: ruoyi-ui
spec:replicas: 1selector:matchLabels:app: ruoyi-uitemplate:metadata:labels:app: ruoyi-uispec:# 修改这里,加入检查配置initContainers:- name: wait-for-ruoyi-admin  # 名称image: nginx:1.22           # 镜像command:	   # 首先进入循环,每隔5秒执行一次。访问后端,-m 3 表示超时3秒- sh- -c- |until curl -m 3 ruoyi-admin:8080 do echo waiting for ruoyi-admin;sleep 5;donecontainers:- name: ruoyi-uiimage: 192.168.55.1:5000/ruoyi-ui:v3.8ports:- containerPort: 80volumeMounts:- mountPath: /etc/nginx/conf.dname: configvolumes:- name: configconfigMap:name: ruoyi-ui-configitems:- key: nginx.confpath: default.conf
---
apiVersion: v1
kind: Service
metadata:name: ruoyi-ui
spec:type: NodePortselector:app: ruoyi-uiports:- port: 80targetPort: 80nodePort: 30080
[root@k3s-m app]# kubectl delete -f ruoyi-ui.yaml 
[root@k3s-m app]# kubectl apply -f ruoyi-ui2.yaml 
[root@k3s-m app]# kubectl get pods -owide --watch
ruoyi-ui-787bbfb854-9gl7h      0/1     Terminating   2 (81m ago)    22h   10.42.1.101   k3s-w1   <none>           <none>
ruoyi-ui-b6bc44dd6-9rc48       0/1     Pending       0              0s    <none>        <none>   <none>           <none>
ruoyi-ui-b6bc44dd6-9rc48       0/1     Pending       0              0s    <none>        k3s-w1   <none>           <none>
ruoyi-ui-b6bc44dd6-9rc48       0/1     Init:0/1      0              0s    <none>        k3s-w1   <none>           <none>
ruoyi-ui-b6bc44dd6-9rc48       0/1     Init:0/1      0              3s    10.42.1.102   k3s-w1   <none>           <none>
ruoyi-ui-b6bc44dd6-9rc48       0/1     PodInitializing   0              5s    10.42.1.102   k3s-w1   <none>           <none>
ruoyi-ui-b6bc44dd6-9rc48       1/1     Running           0              6s    10.42.1.102   k3s-w1   <none>           <none>

修改后端部署配置

apiVersion: apps/v1
kind: Deployment
metadata:name: ruoyi-adminlabels:app: ruoyi-admin
spec:replicas: 1selector:matchLabels:app: ruoyi-admintemplate:metadata:labels:app: ruoyi-adminspec:initContainers:- name: wait-for-mysqlimage: bitnami/mysql:8.0.31-debian-11-r0env:- name: MYSQL_ROOT_PASSWORDvalue: "123456"command:- sh- -c- |set -emaxTries=10while [ "$$maxTries" -gt 0 ] \&& ! mysqladmin ping --connect-timeout=3 -s \-hdb-mysql-primary -uroot -p$$MYSQL_ROOT_PASSWORDdo echo 'Waiting for MySQL to be available'sleep 5let maxTries--doneif [ "$$maxTries" -le 0 ]; thenecho >&2 'error: unable to contact MySQL after 10 tries'exit 1fi- name: wait-for-redisimage: bitnami/redis:7.0.5-debian-11-r7env:- name: REDIS_PASSWORDvalue: "123456"command:- sh- -c- |set -emaxTries=10while [ "$$maxTries" -gt 0 ] \&& ! timeout 3 redis-cli -h redis-master -a $$REDIS_PASSWORD pingdo echo 'Waiting for Redis to be available'sleep 5let maxTries--doneif [ "$$maxTries" -le 0 ]; thenecho >&2 'error: unable to contact Redis after 10 tries'exit 1ficontainers:- name: ruoyi-adminimage: 192.168.55.1:5000/ruoyi-admin:v3.8ports:- containerPort: 8080volumeMounts:# springBoot启动时,在jar包所在位置的config目录下查找配置文件# jar包所在的位置就是dockerfile中WORKDIR定义的目录,即/app/ruoyi- mountPath: /app/ruoyi/configname: config# 使用application-k8s.yaml作为配置文件# 启动命令如下: java -jar ruoyi-admin.jar --spring.profiles.active=k8sargs: ["--spring.profiles.active=k8s"]volumes:- name: configconfigMap:name: ruoyi-admin-config
---
apiVersion: v1
kind: Service
metadata:name: ruoyi-admin
spec:type: ClusterIPselector:app: ruoyi-adminports:- port: 8080targetPort: 8080
kubectl delete -f ruoyi-admin.yaml 
kubectl apply -f ruoyi-admin2.yaml 
[root@k3s-m app]# kubectl get pods -owide --watch
ruoyi-admin-559d7f64c5-vx2lc   0/1     Terminating       4              23h   10.42.0.131   k3s-m    <none>           <none>
ruoyi-admin-56d5b45cbc-52j72   0/1     Pending           0              0s    <none>        <none>   <none>           <none>
ruoyi-admin-56d5b45cbc-52j72   0/1     Pending           0              0s    <none>        k3s-m    <none>           <none>
ruoyi-admin-56d5b45cbc-52j72   0/1     Init:0/2          0              0s    <none>        k3s-m    <none>           <none>
ruoyi-admin-56d5b45cbc-52j72   0/1     Init:1/2          0              2s    10.42.0.133   k3s-m    <none>           <none>
ruoyi-admin-56d5b45cbc-52j72   0/1     Init:1/2          0              9s    10.42.0.133   k3s-m    <none>           <none>
ruoyi-admin-56d5b45cbc-52j72   0/1     PodInitializing   0              10s   10.42.0.133   k3s-m    <none>           <none>
ruoyi-admin-56d5b45cbc-52j72   1/1     Running           0              11s   10.42.0.133   k3s-m    <none>           <none>

使用until do的方式虽然可以实现等待依赖的服务就绪,但是他是一个无限循环,最好的方式是设置失败重试次数,超过这个次数,初始化容器以失败的状态退出,Pod启动终止。

Ingress入口

在这里插入图片描述

ingress作用

功能类似一个Nginx服务器。

  1. URL路由规则配置
  2. 实现负载均衡、流量分割、流量限制
  3. https配置
  4. 基于名字的虚拟托管

创建Ingress资源需要先部署Ingress控制器,如ingress-nginx。
不同控制器用法和配置是不一样的。
k3s自带一个基于Traefik的ingress控制器,因此我们可以直接创建ingress资源,无需再安装ingress控制器。

注意:ingress只能公开http和https类型的服务到互联网。公开其他类型的服务需要NodePort或LoadBalancer类型的Service。

ingress部署

  1. 编写部署配置
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: ruoyi-ingress
spec:rules:- http:paths:- path: /		# 注意:这里的path,需要跟ruoyi-ui使用的nginx.conf中的location一致,不然会报错。pathType: Prefixbackend:service:name: ruoyi-uiport:number: 80
  1. 执行部署命令
[root@k3s-m app]# vi ruoyi-ingress.yaml
[root@k3s-m app]# kubectl apply -f ruoyi-ingress.yaml 
ingress.networking.k8s.io/ruoyi-ingress created
[root@k3s-m app]# kubectl get ingress
NAME            CLASS    HOSTS   ADDRESS                       PORTS   AGE
ruoyi-ingress   <none>   *       192.168.55.10,192.168.55.11   80      8s
[root@k3s-m app]# kubectl describe ingress
Name:             ruoyi-ingress
Labels:           <none>
Namespace:        default
Address:          192.168.55.10,192.168.55.11
Ingress Class:    <none>
Default backend:  <default>
Rules:Host        Path  Backends----        ----  --------*           /   ruoyi-ui:80 (10.42.1.102:80)
Annotations:  <none>
Events:       <none>
  1. 访问:http://192.168.55.10

ingress路径类型

Ingress 中的每个路径必须设置路径类型(Path Type),当前支持的路径类型有三种:
Exact:精确匹配 URL 路径。区分大小写。
Prefix:URL 路径前缀匹配。区分大小写。并且对路径中的元素逐个完成。
(说明:/foo/bar 匹配 /foo/bar/baz, 但不匹配 /foo/barbaz。)
ImplementationSpecific:对于这种路径类型,匹配方法取决于 IngressClass定义的处理逻辑。

ingress部署(主机名匹配)

  1. 编写部署配置
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: ruoyi-ingress
spec:rules:#类似于nginx的虚拟主机配置- host: "front.ruoyi.com"http:paths:- pathType: Prefixpath: "/"backend:service:name: ruoyi-uiport:number: 80- host: "backend.ruoyi.com"http:paths:- pathType: Prefixpath: "/"backend:service:name: ruoyi-adminport:number: 8080
  1. 执行部署
[root@k3s-m app]# vi ruoyi-ingress2.yaml
[root@k3s-m app]# kubectl apply -f ruoyi-ingress2.yaml 
ingress.networking.k8s.io/ruoyi-ingress configured
[root@k3s-m app]# kubectl get ingress
NAME            CLASS    HOSTS                               ADDRESS                       PORTS   AGE
ruoyi-ingress   <none>   front.ruoyi.com,backend.ruoyi.com   192.168.55.10,192.168.55.11   80      13m
  1. 访问前后端
    在hosts中添加域名映射后,访问域名地址。
192.168.55.10  front.ruoyi.com
192.168.55.10  backend.ruoyi.com

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

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

相关文章

Seata如何与Spring Cloud整合?

&#x1f527; 一、整合核心步骤 1. 启动 Seata Server&#xff08;TC&#xff09; 环境准备&#xff1a; 修改 registry.conf&#xff0c;指定注册中心&#xff08;如 Nacos&#xff09;和配置中心&#xff1a;registry {type "nacos"nacos {serverAddr "l…

Python惰性函数与技术总结-由Deepseek产生

在Python中&#xff0c;惰性&#xff08;Lazy&#xff09;技术指延迟计算直到真正需要结果时才执行&#xff0c;常用于优化内存和性能。以下是常见的惰性函数和技术&#xff1a; 1. 生成器&#xff08;Generators&#xff09; 原理&#xff1a;使用 yield 返回迭代结果&#x…

轮廓 裂缝修复 轮廓修复 填补孔洞 源代码

目录 1. 形态学闭合操作填补小孔洞 完整代码: 使用 Douglas-Peucker 算法对轮廓进行多边形逼近 2.裂缝修复 轮廓修复 轮廓补全 函数封装 调用示例: 1. 形态学闭合操作填补小孔洞 完整代码: import cv2 import numpy as np# 创建模拟图像(白色区域 + 多个不规则黑洞)…

HTTP1.1

HTTP基础知识 HTTP&#xff08;HyperText Transfer Protocol&#xff09;是用于传输超文本 的应用层协议&#xff0c;采用客户端-服务器 模型。 客户端&#xff08;如浏览器&#xff09;发起请求&#xff0c;服务器响应并返回数据。 工作原理 客户端发送HTTP请求至服…

【Linux教程】Linux 生存指南:掌握常用命令,避开致命误操作

Linux 常用操作命令&#xff1a;避免误操作指南 在 Linux 系统中&#xff0c;熟练掌握常用操作命令是高效工作的基础&#xff0c;但同时也要警惕误操作带来的风险。无论是部署程序、配置防火墙、管理端口还是处理进程&#xff0c;一个小小的失误都可能导致系统故障、数据丢失等…

PHP:Web 开发领域的常青树

在当今数字化浪潮中&#xff0c;Web 开发技术日新月异&#xff0c;各种新兴语言和框架层出不穷。然而&#xff0c;PHP 作为一门经典的后端开发语言&#xff0c;依然在 Web 开发领域占据着重要地位&#xff0c;展现出强大的生命力和广泛的应用价值。 PHP 的历史与现状 PHP&…

平均数与倍数

目录 一. 平均数现期平均数基期平均数&#xff08;比较冷门&#xff09;两期平均数-比较平均数的增长量平均数的增长率 二. 倍数基期倍数 \quad 一. 平均数 \quad 现期平均数 \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad 平均数速算技巧&#xff1a;削峰填谷…

一个完整的日志收集方案:Elasticsearch + Logstash + Kibana+Filebeat (三)

现在我们主要完成AI-RAG服务的扩展&#xff0c;利用ES的向量检索能力完成历史聊天记录的存储和向量检索&#xff0c;让ai聊天有记忆。 主要做法是在首次聊天完成后将对话内容写出日志到D:\dev\dev2025\EC0601\logs\chat-his.log 写出日志同时嵌入向量 向量可以从ollama的端点&…

Vue嵌套(多级)路由

一、前言 在构建中大型单页应用(SPA)时,页面结构往往比较复杂,比如仪表盘、用户中心、商品管理等模块通常包含多个子功能页面。为了更好地组织这些页面,Vue Router 提供了嵌套(多级)路由的功能。 通过嵌套路由,我们可以在父级组件中嵌入一个 <router-view> 来展…

Kubernetes 集群安全(身份认证机制、SecurityContext、Network Policy网络策略、预防配置泄露、全面加固集群安全)

Kubernetes 集群安全(身份认证机制、SecurityContext、Network Policy网络策略、预防配置泄露、全面加固集群安全) 一、Kubernetes 身份认证机制 身份认证(Authentication): 在 K8S 中,身份认证是安全访问控制的第一道大门,它的目标是: 确认请求发起者的真实身份 K8…

【VUE3】基于Vue3和Element Plus的递归组件实现多级导航栏

文章目录 前言一、递归的意义二、递归组件的实现——基于element-plus UI的多级导航栏2.1 element-plus Menu菜单官方示例2.2 接口定义2.3 组件递归2.4 父组件封装递归组件 三、完整代码——基于element-plus UI的多级导航栏3.1 组件架构3.2 types.ts3.3 menuTreeItem.vue3.4 i…

思科资料-ACL的基础配置-详细总结

一、ACL技术 1、定义 访问控制列表访问控制列表使用包过滤技术&#xff0c;在路由器上读取第三层及第四层包头中的信息如源地址&#xff0c;目的地址&#xff0c;源端口&#xff0c;目的端口等&#xff0c;根据预先定 义好的规则对包进行过滤&#xff0c;从而达到访问控制的目…

GitHub 上 PAT 和 SSH 的 7 个主要区别:您应该选择哪一个?

在代码仓库和像 Github 这样的版本控制系统中,有时您需要安全高效地访问您的仓库。随着对更安全实践的需求日益增长,开发人员一直在寻找最高效、最安全的方式来与 Github 交互。为了解决这个问题,我们将探讨两种常用的方法:个人访问令牌 (PAT) 和安全 Shell (SSH) 密钥。本…

Vue 事件修饰符详解

Vue 事件修饰符详解 事件修饰符是 Vue 中处理 DOM 事件细节的强大工具。下面我将通过一个交互式示例全面解析各种事件修饰符的用法和原理。 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"…

初探Qt信号与槽机制

3.3 按键响应 - 初识信号与槽 3.3.1 信号与槽基本介绍 提出疑问&#xff0c;界面上已经有按键了&#xff0c;怎么操作才能让用户按下按键后有操作上的反应呢&#xff1f; 在 Qt 中&#xff0c; 信号和槽机制 是一种非常强大的事件通信机制。这是一个重要的概念&#xff0…

Android音视频流媒体基础总结

流媒体开发中&#xff0c;流媒体系统的实现从数据采集、编码封装、传输分发、接收解码播放都有哪些技术和实现&#xff0c;流媒体和本地音视频又有哪些差异&#xff1f; 影像系统开发&#xff0c;流媒体方向和普通的多媒体影像系统开发有一定差异。 相同点在于图像多媒体处理…

疫菌QBD案例

本文是《A-VAX: Applying Quality by Design to Vaccines》第七个研究的R语言解决方案。 使用带两个中心点的二水平析因设计。运行10次实验。结果是分辨度为III的设计。 A <- c(25,25,15,15,15,25,25,20,15,20) B <- c(12,8,8,12,8,12,8,10,12,10) C <- c(35,15,15…

Linux部署elasticsearch 单机版

Linux部署elasticsearch 1、下载安装包 Elasticsearch 7.8.0 | Elastic 2、安装步骤 2.1、上传安装包到服务器opt目录 2.2、解压 #目录创建/opt/module cd /opt mkdir module tar -zxvf elasticsearch-7.8.0-linux-x86_64.tar.gz -C /opt/module mv elasticsearch-7.8.0 …

IDEA高效快捷键指南

1. 编辑类快捷键 编辑快捷键是最常用的一类&#xff0c;可以帮助我们快速操作代码&#xff1a; 快捷键 功能描述 Mac Windows 热度 psvm Tab 生成 main 方法 psvm Tab psvm Tab ⭐⭐⭐⭐⭐ sout Tab 生成 System.out.println() 输出语句 sout Tab sout Tab…

【论文写作参考文献地址】

参考文献地址 论文的各种参考文献地址国家哲学社会科学文献中心国家科技图书文献中心 论文的各种参考文献地址 国家哲学社会科学文献中心 资源免费!!! 整体配色就是红色&#xff0c;主页轮播有些实时新闻。 博主个人感受&#xff0c;对于计算机类的收录不是特别的充足 国家科…