官方站点 nginx-configuration:
https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/
一、环境准备¶
采用前面课程中的java应用:
#定义资源文件
[root@master01 ~]# cd /root/6
[root@master01 6]# vim java.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: springboot
spec:
replicas: 2
selector:
matchLabels:
app: springboot
template:
metadata:
labels:
app: springboot
spec:
containers:
- name: springboot
image: registry.cn-hangzhou.aliyuncs.com/abroad_images/springboot:v1-aming
resources:
limits:
memory: "1Gi"
cpu: "1"
requests:
memory: "128Mi"
cpu: "100m"
ports:
- containerPort: 8080
name: web
livenessProbe:
httpGet:
port: web
path: /apptwo
timeoutSeconds: 2
periodSeconds: 30
readinessProbe:
tcpSocket:
port: web
initialDelaySeconds: 10
---
apiVersion: v1
kind: Service
metadata:
name: springboot
spec:
type: ClusterIP
selector:
app: springboot
ports:
- name: http
port: 8080
protocol: TCP
targetPort: 8080
#应用
[root@master01 6]# kaf java.yaml
二、ingress-nginx 之 rewrite¶
官方示例:Rewrite - NGINX Ingress Controller (kubernetes.github.io)
rewrite可以使用下面的anntations进行控制:
| 名称 | 描述 | 值 |
|---|---|---|
| nginx.ingress.kubernetes.io/rewrite- target | 将匹配到的url重定向到rewrite-target注解指定的路径 | string |
| nginx.ingress.kubernetes.io/ssl- redirect | 表示位置部分是否可访问SSL(当Ingress包含证书时默认为 True) | bool |
| nginx.ingress.kubernetes.io/force-ssl-redirect | 强制重定向到HTTPS,即使入口没有启用TLS | bool |
| nginx.ingress.kubernetes.io/app-root | 访问主域名的时候会自动跳转到app-root注解指定的路径 | string |
| nginx.ingress.kubernetes.io/use-regex | 表示Ingress上定义的路径是否使用正则表达式 | bool |
2.1 rewrite的一般应用场景¶
- 调整用户浏览的URL,看起来更规范;
- 网站更换新域名后,为了不影响SEO,让用户体验更好;
- 根据特殊的变量、目录、客户端信息进行跳转;
2.2 JAVA-ing示例¶
创建ingress
[root@master01 ~]# cd /root/6
[root@master01 6]# vim springboot-ingress-rewrite.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: java-ingress-nginx
namespace: default
annotations:
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
ingressClassName: nginx
rules:
- host: java.zhang-qing.com
http:
paths:
- pathType: Prefix
backend:
service:
name: springboot
port:
number: 8080
path: /appone(/|$)(.*)
#应用
[root@master01 6]# kaf springboot-ingress-rewrite.yaml
在这个 ingress 的定义中,通过在 annotations 中指定了nginx.ingress.kubernetes.io/rewrite-target: /$2 来进行重定向,(.\*) 捕获的任何字符都将被分配给占位符$2,然后在 rewrite-target 中用作参数。
例如,上面的入口定义将导致以下重写:
- java.zhang-qing.com/appone 重写为 java.zhang-qing.com/
- java.zhang-qing.com/appone/ 重写为 java.zhang-qing.com/
- java.zhang-qing.com/appone/apptwo 重写为 java.zhang-qing.com/apptwo
2.3 验证¶
测试验证
#测试访问java.zhang-qing.com/appone
[root@master01 6]# curl -k -i java.zhang-qing.com/appone
HTTP/1.1 404
Date: Mon, 07 Apr 2025 04:55:43 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
{"timestamp":"2025-04-07T04:55:43.062+00:00","status":404,"error":"Not Found","path":"/"}
#测试访问java.zhang-qing.com/appone/
[root@master01 6]# curl -k -i java.zhang-qing.com/appone/
HTTP/1.1 404
Date: Mon, 07 Apr 2025 04:56:24 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
{"timestamp":"2025-04-07T04:56:24.222+00:00","status":404,"error":"Not Found","path":"/"}
#测试访问java.zhang-qing.com/appone/appone
[root@master01 6]# curl -k -i java.zhang-qing.com/appone/appone
HTTP/1.1 200
Date: Mon, 07 Apr 2025 04:56:48 GMT
Content-Type: application/json
Content-Length: 6
Connection: keep-alive
appOne
环境清理
[root@master01 6]# k delete -f springboot-ingress-rewrite.yaml -f java.yaml
2.4 permanent-redirect¶
创建ingress
主要增加如下配置内容
# 当访问java.zhang-qing.com域名,会重定向到新的域名
annotations:
nginx.ingress.kubernetes.io/permanent-redirect: 'https://gitee.com/jeckjohn/k8s-ha-install'
在这个 ingress 的定义中,通过在 annotations 中指定了
# 编写ingress
[root@master01 6]# vim springboot-ingress-redirect.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: java-ingress-nginx
namespace: default
annotations:
nginx.ingress.kubernetes.io/permanent-redirect: 'https://baidu.com/'
spec:
ingressClassName: nginx
rules:
- host: java.zhang-qing.com
http:
paths:
- pathType: Prefix
backend:
service:
name: springboot
port:
number: 8080
path: /appone(/|$)(.*)
# 应用
[root@master01 ~]# kaf springboot-ingress-redirect.yaml
测试验证
[root@master01 6]# curl -i -k http://java.zhang-qing.com/appone
HTTP/1.1 301 Moved Permanently
Date: Mon, 07 Apr 2025 05:05:53 GMT
Content-Type: text/html
Content-Length: 162
Connection: keep-alive
Location: https://baidu.com/
<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx</center>
</body>
</html>
环境清理
[root@master01 ~]# k delete -f springboot-ingress-redirect.yaml -f java.yaml