use*_*699 5 kubernetes kubernetes-ingress kubernetes-networking
我的系统内有许多令人安心的服务
我们的许多Restful 服务都会相互同步调用(因此不是使用消息队列异步调用)
我们还有许多使用这些服务的 UI(胖客户端或 Web 应用程序)
我们可以像这样定义一个简单的 k8s 清单文件
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
Run Code Online (Sandbox Code Playgroud)
我真的不确定集群上的静态服务相互通信的最佳方式是什么。
这可以通过一个例子进一步说明
| 呼叫者 | 接收者 | 示例网址 | |
|---|---|---|---|
| 用户界面 | 集群上 | http://clusterip/orders | UI 将使用集群 IP 和入口规则来访问订单管理器 |
| 集群外服务 | 集群上 | http://clusterip/orders | 就像用户界面一样 |
| 集群上 | 集群上 | http://clusterip/orders | 可以像上面的方法一样使用入口规则 |
| 集群上 | 集群上 | http://orderManager-service:50588/ | 可以直接使用服务名和端口 |
我在上面写了几次cluster ip ,但在现实生活中,我们把一些东西放在上面,所以有一个友好的名称,比如 http://mycluster/orders
因此,当调用者和接收者都在集群上时,是
使用NodePort 服务名称的好处之一是您不必更改基本 URL。
小智 3
这取决于您是否希望请求通过入口控制器路由。
\n发送到 Ingress 资源中配置的完整 URL 的请求将由 Ingress 控制器处理。控制器本身 \xe2\x80\x94 NGINX 在这种情况下 \xe2\x80\x94 将把请求代理到服务。然后请求将被路由到 Pod。
\n将请求直接发送到 Service\xe2\x80\x99s URL 只会跳过您的入口控制器。请求直接路由到 Pod。
\n两个选项之间的权衡取决于您的设置。
\n通过入口控制器发送请求会增加请求延迟和资源消耗。如果您的入口控制器除了路由请求之外什么都不做,我建议直接向服务发送请求。
\n但是,如果您将入口控制器用于其他目的,例如身份验证、监视、日志记录或跟踪,那么您可能更希望控制器处理内部请求。
\n例如,在我的一些集群上,我使用 NGINX 入口控制器来测量请求延迟并跟踪 HTTP 响应状态。我通过入口控制器在同一集群中运行的应用程序之间路由请求,以便获得该信息。为了提高可观察性,我付出了增加延迟和资源使用的成本。
\n在您的情况下,这种权衡是否值得取决于您。如果您的入口控制器只做基本路由,那么我的建议是完全跳过它。如果它做得更多,那么您需要权衡通过它路由请求的利弊。
\n| 归档时间: |
|
| 查看次数: |
613 次 |
| 最近记录: |