我已经配置了kubernetes入口服务,但是它仅在路径为/时才有效
我已经尝试了各种方式为路径设置不同的值,包括:
/*
/servicea
/servicea/
/servicea/*
Run Code Online (Sandbox Code Playgroud)
这是我的入口配置(有效)
- apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: boardingservice
annotations:
ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: my.url.com
http:
paths:
- path: /
backend:
serviceName: servicea-nodeport
servicePort: 80
Run Code Online (Sandbox Code Playgroud)
这是我的节点端口服务
- apiVersion: v1
kind: Service
metadata:
name: servicea-nodeport
spec:
type: NodePort
ports:
- port: 80
targetPort: 8081
nodePort: 30124
selector:
app: servicea
Run Code Online (Sandbox Code Playgroud)
这是我的部署
- 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
Run Code Online (Sandbox Code Playgroud)
如果路径为/,那么我可以执行此操作http://my.url.com/api/ping, 但由于我将有多种服务,因此我想执行以下操作:http : //my.url.com/servicea/api/ ping,但是当我将路径设置为/ servicea时,我得到了404。
我正在使用ingress-nginx入口控制器在AWS上运行kubernetes
任何的想法?
您使用的不是 kubernetes Pod,因为它们是要使用的。一个豆荚
它包含一个或多个相对紧密耦合的应用程序容器——在预容器世界中,它们将在同一物理或虚拟机上执行。
如果您有两个应用程序servicea和serviceb,它们应该在不同的 Pod 上运行:一个用于 Pod servicea,另一个用于serviceb. 这有很多好处:您可以单独部署它们,独立扩展它们等。正如文档所说
Pod 代表一个部署单元:Kubernetes 中应用程序的单个实例,它可能由单个容器或少量紧密耦合并共享资源的容器组成。
可以使用 来创建这些 Pod Deployments,就像您已经在做的那样。这很好,值得推荐。
一旦你的Deployments跑步,你会创建一个不同的Service,将所有的之间平衡流量Pod■对于给定的Deployment。
最后,您要命中servicea或serviceb取决于请求 URL。这可以用 来完成Ingress,就像您尝试的那样,但是将每个路径映射到不同的服务。例如
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
Run Code Online (Sandbox Code Playgroud)
这样,使用 /servicea 路径进入入口控制器的请求将由服务背后的 Pod 提供servicea服务。使用 /serviceb 路径进入入口控制器的请求将由serviceb服务背后的 Pod 提供服务。
对于任何阅读此书的人,我的配置都是正确的(即使是非正统的,如fiunchinho指出的那样),该错误是在容器中运行的Spring Boot应用程序中造成的。我需要更改上下文路径以匹配Ingress路径-当然,我可以在Spring Controller中更改@GetMapping和@PostMapping方法,但是我选择更改上下文路径。
| 归档时间: |
|
| 查看次数: |
9331 次 |
| 最近记录: |