gpt4 book ai didi

kubernetes - 通过入口服务将来自 kubernetes pod 的 http 请求发送到 Minikube 中的另一个 pod

转载 作者:行者123 更新时间:2023-12-05 06:59:55 25 4
gpt4 key购买 nike

我在 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)
  1. 这是访问 Minikube 中 Ingress 服务的正确内部 URL 吗?
  2. 如果是,如何打开80端口?

我对直接连接到身份验证服务不感兴趣。

最佳答案

对于上述问题有一个非常简单的解决方案:

  1. 我假设您已经启用了入口插件。如果不是:minikube addons enable ingress .
  2. 您需要 Helm 来安装 NGINX Ingress Controller:
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm install my-release ingress-nginx/ingress-nginx

在哪里可以替换 my-release随心所欲。在我的例子中,这是 dimi .

  1. 检查默认命名空间中的可用服务:
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
  1. 现在我们有 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com