【问题标题】:How to call a golang API(clusterIP svc) from angular(clusterIP svc) in k8s with ingress present?如何在存在入口的k8s中从角度(clusterIP svc)调用golang API(clusterIP svc)?
【发布时间】:2022-07-08 20:23:25
【问题描述】:

go 版本:1.17
ng 版本:9

这个项目由后端 svc 和部署、前端 svc 和部署组成, 入口

后端服务:

service/fiber-service   ClusterIP   10.105.244.88   <none>        3000/TCP   43m

入口文件:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-lite-srv
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/use-regex: "true"

spec:
  rules:
    - host: lite.com
      http:
        paths:
          - path: /api/?(.*)
            pathType: Prefix
            backend:
              service:
                name: fiber-service
                port:
                  number: 3000 # service port
          - path: /?(.*) #need to check order
            pathType: Prefix
            backend:
              service:
                name: forms-service
                port:
                  number: 80 # service port

目前我正在使用 HTTPClient 并在做

 testUrl(url: string): Observable<any> {
    return this._http.get(url)
  }

以上代码来自我的前端,在按钮点击事件中调用

现在,在隧道之后,我可以在访问 http://lite.com 时访问前端 我可以通过http://lite.com/api/v1 或其他方式进行 API 调用

我想要实现的是通过服务名称调用后端 API
例如:fiber-service:3000/api/v1 作为上述函数的 url
基本上是 clusterIP 到 clusterIP 服务而不涉及 Ingress

这是可能的还是入口会干扰? 性能差异会是什么? (因为这是内部沟通)

【问题讨论】:

  • 是的,有可能,它们生活在同一个命名空间中,对吧?
  • 是的,默认命名空间
  • 不可能,因为前端代码正在客户端计算机上运行,​​而不是在您的服务器上。
  • 前端代码在浏览您页面的人的浏览器中运行。
  • ^^^ 您的前端代码在使用您的网络应用程序的用户的浏览器中运行。如果您尝试向后端服务发出请求,用户计算机将不知道将该请求路由到何处,因为该主机没有 DNS 条目。

标签: angular docker kubernetes kubernetes-ingress


【解决方案1】:

我发现这是不可能的,尤其是当一个前端有客户端渲染

所以,问题是当用户访问网页时,它会在客户端系统上呈现。因此,我们无法找到fiber-service:3000/api/v1,因此必须通过入口调用它,即http://lite.com/api/v1

如果是服务端渲染,那么就可以调用服务了。

【讨论】:

    猜你喜欢
    • 2022-12-12
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-14
    相关资源
    最近更新 更多