- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Oracle VM Virtualbox 中使用 Minikube 单节点 Kubernetes 集群。节点中的一个 pod 是基于 Next.js 的客户端,其余 pod 是不同的微服务。假设我的客户端 (Pod1) 需要在渲染之前向 auth 微服务 (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
可以看到每个服务都有一个特定的路径。因此,我想将来自客户端 (Pod1) 的 HTTP 请求发送到 Ingress Service,然后 Ingress 根据路径将请求重新路由到适当的服务。换句话说,居住在 Pod1 中的客户端将使用以下 URL 通过 Ingress Service 向居住在 Pod2 中的 auth 服务发送 HTTP GET 请求: http://<ingress-service-url>/api/users/....
我需要弄清楚 Ingress 服务的 URL 是什么。
我启用了 NGINX Ingress Controller :
minikube addons enable ingress
我验证了 NGINX Ingress Controller 正在运行:
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 addons enable ingress
.helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm install my-release ingress-nginx/ingress-nginx
在哪里可以替换 my-release
随心所欲。在我的例子中,这是 dimi
.
kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
auth-mongo-srv ClusterIP 10.110.44.53 <none> 27017/TCP 46m
auth-srv ClusterIP 10.106.154.84 <none> 3000/TCP 46m
client-srv ClusterIP 10.108.31.36 <none> 3000/TCP 46m
dimi-ingress-nginx-controller LoadBalancer 10.102.12.127 <pending> 80:31599/TCP,443:32639/TCP 34m
dimi-ingress-nginx-controller-admission ClusterIP 10.102.171.116 <none> 443/TCP 34m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 58m
nats-srv ClusterIP 10.110.239.15 <none> 4222/TCP,8222/TCP 46m
orders-mongo-srv ClusterIP 10.101.67.81 <none> 27017/TCP 46m
orders-srv ClusterIP 10.103.29.63 <none> 3000/TCP 46m
tickets-mongo-srv ClusterIP 10.107.137.160 <none> 27017/TCP 46m
tickets-srv ClusterIP 10.106.203.231 <none> 3000/TCP 46m
dimi-ingress-nginx-controller
LoadBalancer 类型的服务。因此,如果您需要处理服务器端渲染 (SSR) 并从一个 pod(您的 Next.js 应用程序正在运行的位置)发送 HTTP 请求到您的一个微服务(在不同的 pod 中运行),在页面之前甚至呈现,您可以将请求发送到 http://dimi-ingress-nginx-controller.default.svc.cluster.local/<path_set_in_the_Ingress_Resource>
.例如,如果我的 Next.js 应用程序需要向我的 Auth 微服务发送请求,则 URL 将为:http://dimi-ingress-nginx-controller.default.svc.cluster.local/api/users
.这样,HTTP(S) 流量将由 Ingress 资源处理,我们已经有一个匹配所有传入请求的规则列表。关于kubernetes - 通过入口服务将来自 kubernetes pod 的 http 请求发送到 Minikube 中的另一个 pod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64260214/
我是一名优秀的程序员,十分优秀!