外部服务的 Kubernetes 入口规则

2023-12-02

这个问题类似于question但这更多的是围绕可以配置的规则中的路径。

入口应该能够处理内部服务和外部服务。外部服务的 URL 应该类似于http://主机名:80/es。当用户点击此 url 时,应将其重定向到外部服务。

服务定义和入口规则配置如下,但会导致 404。 我哪里出错了?

入口规则

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: external-service
  annotations:
    kubernetes.io/ingress.class: “nginx”
    nginx.ingress.kubernetes.io/ingress.class: “nginx”
    nginx.ingress.kubernetes.io/ssl-redirect: “false”
spec:
  rules:
  - host:
    http:
      paths:
      - backend:
          serviceName: external-ip
          servicePort: 80
        path: /es

服务和端点定义

apiVersion: v1
kind: Service
metadata:
  name: external-ip
spec:
  ports:
  - name: app
    port: 80
    protocol: TCP
    targetPort: 80
---
apiVersion: v1
kind: Endpoints
metadata:
  name: external-ip
subsets:
- addresses:
  - ip: <ip to external service>
  ports:
  - name: app
    port: 80
    protocol: TCP

当我尝试使用 URL 时它有效http://主机名:80以及以下入口规则。请注意入口规则中路径的差异。

apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: external-service
      annotations:
        kubernetes.io/ingress.class: “nginx”
        nginx.ingress.kubernetes.io/ingress.class: “nginx”
        nginx.ingress.kubernetes.io/ssl-redirect: “false”
    spec:
      rules:
      - host:
        http:
          paths:
          - backend:
              serviceName: external-ip
              servicePort: 80
            path: /

有一项服务可以将我的请求回显给我:https://postman-echo.com/,以后会有用的。 这是它的 IP,它将模拟您的外部服务:

$ dig postman-echo.com +short
107.23.20.188

其工作原理如下:

$ curl 107.23.20.188/get | jq
{
  "args": {},
  "headers": {
    "x-forwarded-proto": "http",
    "x-forwarded-port": "80",
    "host": "107.23.20.188",
    "x-amzn-trace-id": "Root=1-5ebced9c-941e363cc28bf3529b8e7246",
    "user-agent": "curl/7.52.1",
    "accept": "*/*"
  },
  "url": "http://107.23.20.188/get"
}

正如你所看到的,它向我发送了一个 json,其中包含我发送给它的所有标头,最重要的是 - 带有它接收的路径的 url。

这是我使用的入口 yaml:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: external-service
  annotations:
    #kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  rules:
  - host:
    http:
      paths:
      - backend:
          serviceName: external-ip
          servicePort: 80
        path: /es/(.*)

服务和端点定义与您的相同,但端点 IP 除外。这里我使用了107.23.20.188(postman-echo IP)。

现在让我们尝试通过 nginx 发送一些请求,但首先让我们检查入口 ip 是什么:

$ kubectl get ingress
NAME               HOSTS   ADDRESS         PORTS   AGE
external-service   *       192.168.39.96   80      20h

ip是192.168.39.96及其私有 IP,因为我在 minikube 上运行它,但这应该不重要。

$ curl -s 192.168.39.96/es/get
{
  "args": {},
  "headers": {
    "x-forwarded-proto": "http",
    "x-forwarded-port": "80",
    "host": "192.168.39.96",
    "x-amzn-trace-id": "Root=1-5ebcf259-6331e8c709656623f1a94ed4",
    "x-request-id": "d1545d1e8764da3cf57abb143faac4fb",
    "x-forwarded-host": "192.168.39.96",
    "x-original-uri": "/es/get",
    "x-scheme": "http",
    "user-agent": "curl/7.52.1",
    "accept": "*/*"
  },
  "url": "http://192.168.39.96/get"
}

如你所见,我正在发送路径请求/es/get并且 echo 服务器正在接收/get.


我在写这个答案时注意到的一件事是(也许它只是复制粘贴错误,但是)注释中的引号不同于"这可能导致 nginx 没有按应有的方式处理注释。我的情况是出于某种原因,当我复制粘贴你的 yaml 时,它正在工作,但它没有你的注释,所以这可能是我之前没有注意到它的原因。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

外部服务的 Kubernetes 入口规则 的相关文章

