入口和自定义主机名

问题描述 投票:0回答:1

我已经开始研究 k8s,但我在本地工作时遇到了一些问题,我有 2 个应用程序(node+nextjs)+ 1 个数据库(pg),数据库由 docker 提供服务(我使用

host.docker.internal
连接到它),而这 2 个应用程序是 docker 镜像。

k8s非常简单:2个服务+2个部署+1个入口,这是入口文件:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress
  annotations:
    nginx.ingress.kubernetes.io/proxy-buffers-number: "4"
    nginx.ingress.kubernetes.io/proxy-buffer-size: "16k"
spec:
  ingressClassName: nginx
  rules:
    - host: local.api.my-app.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: service-api
                port:
                  number: 4001
    - host: local.my-app.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: service-frontend
                port:
                  number: 3000

local.my-app.com
是nextjs,它正在向api发送请求
http://local.api.my-app.com
服务器端和客户端,在我的
/etc/hosts
中我添加了:

127.0.0.1 local.api.my-app.com
127.0.0.1 local.my-app.com

问题是,当 nextjs 应用程序向

local.api.my-app.com
(服务器端)发送请求时,我收到此错误:

      code: 'ECONNREFUSED',
      syscall: 'connect',
      address: '127.0.0.1',
      port: 80

我想因为在

/etc/hosts
中这个主机名指向本地主机而不是
host.minikube.internal
,但同时在客户端发送请求时我将请求发送到自定义主机名,我该如何解决这个问题?

之前我在入口中使用路径而不是域,一切都工作正常

kubernetes minikube
1个回答
0
投票

我假设您需要从外部访问这两个主机名。

推荐:

您应该考虑在 集群 DNS 中使用来发现集群内部的每个应用程序,而不是在每个 pod 中的

/etc/hosts
文件中进行硬编码。

您的 nextjs 服务 -> service-frontend..svc.cluster.local 您的 API 服务 -> service-api..svc.cluster.local

入口控制器/资源通常仅用于外部访问(集群外部)

© www.soinside.com 2019 - 2024. All rights reserved.