如何为领事公开入口
how to expose ingress for Consul
我正在尝试将 consul ingress 添加到我的项目中,我正在使用此 GitHub 存储库作为 ui 和 ingress 的文档:here 并且您可以不幸的是,文档中没有入口,有一个 ingressGateways 没有用,因为它不会在 Kubernetes 内部创建入口(它只能将 URL 暴露给外部)
我搜索了很多,有两个可能的选择:
1:为入口创建额外部署
2:创建 consul helm 图表以添加入口部署
(不幸的是我在网上找不到合适的解决方案)
Consul 服务网格的 ingressGateways
config in the Helm chart is for deploying a Consul ingress gateway(由 Envoy 提供支持)。这与 Kubernetes Ingress 不同。
Consul 的入口允许路由到服务网格内的应用程序 运行,并使用 ingress-gateway configuration entry (or in the future using Consul CRDs 进行配置。它无法路由到存在于服务网格外部的端点,例如 Consul 的 API/UI 端点。
如果您需要一个可以路由到网格外部应用程序的通用入口,我建议使用 Ambassador、Traefik 或 Gloo 等解决方案。所有这三个还支持与 Consul 集成以进行服务发现或服务网格。
这是一个示例 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。服务注册包括几个标记,指示 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
header 为 example.com
且路径为 /myapp
的 HTTP 请求将被路由到 web
服务已在 Consul 注册。
示例 curl 命令。
curl --header "Host: example.com" http://127.0.0.1:8000/myapp
这是一个比较基础的例子,适合dev/test。如果您要部署到通常由访问控制列表 (ACL) 保护的生产 Consul 环境中,您将需要定义额外的 Traefik 配置参数。
我正在尝试将 consul ingress 添加到我的项目中,我正在使用此 GitHub 存储库作为 ui 和 ingress 的文档:here 并且您可以不幸的是,文档中没有入口,有一个 ingressGateways 没有用,因为它不会在 Kubernetes 内部创建入口(它只能将 URL 暴露给外部)
我搜索了很多,有两个可能的选择:
1:为入口创建额外部署
2:创建 consul helm 图表以添加入口部署
(不幸的是我在网上找不到合适的解决方案)
Consul 服务网格的 ingressGateways
config in the Helm chart is for deploying a Consul ingress gateway(由 Envoy 提供支持)。这与 Kubernetes Ingress 不同。
Consul 的入口允许路由到服务网格内的应用程序 运行,并使用 ingress-gateway configuration entry (or in the future using Consul CRDs 进行配置。它无法路由到存在于服务网格外部的端点,例如 Consul 的 API/UI 端点。
如果您需要一个可以路由到网格外部应用程序的通用入口,我建议使用 Ambassador、Traefik 或 Gloo 等解决方案。所有这三个还支持与 Consul 集成以进行服务发现或服务网格。
这是一个示例 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。服务注册包括几个标记,指示 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
header 为 example.com
且路径为 /myapp
的 HTTP 请求将被路由到 web
服务已在 Consul 注册。
示例 curl 命令。
curl --header "Host: example.com" http://127.0.0.1:8000/myapp
这是一个比较基础的例子,适合dev/test。如果您要部署到通常由访问控制列表 (ACL) 保护的生产 Consul 环境中,您将需要定义额外的 Traefik 配置参数。