4

我在我们的系统中有许多宁静的服务

  • 有些是我们Kubernetes集群中的
  • 其他人在遗留基础设施上并托管在虚拟机上

我们的许多RESTful 服务相互之间进行同步调用(因此不能异步使用消息队列)

我们还有许多使用这些服务的 UI(胖客户端或 Web 应用程序)

我们可以像这样定义一个简单的 k8s 清单文件

  1. 服务
  2. 入口
apiVersion: v1
kind: Pod
metadata:
  name: "orderManager"
spec:
  containers:
    - name: "orderManager"
      image: "gitlab-prem.com:5050/image-repo/orderManager:orderManager_1.10.22"
---
apiVersion: v1
kind: Service
metadata:
  name: "orderManager-service"
spec:
  type: NodePort
  selector:
    app: "orderManager"
  ports:
    - protocol: TCP
      port: 50588
      targetPort: 50588
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: orderManager-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - http:
        paths:
          - path: /orders
            pathType: Prefix
            backend:
              service:
                name: "orderManager-service"
                port:
                  number: 50588

我真的不确定集群上的宁静服务相互交谈的最佳方式是什么。

  • 集群外的调用者似乎只有一条好路由,它使用由入口规则构建的 url
  • 集群内的两个选项

这可以用一个例子来进一步说明

呼叫者 接收者 示例网址
用户界面 在集群上 http://clusterip/orders UI 将使用集群 ip 和入口规则到达订单管理器
集群外服务 在集群上 http://clusterip/orders 就像用户界面一样
在集群上 在集群上 http://clusterip/orders 可以使用类似上述方法的入口规则
在集群上 在集群上 http://orderManager-service:50588/ 可以直接使用服务名和端口

我在上面写了几次集群 ip ,但在现实生活中,我们把一些东西放在了顶部,所以有一个友好的名字,比如 http://mycluster/orders

所以当调用者接收者在集群上时

  • 使用集群外的服务和应用程序也使用的入口规则
  • 使用入口规则中使用的节点端口服务名称
  • 或者也许是别的东西!

使用nodeport 服务名称的一个好处是您不必更改基本 URL。

  • 入口规则将额外元素附加到路由(在上述情况下为orders
  • 当我将 RESTful 服务从旧版迁移到 k8s 集群时,它会增加复杂性
4

1 回答 1

2

这取决于您是否希望通过入口控制器路由请求。

发送到 Ingress 资源中配置的完整 URL 的请求将由 Ingress 控制器处理。控制器本身——在这种情况下是 NGINX——将把请求代理到服务。然后请求将被路由到 Pod。

将请求直接发送到服务的 URL 只会跳过您的入口控制器。请求直接路由到 Pod。

两个选项之间的权衡取决于您的设置。

通过入口控制器发送请求会增加请求延迟和资源消耗。如果你的入口控制器除了路由请求什么都不做,我建议直接向服务发送请求。

但是,如果您将入口控制器用于其他目的,例如身份验证、监控、日志记录或跟踪,那么您可能更喜欢控制器处理内部请求。

例如,在我的一些集群上,我使用 NGINX 入口控制器来测量请求延迟并跟踪 HTTP 响应状态。我通过入口控制器在同一集群中运行的应用程序之间路由请求,以便获得该信息。为了提高可观察性,我付出了增加延迟和资源使用的成本。

在您的情况下,权衡是否值得取决于您。如果您的入口控制器仅执行基本路由,那么我的建议是完全跳过它。如果它做得更多,那么您需要权衡通过它路由请求的利弊。

于 2021-11-17T06:16:05.747 回答