我正在将 CQRS 模式 用于处理销售的 REST 服务,如下图所示。 (问题集中在 REST 服务上。)
在 K8S 上我有:
两者都在相同的resource上运行:销售。自然的 URL 映射是:
mydomain.com/api/sales/*
上的GET 端点应该转到第一个 pod.
mydomain.com/api/sales/*
上的 POST 和 PUT 端点应该转到第二个 pod。
Service
和
Deployment
。然后我创建一个
Ingress
定义来将请求路由到服务:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- host: mydomain.com
http:
paths:
- path: /api/sales
pathType: Prefix
backend:
service:
name: sales-queries-service
port:
name: 80
- path: /api/sales
pathType: Prefix
backend:
service:
name: sales-commands-service
port:
name: 80
ingressClassName: ingress-nginx
问题/api/sales
到两个不同服务的映射。因此,它是不确定的。入口规范可以允许 HTTP 方法的规范,这是许多人想要的
特性。事实上,当我询问 ChatGPT 时,它建议将这个片段添加到我的 ingress yaml 中,但不幸的是,它是一个不存在的参数......然而。
httpMethods:
- GET
在K8S集群中(不安装API网关产品)是否有其他选项可以指定路由?
例如,您可能希望对 /health 端点进行 GET 请求以进行健康检查。
或者,如果您确实想对写端执行一些特定的 READ 查询,是的,当您需要立即一致的答案时,对于某些特定场景,这实际上是可以的。
正如格雷格所说:
“你的聚合状态 IS 只是一个读取模型,它的生命周期通常很短,用于处理事务” https://twitter.com/gregyoung/status/1275467796177137670
这里的关键是要敏捷,灵活,不要太严格。
Http方法路由的IngressRoutes。
因此您可以 Method() 规则将您的请求指向所需的服务。