0

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

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

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

2:创建consul helm chart添加ingress deploy

(不幸的是,我在互联网上找不到合适的解决方案)

4

2 回答 2

1

ingressGatewaysHelm 图表中的配置用于为 Consul 服务网格部署 Consul入口网关(由 Envoy 提供支持)。这与 Kubernetes Ingress 不同。

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

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

于 2020-10-15T15:24:48.663 回答
1

这是一个示例 Docker 组合文件,它配置 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 的应用程序。服务注册包括几个标签,指示 Traefiktraefik.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 上接收到的 HTTP 请求,Host标头为example.com,路径为 ,/myapp将被路由到在webConsul 注册的服务。

示例 curl 命令。

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

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

于 2020-10-15T17:05:48.723 回答