我已经配置了kubernetes入口服务,但它仅在路径为/
时才有效我为路径尝试了各种不同的值,包括:
/*
/servicea
/servicea/
/servicea/*
这是我的入口配置(有效)
- 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
这是我的nodeport服务
- 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
如果路径是/那么我可以这样做http://my.url.com/api/ping 但是因为我将有多个服务,我想这样做:http://my.url.com/servicea/api/ping但是当我将路径设置为/ servicea时,我得到了404.
我在AWS上使用ingress-nginx入口控制器运行kubernetes
有什么想法吗?
答案 0 :(得分:4)
您没有使用kubernetes Pod,因为它们是打算使用的。 A Pod
它包含一个或多个相对紧密耦合的应用程序容器 - 在预容器世界中,它们将在同一物理或虚拟机上执行。
如果您有两个应用servicea
和serviceb
,则它们应该在不同的Pod上运行:servicea
的一个窗格和serviceb
的另一个窗格。这有许多好处:您可以单独部署它们,独立扩展它们等。
作为docs say
Pod表示部署单位:Kubernetes中的单个应用程序实例,可能包含单个容器或少量紧密耦合且共享资源的容器。
可以使用Deployments
创建这些Pod,就像您已经在做的那样。这很好并且推荐。
运行Deployments
后,您需要创建一个不同的Service
来平衡给定Pod
的所有Deployment
之间的流量。< / p>
最后,您要点击servicea
或serviceb
,具体取决于请求网址。这可以通过Ingress
完成,正如您尝试的那样,但是mapping each path to different services。例如
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提供。
答案 1 :(得分:4)
对于读这篇文章的人来说,我的配置是正确的(即使非正统,正如fiunchinho所指出的那样),错误发生在我的Spring Boot应用程序中,这些应用程序在容器中运行。我需要更改上下文路径以匹配Ingress路径 - 我当然可以更改Spring Controller中的@GetMapping和@PostMapping方法,但我选择更改上下文路径。