Kubernetes-基于ingress实现重写URL
1、基于ingress实现重写URL基础
官方文档:https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/
1.1、rewriting可以使用下面的anntations进行控制
1.2、常规的ingress
1、创建service和后端pod的yaml文件(myweb-service.yaml)

apiVersion: v1 kind: Service metadata: name: myweb-service spec: selector: app: ingress-nginx-pod ports: - port: 11180 targetPort: 80 protocol: TCP --- apiVersion: apps/v1 kind: Deployment metadata: name: ingress-nginx-deployment spec: selector: matchLabels: app: ingress-nginx-pod replicas: 1 template: metadata: labels: app: ingress-nginx-pod spec: volumes: - name: html hostPath: path: /apps/html containers: - name: ingress-nginx-container image: nginx:latest imagePullPolicy: Never command: ["/usr/sbin/nginx", "-g", "daemon off;"] ports: - containerPort: 80 volumeMounts: - mountPath: /usr/share/nginx/html name: html
2、创建index.html文件
1 2 3 4 5 | ]# mkdir -pv /apps/html/a1/b1/c1/ ]# echo '/a1/b1/c1/index.html' > /apps/html/a1/b1/c1/index.html ]# mkdir -pv /apps/html/a2/b2/c2/ ]# echo '/a2/b2/c2/index.html' > /apps/html/a2/b2/c2/index.html |
3、创建ingress规则的yaml文件(my-ingress.yaml)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | apiVersion: networking.k8s.io /v1 kind: Ingress metadata: name: my-ingress annotations: kubernetes.io /ingress .class: "nginx" #必须有,否则创建出的ingress可能不正常 spec: rules: - host: localhost http: paths: - path: /a1/b1/c1 pathType: Prefix backend: service: name: myweb-service port: number: 11180 - path: /a2/b2/c2 pathType: Prefix backend: service: name: myweb-service port: number: 11180 |
4、创建service、pod和ingress
1 2 | ]# kubectl apply -f myweb-service.yaml ]# kubectl apply -f my-ingress.yaml |
5、访问服务
1 2 3 4 5 | ]# curl -H "Host:localhost" 10.1.1.11:32080/a1/b1/c1/ /a1/b1/c1/index.html ]# curl -H "Host:localhost" 10.1.1.11:32080/a2/b2/c2/ /a2/b2/c2/index.html |
2、基于ingress实现重写URL
- /a2/b2/c2/重写成/page/b2/c2/
1、、创建index.html文件
1 2 | ]# mkdir -pv /apps/html/page/b2/c2/ ]# echo '/page/b2/c2/index.html' > /apps/html/page/b2/c2/index.html |
2、更新ingress规则的yaml文件(my-ingress.yaml)
- 注意:重写是针对整个ingress的,因此这里将重写单独使用一个ingress(最好一个重写使用一个ingress)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | apiVersion: networking.k8s.io /v1 kind: Ingress metadata: name: my-ingress annotations: kubernetes.io /ingress .class: "nginx" #必须有,否则创建出的ingress可能不正常 spec: rules: - host: localhost http: paths: - path: /a1/b1/c1 pathType: Prefix backend: service: name: myweb-service port: number: 11180 --- apiVersion: networking.k8s.io /v1 kind: Ingress metadata: name: my-ingress-rewrite annotations: kubernetes.io /ingress .class: "nginx" #必须有,否则创建出的ingress可能不正常 nginx.ingress.kubernetes.io /rewrite-target : /page/ $3/$5/$7 #每一个括号是一个捕获组 spec: rules: - host: localhost http: paths: - path: /(a2)(/)(b2)(/)(c2)(/|$)(.*) #最后必须以".*"结尾 pathType: Prefix backend: service: name: myweb-service port: number: 11180 |
2、更新ingress
1 | ]# kubectl apply -f my-ingress.yaml |
3、访问服务
1 2 3 4 5 | ]# curl -H "Host:localhost" 10.1.1.11:32080/a1/b1/c1/ /a1/b1/c1/index.html ]# curl -H "Host:localhost" 10.1.1.11:32080/a2/b2/c2/ /page/b2/c2/index.html |
1
1 | # # |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具