如何使用ingress以便服务可以相互通信



在AWS EKS上,我在一个集群中有三个pod,每个pod都由服务公开。问题是服务无法像这里讨论的那样相互通信。在EKS上进行吊舱间通信时出错。目前尚未得到答复,但进一步搜索表明可以通过Ingress完成。我不知道该怎么做?有人能帮忙吗?

代码:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: test
name: ingress-test
annotations:
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: server-service
port:
number: 8000

我的服务器服务有/api/v1/getAll、/api/v1/updateAll等api。那么,我应该在路径中写些什么?对于数据库服务,我应该做些什么??

假设将来我制作另一个微服务,并打开另一个具有/api/v1/showImage、/api/v1/deleteImage等api的服务,我必须在ingress中写入所有路径,还是它们的另一种工作方式?

Ingress是一个非常好的解决方案,可以用不同的路径在同一域中公开前端和后端(但阅读您的其他问题,它对公开数据库没有帮助(

话虽如此,您不必在Ingress中写入所有路径(除非您愿意(,因为您可以使用pathType: Prefix,因为它已经在您的示例中了。

让我将您链接到文档示例,这些示例解释了它是如何非常好地工作的。基本上,你可以添加一个规则:

path: /api
pathType: Prefix

为了公开/api下的后端和所有子路径。


将第二个后端作为第一个后端放在/api下的情况要复杂得多。如果两个Pod希望在相同的路径上公开,您可能需要以区分它们的方式列出所有子路径。

例如:

支持

/api/v1/foo/listAll
/api/v1/foo/save
/api/v1/foo/delete

后端B

/api/v1/bar/listAll
/api/v1/bar/save
/api/v1/bar/delete

然后可以在子路径/api/v1/foo(前缀(下公开一个,在/api/v1/bar(前缀(上公开另一个。

作为另一种选择,您可能希望使用重写目标规则将后端暴露在不同的路径,而不是它们实际期望的路径。

最新更新