参考大佬:https://blog.csdn.net/remix_xy/article/details/127001584
示例 - ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
emr-vke/ray-cluster-uuid: 221167282729208548-emr-4yw63nfsim3u4ruc1oim-rayjob-sample-raycluster-b5x8f
emr/role: JOB
nginx.ingress.kubernetes.io/rewrite-target: /$1
ray.io/enable-ray-history-server: "true"
creationTimestamp: "2026-05-15T08:11:57Z"
generation: 1
labels:
app.kubernetes.io/created-by: kuberay-operator
app.kubernetes.io/name: kuberay
ray.io/cluster: rayjob-sample-raycluster-b5x8f
ray.io/identifier: rayjob-sample-raycluster-b5x8f-head
name: rayjob-sample-raycluster-b5x8f-head-ingress
namespace: emr-4yw63nfsim3u4ruc1oim-ray
ownerReferences:
- apiVersion: ray.io/v1
blockOwnerDeletion: true
controller: true
kind: RayCluster
name: rayjob-sample-raycluster-b5x8f
uid: 75e96b29-689a-40b3-8a38-281712e3a123
resourceVersion: "3967321"
uid: a083035f-0e6f-446d-9ba5-de1b4d6c405a
spec:
ingressClassName: nginx
rules:
- http:
paths:
- backend:
service:
name: rayjob-sample-raycluster-b5x8f-head-svc
port:
number: 8265
path: /rayjob-sample-raycluster-b5x8f/(.*)
pathType: Exact
status:
loadBalancer:
ingress:
- ip: 118.196.47.109
解释
1. (.*)
(.*) 是一个正则表达式,配合 nginx ingress 的 rewrite(重写) 功能使用。
拆开看:
• . 表示任意一个字符
• * 表示前面的字符出现 0 次或多次
• () 表示捕获分组,把匹配到的内容"抓出来",可以在后面引用
所以 (.*) 的意思是:匹配任意长度的任意字符,并把它捕获下来。
2. annotations
结合annotations一起看
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
...
path: /rayjob-sample-raycluster-b5x8f/(.*)
工作流程:
-
用户访问:http://118.196.47.109/rayjob-sample-raycluster-b5x8f/api/jobs
-
nginx 用正则 /rayjob-sample-raycluster-b5x8f/(.*) 去匹配路径
-
(.*) 捕获到的内容是:api/jobs → 这就是 $1
-
rewrite-target: /$1 告诉 nginx 把请求重写成 /api/jobs
-
最后转发给后端 Service(Ray dashboard)的就是 /api/jobs