【问题标题】:how to expose ingress for Consul如何为领事公开入口
【发布时间】:2020-10-15 09:50:59
【问题描述】:

我正在尝试将领事入口添加到我的项目中,并且我正在使用这个 GitHub 存储库作为 ui 和入口的文档:here 不幸的是,你可以看到文档中没有入口,有一个ingressGateways 没用,因为它不会在 Kubernetes 内部创建入口(它只能将 URL 暴露给外部)

我搜索了很多,有两种可能的选择:

1:为入口创建额外的部署

2:创建 consul helm chart 添加入口部署

(很遗憾我在网上找不到合适的解决方案)

【问题讨论】:

标签: kubernetes devops kubernetes-helm consul helmfile


【解决方案1】:

这是一个示例 Docker compose 文件,它配置 Traefik 以公开一个名为 web 的入口点,该入口点侦听 TCP 端口 8000,并将 Traefik 与 Consul 的服务目录集成以进行端点发现。

# docker-compose.yaml
---
version: "3.8"
services:
  consul:
    image: consul:1.8.4
    ports:
      - "8500:8500/tcp"
  traefik:
    image: traefik:v2.3.1
    ports:
      - "8000:8000/tcp"
    environment:
      TRAEFIK_PROVIDERS_CONSULCATALOG_CACHE: 'true'
      TRAEFIK_PROVIDERS_CONSULCATALOG_STALE: 'true'
      TRAEFIK_PROVIDERS_CONSULCATALOG_ENDPOINT_ADDRESS: http://consul:8500
      TRAEFIK_PROVIDERS_CONSULCATALOG_EXPOSEDBYDEFAULT: 'false'
      TRAEFIK_ENTRYPOINTS_web: 'true'
      TRAEFIK_ENTRYPOINTS_web_ADDRESS: ":8000"

下面是一个 Consul 服务注册文件,它注册了一个名为 web 的应用程序,该应用程序正在侦听端口 80。服务注册包括几个标签,指示 Traefik 通过名为的入口点向服务 (traefik.enable=true) 公开流量web,并为服务创建关联的路由配置。

service {
  name = "web"
  port = 80
  tags = [
    "traefik.enable=true",
    "traefik.http.routers.web.entrypoints=web",
    "traefik.http.routers.web.rule=Host(`example.com`) && PathPrefix(`/myapp`)"
  ]
}

这可以使用 CLI (consul service register web.hcl) 注册到 Consul。 Traefik 将通过目录集成发现这一点,并根据标签中指定的路由配置进行自我配置。

Traefik 在端口 8000 上收到的带有 Host 标头的 example.com/myapp 路径的 HTTP 请求将被路由到在 Consul 注册的 web 服务。

curl 命令示例。

curl --header "Host: example.com" http://127.0.0.1:8000/myapp

这是一个比较基础的例子,适合开发/测试。如果您要部署到通常由访问控制列表 (ACL) 保护的生产 Consul 环境中,则需要定义额外的 Traefik 配置参数。

【讨论】:

    【解决方案2】:

    Helm 图表中的 ingressGateways 配置用于为 Consul 服务网格部署 Consul ingress gateway(由 Envoy 提供支持)。这与 Kubernetes Ingress 不同。

    Consul 的入口支持路由到在服务网格内运行的应用程序,并使用ingress-gateway 配置条目(或将来使用Consul CRDs)进行配置。它无法路由到存在于服务网格之外的端点,例如 Consul 的 API/UI 端点。

    如果您需要一个可以路由到网格外部应用程序的通用入口,我建议使用诸如 Ambassador、Traefik 或 Gloo 之类的解决方案。所有这三个还支持与 Consul 集成以进行服务发现或服务网格。

    【讨论】:

    • 感谢您的解释,是的,我应该使用 Traefik 作为控制器,问题在于这类任务我总是遵循 Github/hashicorp 网站上的文档,但不幸的是没有模板/示例这个目标
    • 查看本指南以使用 HashiCorp Nomad learn.hashicorp.com/tutorials/nomad/load-balancing-traefik 运行 Traefik。将配置调整为 docker-compose 或类似文件应该很简单。我有一个可以分享的例子,但不幸的是它不适合 cmets。
    猜你喜欢
    • 1970-01-01
    • 2020-01-23
    • 2011-10-07
    • 2019-03-06
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 2021-07-25
    • 1970-01-01
    相关资源
    最近更新 更多