无法从集群内访问入口服务
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-srv
或 ui-srv
。
如果你真的想联系入口而不是服务,你可以尝试一些事情:
使 example.dev
指向 LoadBalancer IP 地址,例如将其添加到集群节点的 /etc/hosts
应该可以工作 8,甚至在 Pod 内部)。但是请注意,这意味着在您只能使用服务名称访问服务时需要通过很长的路径访问服务。
从您的规则中删除主机参数,这意味着服务通常应在 nginx-controller 的 IP 地址上提供,这应该使使用 ingress-nginx-controller
可以按预期工作。并非所有入口控制器都支持此功能,但它可以工作。
我是 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-srv
或 ui-srv
。
如果你真的想联系入口而不是服务,你可以尝试一些事情:
使
example.dev
指向 LoadBalancer IP 地址,例如将其添加到集群节点的/etc/hosts
应该可以工作 8,甚至在 Pod 内部)。但是请注意,这意味着在您只能使用服务名称访问服务时需要通过很长的路径访问服务。从您的规则中删除主机参数,这意味着服务通常应在 nginx-controller 的 IP 地址上提供,这应该使使用
ingress-nginx-controller
可以按预期工作。并非所有入口控制器都支持此功能,但它可以工作。