Kubernetes入口路径仅适用于/

Kubernetes入口路径仅适用于/,kubernetes,Kubernetes,我已经配置了kubernetes入口服务,但它仅在路径为/ 我尝试了路径的各种不同值,包括: /* /servicea /servicea/ /servicea/* 这是我的入口配置(有效) 这是我的节点端口服务 - apiVersion: v1 kind: Service metadata: name: servicea-nodeport spec: type: NodePort ports: - port: 80 targetPort

我已经配置了kubernetes入口服务,但它仅在路径为/

我尝试了路径的各种不同值,包括:

/*
/servicea
/servicea/
/servicea/*
这是我的入口配置(有效)

这是我的节点端口服务

- apiVersion: v1
  kind: Service
  metadata:
    name: servicea-nodeport
  spec:
    type: NodePort
    ports:
    - port: 80
      targetPort: 8081
      nodePort: 30124
    selector:
      app: servicea
这是我的部署

- apiVersion: extensions/v1beta1
  kind: Deployment
  metadata:
    name: servicea
  spec:
    replicas: 1
    template:
      metadata:
        name: ervicea
        labels:
          app: servicea
      spec: 
        containers:
        - image: 350329402011.dkr.ecr.eu-west-2.amazonaws.com/servicea
          name: servicea
          ports: 
          - containerPort: 8080
            protocol: TCP              
        - image: 350329402011.dkr.ecr.eu-west-2.amazonaws.com/serviceb
          name: serviceab
          ports: 
          - containerPort: 8081
            protocol: TCP  
如果路径是/那么我可以这样做 但由于我将有多个服务,我想这样做:但是当我将路径设置为/servicea时,我得到了一个404

我正在AWS上运行kubernetes,带有ingress nginx ingress控制器


有什么想法吗?

你不是在使用kubernetes吊舱,因为它们是要使用的

它包含一个或多个相对紧密耦合的应用程序容器——在容器之前的世界中,它们将在同一物理或虚拟机上执行

如果您有两个应用程序,
servicea
serviceb
,它们应该在不同的pod上运行:一个pod用于
servicea
,另一个pod用于
serviceb
。这有很多好处:您可以单独部署它们,独立地扩展它们,等等。 作为

Pod代表一个部署单元:Kubernetes中应用程序的单个实例,可能由单个容器或少量紧密耦合并共享资源的容器组成

可以使用
部署
创建这些吊舱,就像您已经在做的那样。那很好,我推荐

一旦
部署
运行,您将创建一个不同的
服务
,该服务将平衡给定
部署
的所有
Pod
之间的流量

最后,您希望根据请求URL点击
servicea
serviceb
。这可以通过
入口
完成,正如您尝试的那样,但是。比如说

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test
  annotations:
    ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: my.url.com
    http:
      paths:
      - path: /servicea
        backend:
          serviceName: servicea
          servicePort: 80
      - path: /serviceb
        backend:
          serviceName: serviceb
          servicePort: 80

这样,使用/servicea路径发送到入口控制器的请求将由
servicea
服务后面的pod提供服务。而使用/serviceb路径发送到入口控制器的请求将由
serviceb
服务后面的pod提供服务。

对于任何阅读本文的人来说,我的配置是正确的(尽管Fiunchino指出这是非正统的),错误是在容器中运行的Spring Boot应用程序中。我需要更改上下文路径以匹配入口路径-当然,我可以更改Spring控制器中的@GetMapping和@PostMapping方法,但我选择更改上下文路径。

谢谢您的回复。您是对的,我没有以推荐的方式使用容器,但在本例中,容器代表一个整体,必须一起缩放,并且需要一起运行。碰巧,我遇到的错误不是我的Kubernetes配置,而是我的应用程序,我花了一段时间才弄清楚。“错误在我的Spring Boot中”如果我尝试连接到不是我的应用程序怎么办?如何修改根路径?
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test
  annotations:
    ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: my.url.com
    http:
      paths:
      - path: /servicea
        backend:
          serviceName: servicea
          servicePort: 80
      - path: /serviceb
        backend:
          serviceName: serviceb
          servicePort: 80