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
繁體地址,請注明出處:http://hk.pswp.cn/web/83714.shtml
英文地址,請注明出處:http://en.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;對于計算機類的收錄不是特別的充足 國家科…