Kubernetes 如何在入口中无路径的情况下路由路径和服务的子字符串

Kubernetes 如何在入口中无路径的情况下路由路径和服务的子字符串,kubernetes,kubernetes-ingress,nginx-ingress,Kubernetes,Kubernetes Ingress,Nginx Ingress,我有三个问题: 1-如何正确实现regex以匹配入口中路径的第一部分 - path: /^search_[0-9A-Z]{9} backend: serviceName: global-search-service servicePort: 5050 我想匹配以/search\u开头的任何路径,例如/search\u model或/search\u make 2-如何访问没有路径只有端口的服务 path: pathType: Exact ba

我有三个问题:

1-如何正确实现regex以匹配入口中路径的第一部分

- path: /^search_[0-9A-Z]{9}
    backend:
      serviceName: global-search-service
      servicePort: 5050
我想匹配以
/search\u
开头的任何路径,例如
/search\u model
/search\u make

2-如何访问没有路径只有端口的服务

 path: 
    pathType: Exact
    backend:
      serviceName: chart-display
      servicePort: 10000
我只是使用iframe显示此服务。由于我只有端口号,如何访问它

3-我托管了两个不同的react应用程序,当我将它们的路径设置为root
/
时,它们都可以工作。。如何实现这两种方法以使用根路径

第三期

所以我想出了这样的主意,对吗

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: admin-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /admin
        backend:
          serviceName: web2-service
          servicePort: 2000

---          

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: normal-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/use-regex: "true"
spec:
  rules:
  - http:
      paths:
      - path: /
        backend:
          serviceName: web1-service
          servicePort: 1000

加载
/admin
不会转到web2服务,如果我将它们都留在
/
,它会自动转到web1服务。请注意

对于第一个问题,您可以在路径中使用正则表达式,而不会有任何问题,您只需要使用use regex注释入口,至少根据文档()

比如:

metadata:
  name: your-name
    annotations:
      nginx.ingress.kubernetes.io/use-regex: "true"
  spec:
    ...
或者,如果将注释用于重写目标,则还应强制使用正则表达式

至于要使用的正则表达式,为了匹配路径的开头,例如,所有以某物开始的路径,例如某物优先某物另一个,您可以使用以下简单方法:

something_[a-zA-Z0-9]*
对于第二个问题,我不确定你到底在问什么。入口应该与http或https请求一起使用,这些请求应该提供路径。如果您只想在给定端口对外公开服务,可以使用LoadBalancer服务

在内部,您希望仅使用一个端口访问的服务在根路径的http中应答?还是有什么不同?如果它只在根路径上应答,则可以将请求中的所有路径与根路径匹配

至于如何将请求的所有路径重写到root,可以使用重写注释,例如:

nginx.ingress.kubernetes.io/rewrite-target: /
有关此注释的更多信息,请查看文档,因为它可以做很多事情()


还要记住,如果你想在两个不同的地方重写两个服务,你需要将入口分成两个独立的入口。对于第一个问题,你可以在你的路径中使用正则表达式,没有任何问题,你只需要用use regex注释入口,至少根据文档()

比如:

metadata:
  name: your-name
    annotations:
      nginx.ingress.kubernetes.io/use-regex: "true"
  spec:
    ...
或者,如果将注释用于重写目标,则还应强制使用正则表达式

至于要使用的正则表达式,为了匹配路径的开头,例如,所有以某物开始的路径,例如某物优先某物另一个,您可以使用以下简单方法:

something_[a-zA-Z0-9]*
对于第二个问题,我不确定你到底在问什么。入口应该与http或https请求一起使用,这些请求应该提供路径。如果您只想在给定端口对外公开服务,可以使用LoadBalancer服务

在内部,您希望仅使用一个端口访问的服务在根路径的http中应答?还是有什么不同?如果它只在根路径上应答,则可以将请求中的所有路径与根路径匹配

至于如何将请求的所有路径重写到root,可以使用重写注释,例如:

nginx.ingress.kubernetes.io/rewrite-target: /
有关此注释的更多信息,请查看文档,因为它可以做很多事情()


还要记住,如果您想在两个不同的位置重写两个服务,则需要将入口拆分为两个单独的入口

我的集群是内部部署的(Metallb和入口),在这种设置下是否可行?如何协调这两个入口,以便决定哪些流量流向何处?不确定您的问题是什么,MetalLb将提供具有IP地址的负载平衡器服务,而入口将由nginx控制器提供。如果使用相同的入口类创建两个(或多个)入口定义,则这两个定义将由相同ip地址的同一ngnix控制器提供服务。这只是一种分离配置的方法,这样您就可以为不同的服务定义不同的注释(如有必要)需要对上面的编辑进行更详细的说明您在第一个入口中错过了入口类的注释,不确定nginx控制器是否会在没有注释的情况下为该入口提供服务。对于注释,它看起来应该可以工作,除非我错过了一些东西。因此,如果我添加nginx注释,它不会抛出任何错误,但不会加载任何页面。我的集群是内部部署的(metallib和入口),在这种设置中可以吗?如何协调这两个入口,以便决定哪些流量流向何处?不确定您的问题是什么,MetalLb将提供具有IP地址的负载平衡器服务,而入口将由nginx控制器提供。如果使用相同的入口类创建两个(或多个)入口定义,则这两个定义将由相同ip地址的同一ngnix控制器提供服务。这只是一种分离配置的方法,这样您就可以为不同的服务定义不同的注释(如有必要)需要对上面的编辑进行更详细的说明您在第一个入口中错过了入口类的注释,不确定nginx控制器是否会在没有注释的情况下为该入口提供服务。对于注释,它看起来应该可以工作,除非我遗漏了一些东西。因此,如果我添加nginx注释,它不会抛出任何错误,但不会加载任何页面。