无法从集群内访问入口服务

Can not access ingress service from within cluster

我是 kubernetes 的新手,我在 linux mint 20 上安装了 minikube。 我正在尝试使用 nextjs 实现服务器端渲染,我已经使用 helm 安装了 ingress-nginx。

摄取-service.yaml :

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-service
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/use-regex: "true"
spec:
  rules:
    - host: example.dev
      http:
        paths:
          - backend:
              serviceName: users-srv
              servicePort: 4000
            path: /api/users/?(.*)

          - backend:
              serviceName: ui-srv
              servicePort: 3000
            path: /?(.*)

在下一个 js 应用程序中 ui 我想访问入口控制器以便从服务器端进行 api 调用。我试过了:

axios.get('http://ingress-nginx-controller-admission/api/users/currentuser')

axios.get('http://ingress-nginx-controller/api/users/currentuser')

axios.get('http://ingress-service/api/users/currentuser')

但没有任何效果。

kubctl 获取服务:

 NAME                                 TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)                      AGE 
ingress-nginx-controller             LoadBalancer   10.107.45.123    172.42.42.100   80:31205/TCP,443:32568/TCP   80m 
ingress-nginx-controller-admission   ClusterIP      10.111.229.112   <none>          443/TCP                      80m 
kubernetes                           ClusterIP      10.96.0.1        <none>          443/TCP                6d1h 
ui-srv                               ClusterIP      10.99.20.51      <none>          3000/TCP                     89s 
users-mongo-srv                      ClusterIP      10.103.187.200   <none>          27017/TCP              89s 
users-srv                            ClusterIP      10.99.15.244     <none>          4000/TCP                     89s

谁能帮帮我? 提前致谢...

入口旨在处理集群的外部流量,因此,它期望请求到达您指定的域(又名 example.dev)

要从 Pod 内部访问您的 API,您绝对应该直接使用 Ingress 提供的服务,例如 users-srvui-srv

如果你真的想联系入口而不是服务,你可以尝试一些事情:

  • 使 example.dev 指向 LoadBalancer IP 地址,例如将其添加到集群节点的 /etc/hosts 应该可以工作 8,甚至在 Pod 内部)。但是请注意,这意味着在您只能使用服务名称访问服务时需要通过很长的路径访问服务。

  • 从您的规则中删除主机参数,这意味着服务通常应在 nginx-controller 的 IP 地址上提供,这应该使使用 ingress-nginx-controller 可以按预期工作。并非所有入口控制器都支持此功能,但它可以工作。