как предоставить доступ к ingress для Consul

#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 или аналогичной должно быть просто. У меня есть пример, которым я могу поделиться, но, к сожалению, он не поместится в комментарии.