#kubernetes #devops #kubernetes-helm #consul #helmfile
#kubernetes #kubernetes-рулевой #консул
Вопрос:
Я пытаюсь добавить consul ingress в свой проект, и я использую это репозиторий GitHub в качестве документа для пользовательского интерфейса и ingress: здесь, и, как вы можете видеть, к сожалению, в документе нет ingress, есть ingressGateways, который бесполезен, потому что не создает ingress внутри Kubernetes (он может просто выставлятьURL-адрес извне)
Я много искал, есть 2 возможных варианта:
1. создайте дополнительное развертывание для ingress
2. создайте диаграмму consul helm для добавления ingress deploy
(к сожалению, я не смог найти подходящее решение для этого в Интернете)
Комментарии:
1. Вам придется написать свой собственный объект ingress на yaml. Точное решение зависит от того, какой входной контроллер вы используете. Для traefik здесь есть подсказка: github.com/KnowledgeHut-AWS/vault-on-k8s/blob/refactored /… но, это незакончено.
2. да, но это не для consul @SoftwareEngineer
3. Для общих входов в Kubernetes вам нужно будет следовать рекомендациям @SoftwareEngineer. Однако, после самого короткого поиска, похоже, что Consul немного нарушает шаблон и использует службу Kubernetes с CRDS. Может быть, это поможет с вариантом # 1?
Ответ №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`) amp;amp; PathPrefix(`/myapp`)"
]
}
Это можно зарегистрировать в Consul с помощью CLI ( consul service register web.hcl
). Затем Traefik обнаружит это с помощью интеграции с каталогом и настроит себя на основе конфигурации маршрутизации, указанной в тегах.
HTTP-запросы, полученные Traefik на порт 8000 с Host
заголовком example.com
и путем /myapp
, будут перенаправлены на web
службу, которая была зарегистрирована в Consul.
Пример команды curl.
curl --header "Host: example.com" http://127.0.0.1:8000/myapp
Это относительно простой пример, который подходит для разработки / тестирования. Вам нужно будет определить дополнительные параметры конфигурации Traefik, если вы развертываете в рабочей среде Consul, которая обычно защищена списками управления доступом (ACL).
Ответ №2:
ingressGateways
Конфигурация на диаграмме Helm предназначена для развертывания входного шлюза Consul (с питанием от Envoy) для сервисной сетки Consul. Это отличается от входа в Kubernetes.
Вход Consul обеспечивает маршрутизацию к приложениям, работающим внутри сервисной сетки, и настраивается с использованием записи конфигурации входного шлюза (или в будущем с использованием Consul CRDS). Он не может маршрутизировать к конечным точкам, которые существуют за пределами сервисной сетки, таким как конечные точки API / UI Consul.
Если вам нужен универсальный вход, который может перенаправлять приложения за пределы сетки, я рекомендую использовать такое решение, как Ambassador, Traefik или Gloo. Все три из них также поддерживают интеграцию с Consul для обнаружения служб или service mesh.
Комментарии:
1. спасибо за ваше объяснение, да, я должен использовать Traefik в качестве контроллера, проблема в том, что для таких задач я всегда следую документации на веб-сайте Github / hashicorp, но, к сожалению, нет шаблона / примера для этой цели
2. Ознакомьтесь с этим руководством по запуску Traefik с помощью HashiCorp Nomad learn.hashicorp.com/tutorials/nomad/load-balancing-traefik . Адаптировать конфигурацию к docker-compose или аналогичной должно быть просто. У меня есть пример, которым я могу поделиться, но, к сожалению, он не поместится в комментарии.