在K8S集群中,我应该始终调用入口规则或节点端口服务名称吗? [英] Within a k8s cluster Should I always call the Ingress Rule Or Node Port Service Name?

查看:10
本文介绍了在K8S集群中,我应该始终调用入口规则或节点端口服务名称吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的系统中有许多REST式服务

  • 某些是Kubernetes集群中的
  • 其他位于旧版基础架构上,托管在VM的

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

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

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

  1. Pod
  2. 服务
  3. 入口
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

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

  • 对于集群外的呼叫者来说,似乎只有一个好的途径,那就是使用由入口规则构建的URL
  • 群集内的两个选项

这可能会用一个例子进一步说明

呼叫方 接收方 示例URL
用户界面 集群 http://clusterip/orders 用户界面将使用集群IP和入口规则到达订单管理器
服务脱离集群 集群 http://clusterip/orders 就像用户界面
集群 集群 http://clusterip/orders 可以使用类似上述方法的入口规则
集群 集群 http://orderManager-service:50588/ 可以直接使用服务名称和端口

我在上面写了几次集群IP,但在现实生活中,我们将一些东西放在前面,因此有一个友好的名称,如http://mycluster/orders

那么当调用方接收方都在群集上时

  • 使用入口规则集群外的服务和应用也使用入口规则
  • 使用入口规则中使用的节点端口服务名称
  • 或者其他东西!

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

  • 入口规则额外元素追加到路径(在上例中为Orders)
  • 当我将REST风格的服务从遗留迁移到K8S集群时,会增加复杂性

推荐答案

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

发送到您的入口资源中配置的完整URL的请求将由您的入口控制器处理。控制器本身--在本例中为Nginx--将请求代理给服务。然后,该请求将被路由到Pod。

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

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

通过入口控制器发送请求会增加请求延迟和资源消耗。如果您的入口控制器除了路由请求之外不执行其他操作,我建议您将请求直接发送到服务。

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

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

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

这篇关于在K8S集群中,我应该始终调用入口规则或节点端口服务名称吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