随机推荐

  • 如何在android上解析xml文件

    android 有一些 dom sax 解析器吗 例如 xml 文件的 a b b a
  • 如何在 Spring Boot 控制器中获取主机 url?

    我想为我的主页生成动态 URL 如何在 Spring Boot 应用程序中获取主机 URL 获取主机地址 经验 https localhost 8080 您可以使用ServletUriComponentsBuilder import org
  • Android:具有多个可点击元素的 ListView 元素

    I ve a ListView其中列表中的每个元素都包含一个 TextView 和两个不同的 Button 像这样的东西 ListView ImageView Text CheckBox Button ImageView Text Chec
  • 纯 JavaScript/jQuery/HTML 验证码

    有人可以给我发一个链接 或者给我提供一个纯 Javascript jQuery 验证码的示例吗 因为我可以看到很多 PHP C 后端的示例 但我只需要 Javascript 谢谢 我认为这不是一个好主意 因为如果在客户端 js 中进行验证
  • Python 调度程序与循环 + 睡眠

    以下是 蟒蛇计划 from time import time sleep from sched import scheduler def daemon local handler print hi local handler enter 3
  • Python 整数到字母的成绩问题

    我正在尝试解决这段代码中的错误 import time while1 True def grader z if z gt 0 or z lt 59 return F elif z gt 60 or z lt 62 return D elif
  • 在 web.xml 中包含文件

    我正在为 JEE5 Web 服务编写单元测试 Web 服务的行为取决于在web xml文件 因此我想分割我的web xml分为恒定部分和在测试运行之间变化的部分 为了看看这是否真的可能 我尝试看看是否可以将welcome file list
  • 代码不断超时

    因此 我们得到的这组代码由于某种原因一直超时 它运行的不是存储过程 因为它运行良好 另外 如果我们从 C 代码中删除该参数 代码就会运行 该参数不断中断 导致超时 我们无法找出原因 c public static PTWViewList G
  • 用于提取两个指定行之间的行的批处理脚本

    我有一个文本文件 想使用 Windows 批处理脚本提取两个指定行之间的所有行 第 1 行 FILE FORMAT ADS 第2行 VERSION 1 0 LineX 父 子 IsPrimary 该行以 开头并且很长 LineY Prope
  • 空字符串的内存表示

    空字符串如何存储在内存内部 我正在考虑一个空字符串内存表示 但无法完全理解它 它有特定的 ASCII 值吗 空字符串到底是什么 A String对象是一个JavaObject和其他人一样 它是一个具有长度属性的对象 最终作为 Java 对象
  • 如何在matplotlib上生成一系列直方图?

    我想生成一系列直方图 如下所示 上面的可视化是在张量流中完成的 但我想在 matplotlib 上重现相同的可视化 编辑 使用 SpghttCd建议的plt fill Between 我有以下代码 colors cm OrRd r np l
  • 如何通过 jQuery 将文件发送到 php?

    我尝试通过 jQuery 将文件发送到 PHP 文件进行处理
  • php preg_replace - 保留指定字符+外语字母[重复]

    这个问题在这里已经有答案了 我需要一个从字符串中删除所有字符 未在模式中列出 但保留外语字母 的函数 我知道 preg replace 有 p 模式 但由于某种原因我无法让它工作 我使用这个函数来删除字符串中的所有垃圾 main conte
  • 动态图片绑定vue

    我想做与这里相同的事情 但我想使用 images sample 作为参数 例如props images sample
  • Schema.org:使用什么,微数据还是 JSON-LD?

    数据标记Schema org对于 Google Yahoo Bing 和 Yandex 等搜索网站来说 片段非常适合 然而 我认为大多数网站管理员都使用微数据 但几乎从不使用JSON LD 最近了解了JSON LD 有一些疑惑 我可以在没有
  • SQL:如何按两列的唯一组合进行分组?

    Context A table message有列from user id and to user id 用户应该看到最近的对话以及显示的最后一条消息 一个对话由多条消息组成 这些消息具有相同的用户 ID 组合 用户发送消息 用户接收消息
  • Python 相当于 MATLAB 的“ismember”函数

    经过多次尝试优化代码后 最后一个资源似乎是尝试使用多个内核运行下面的代码 我不确切知道如何转换 重新构造我的代码 以便它可以使用多个内核运行得更快 如果我能获得实现最终目标的指导 我将不胜感激 最终目标是能够针对数组 A 和 B 尽可能快地
  • 在 JavaScript 中用正则表达式替换字符串

    一个特定的正则表达式现在困扰着我 我只是想更换范围 100像这样的字符串 var string commonstringblabla b range 100 b stringandsoon with commonstringblabla b
  • Git 预提交挂钩

    我是 git hooks 的新手 我无法理解下面的预提交挂钩 谁能告诉我这是如何工作的 这里我怀疑 grep 将如何在提交的文件中发生 因为我们不会将这些文件带到任何地方 抱歉 如果我问错了问题 但请帮助我理解 git hooks usr
  • 外部服务的 Kubernetes 入口规则

    这个问题类似于question但这更多的是围绕可以配置的规则中的路径 入口应该能够处理内部服务和外部服务 外部服务的 URL 应该类似于http 主机名 80 es 当用户点击此 url 时 应将其重定向到外部服务 服务定义和入口规则配置如