【发布时间】:2021-01-23 08:44:59
【问题描述】:
我在 Oracle VM Virtualbox 中使用 Minikube 单节点 Kubernetes 集群。节点中的一个 pod 是基于 Next.js 的客户端,其余的 pod 是不同的微服务。假设我的客户端 (Pod1) 在渲染之前需要向身份验证微服务 (Pod2) 发送 HTTP 请求 - 参见图表: Minikube Cluster
下面是我的 ingress-service.yaml 文件:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-service
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/use-regex: 'true'
spec:
rules:
- host: dummyweb.info
http:
paths:
- path: /api/users/?(.*)
backend:
serviceName: auth-srv
servicePort: 3000
- path: /?(.*)
backend:
serviceName: client-srv
servicePort: 3000
您可以看到每个服务都有一个特定的路径。因此,我想将 HTTP 请求从客户端(Pod1)发送到 Ingress Service,然后 Ingress 将请求重新路由到适当的服务,具体取决于路径。换句话说,居住在 Pod1 中的客户端将使用以下 URL 通过 Ingress Service 向居住在 Pod2 中的身份验证服务发送 HTTP GET 请求:
http://<ingress-service-url>/api/users/....
我需要弄清楚 Ingress 服务的 URL 是什么。
我启用了 NGINX Ingress 控制器:
minikube addons enable ingress
我验证了 NGINX Ingress 控制器正在运行:
kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-f9fd979d6-hfnfj 1/1 Running 5 45h
etcd-minikube 1/1 Running 5 45h
ingress-nginx-admission-create-dkthv 0/1 Completed 0 23h
ingress-nginx-admission-patch-4gtth 0/1 Completed 0 23h
ingress-nginx-controller-789d9c4dc-qdqxv 1/1 Running 3 23h
kube-apiserver-minikube 1/1 Running 5 45h
kube-controller-manager-minikube 1/1 Running 5 45h
kube-proxy-sr6pt 1/1 Running 5 45h
kube-scheduler-minikube 1/1 Running 5 45h
storage-provisioner 1/1 Running 11 45h
然后,我正在检查 kube-system 命名空间中有哪些服务可用:
kubectl get services -n kube-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller-admission ClusterIP 10.97.5.35 <none> 443/TCP 24h
kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 45h
我假设 Ingress 服务的内部 URL 是:
http://ingress-nginx-controller-admission.kube-system.svc.cluster.local
正如我们在上面看到的,ingress-nginx-controller-admission 服务只公开了 443 端口,所以在 HTTP 请求中我收到以下错误:
Server Error
Error: connect ETIMEDOUT 10.97.5.35:80
This error happened while generating the page. Any console logs will be displayed in the terminal window.
Call Stack
<unknown> (Error: connect ETIMEDOUT
10.97.5.35 (80)
TCPConnectWrap.afterConnect [as oncomplete]
net.js (1145:16)
- 这是在 Minikube 中访问 Ingress 服务的正确内部 URL 吗?
- 如果是,如何打开80端口?
我对直接连接到身份验证服务不感兴趣。
【问题讨论】:
标签: kubernetes kubernetes-ingress minikube