通过 ingress 服务从 kubernetes pod 发送 http 请求到 Minikube 中的另一个 pod

2024-01-07

我在 Oracle VM Virtualbox 中使用 Minikube 单节点 Kubernetes 集群。节点中的一个 Pod 是基于 Next.js 的客户端,其余 Pod 是不同的微服务。假设我的客户端 (Pod1) 需要在渲染之前向身份验证微服务 (Pod2) 发送 HTTP 请求 - 请参阅图表:Minikube集群 https://i.stack.imgur.com/fTzeq.png

以下是我的 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 中的 auth 服务发送 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)
  1. 这是访问 Minikube 中 Ingress Service 的正确内部 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-controllerLoadBalancer 类型的服务。因此,如果您需要处理服务器端渲染 (SSR) 并将 HTTP 请求从一个 pod(运行 Next.js 应用程序的位置)发送到您的一个微服务(在不同的 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) 流量将由入口资源处理,其中我们已经有了与所有传入请求相匹配的规则列表。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 ingress 服务从 kubernetes pod 发送 http 请求到 Minikube 中的另一个 pod 的相关文章

随机推荐

  • 如何从我的硬盘驱动器中打开不在 Outlook 中的 Outlook .msg 文件?

    我到处搜索这个看似简单的任务 但我遇到的所有参考文献要么保存到硬盘驱动器 要么从 Outlook 文件夹中读取 我有以下代码循环遍历硬盘驱动器上文件夹中的文件名 但我不知道如何采用该路径并使用 Outlook 打开它 Dim inPath
  • 尝试和树之间的区别?

    我记得尝试不存储每个节点的全部数据 只存储父节点的后缀 树确实存储了整个数据 但仅根据前缀组织自身 因此尝试变得更小 这使得例如可以很好地压缩字典 这真的是唯一的区别吗 从实际应用程序中我记得尝试在范围查询中更快 甚至还有特殊的 solr
  • 无线电输入验证返回错误[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我已经被困在这个问题上有一段时间了 无法弄清楚为什么单选验证在我当前的项目中不起作用 但如果表单除了单选按钮本身之外没有
  • 错误:“utf8”编解码器无法解码位置 0 中的字节 0x80:起始字节无效

    我正在尝试执行以下操作Kaggle作业 https www kaggle com c word2vec nlp tutorial 我正在使用 gensim 包来使用 word2vec 我能够创建模型并将其存储到磁盘 但是当我尝试加载文件时
  • 将 ConfigurationManager 重定向到另一个文件

    我正在寻找重定向standard Net ConfigurationManager 类到另一个文件 entirely 该路径是在运行时确定的 因此我无法使用 configSource或类似的问题 这不是重复的问题 我已经看过其他问题 我本质
  • 如何将 CMake 输出放入“bin”目录?

    我目前正在构建一个具有插件结构的项目 我正在使用 CMake 来编译该项目 这些插件编译在单独的目录中 我的问题是 CMake 编译并将二进制文件和插件 动态库保存在源的目录结构中 如何让 CMake 将文件保存在类似 bin目录 正如奥列
  • 使用 Xoauth2 对 Gmail smtp 进行身份验证。结果用户名和密码不被接受

    由于最近删除了不太安全的应用程序 https support google com accounts answer 6010255 hl en并不想沿着一条路走下去应用程序密码 https support google com accoun
  • Windows操作系统中是否存在零拷贝?

    Reading 这篇零复制文章 http www ibm com developerworks library j zerocopy Windows 操作系统 服务器 2003 2008 2008 R2 中是否存在零拷贝 是的 它是通过以下
  • Angular:类型错误:无法读取 null 的属性“firstCreatePass”

    将 Angular 更新到版本 10 后 我看到此控制台错误 错误类型错误 无法读取 null 的属性 firstCreatePass 更新之前是不存在的 当使用自定义组件加载视图时会显示它 可能缺少什么 原来是因为我也更新了 ngx cu
  • 在 iPhone X 模拟器的顶部和底部看到黑条

    在 iPhone X 模拟器 GM Seed 中运行我的应用程序时 我注意到两个奇怪的效果 该应用程序不使用全屏空间 顶部和底部区域为黑色 标题栏下方有一个奇怪的白条 有谁知道这里发生了什么以及如何解决这个问题 我在 Interface B
  • 检查 T-SQL 中字符串的起始字符是否按字母顺序排列

    是否可以仅使用 TSQL 检查 varchar 字段的前两个字符是否按字母顺序排列 我需要选择my table只有具有的行my field以两个字母字符开头 我怎样才能实现这个目标 是否可以使用正则表达式 你不需要使用正则表达式 LIKE足
  • 为什么reactjs中的功能组件没有实例?

    In 反应快速入门 https facebook github io react docs refs and the dom html 有关于Refs and Functional Components that 您不能在功能组件上使用 r
  • HTTP 标头值的最大值?

    HTTP 标头是否有可接受的最大允许大小 如果是这样 那是什么 如果不是 这是特定于服务器的内容还是允许任何大小的标头的公认标准 不 HTTP 没有定义任何限制 然而 大多数网络服务器确实限制它们接受的标头的大小 例如在Apache 默认限
  • CSS/HTML:使文本斜体的正确方法是什么?

    是什么correct使文本斜体的方法 我见过以下四种方法 i Italic Text i em Italic Text em span class italic Italic Text span span class footnote It
  • (在Video.js中)如何设置自定义请求标头?

    遇到这个问题后 我根据以下内容编写了一个最小的示例本文档 https github com videojs http streaming hlsxhr
  • 向 Django 管理站点添加忘记密码功能

    如何将忘记密码功能添加到 Django 管理站点 有电子邮件 安全问题选项吗 有可用的插件 扩展吗 它们都是在 django 中构建的 只需添加相关的 url 模式即可 如下 from django contrib auth import
  • 使用 $ 运算符将两个括号链接在一起

    我有这个功能 min max 10 20 max 30 40 我可以将其重写为 min max 10 20 max 30 40 但是还有没有办法解决最后的括号呢 并不是说这还不够好 但我只是不能放弃这个想法 必须有某种方法可以做到这一点 如
  • 休眠序列不存在

    我尝试使用 spring 在我的项目中将 hibernate 从 4 升级到 54 2版本 升级后 当我调用更新方法时 我在堆栈跟踪中发现以下错误 10 53 32 185 ERROR TableStructure 149 could no
  • 在 WebView 中启用长按

    在浏览器中 您可以长按 URL 在我的 WebView 中 你不能 我怎样才能做到你也能做到 我也有同样的问题 不幸的是 我找不到一种方法来显示标准浏览器菜单选项 您必须自己实现每一项 我所做的是将 WebView 注册为上下文菜单acti
  • 通过 ingress 服务从 kubernetes pod 发送 http 请求到 Minikube 中的另一个 pod

    我在 Oracle VM Virtualbox 中使用 Minikube 单节点 Kubernetes 集群 节点中的一个 Pod 是基于 Next js 的客户端 其余 Pod 是不同的微服务 假设我的客户端 Pod1 需要在渲染之前向身