Как сделать общедоступным мой административный интерфейс cockroachdb через входной контроллер traefik на kubernetes? - PullRequest
0 голосов
/ 30 апреля 2019

Выделенный Kubernetes узел cockroachdb - не удается получить доступ к интерфейсу администратора через входной контроллер traefik - страница не перенаправляет должным образом

У меня есть выделенный узел kubernetes, на котором выполняется cockroachdb.Стручки запланированы, и все настроено.Я хочу получить доступ к интерфейсу администратора из субдомена, например, так: cockroachdb.hostname.com.Я сделал это с инструментальной панелью traefik и ceph, так что я знаю, что мои входные настройки работают.У меня даже работает cert-manager, чтобы включить https.В браузере появляется сообщение об ошибке перенаправления страницы.

Нужно ли указывать имя хоста где-то особенное?

Я попытался добавить это безуспешно: --http-host cockroachdb.hostname.com

Этот выделенный узел имеет свой собственный публичный ip, который не сопоставлен с hostname.com.Я думаю, что мне нужно изменить настройку в cockroachdb, но я не знаю, какой, потому что я новичок в этом.

Кто-нибудь знает, как опубликовать интерфейс администратора через вход?

EDIT01: Добавлены входные и служебные конфигурационные файлы

Вход:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: cockroachdb-public
  annotations:
    kubernetes.io/ingress.class: traefik
    traefik.frontend.rule.type: PathPrefixStrip
    certmanager.k8s.io/issuer: "letsencrypt-prod"
    certmanager.k8s.io/acme-challenge-type: http01
    ingress.kubernetes.io/ssl-redirect: "true"
    ingress.kubernetes.io/ssl-temporary-redirect: "true"
    ingress.kubernetes.io/ssl-host: "cockroachdb.hostname.com"
    traefik.frontend.rule: "Host:cockroachdb.hostname.com,www.cockroachdb.hostname.com"
    traefik.frontend.redirect.regex: "^https://www.cockroachdb.hostname.com(.*)"
    traefik.frontend.redirect.replacement: "https://cockroachdb.hostname.com/$1"
spec:
  rules:
  - host: cockroachdb.hostname.com
    http:
      paths:
      - path: /
        backend:
          serviceName: cockroachdb-public
          servicePort: http
  - host: www.cockroachdb.hostname.com
    http:
      paths:
      - path: /
        backend:
          serviceName: cockroachdb-public
          servicePort: http
  tls:
  - hosts:
    - cockroachdb.hostname.com
    - www.cockroachdb.hostname.com
    secretName: cockroachdb-secret

Serice:

apiVersion: v1
kind: Service
metadata:
  # This service is meant to be used by clients of the database. It exposes a ClusterIP that will
  # automatically load balance connections to the different database pods.
  name: cockroachdb-public
  labels:
    app: cockroachdb
spec:
  ports:
  # The main port, served by gRPC, serves Postgres-flavor SQL, internode
  # traffic and the cli.
  - port: 26257
    targetPort: 26257
    name: grpc
  # The secondary port serves the UI as well as health and debug endpoints.
  - port: 8080
    targetPort: 8080
    name: http
  selector:
    app: cockroachdb

EDIT02:

Я могу получить доступ к странице интерфейса администраторасейчас, но только через внешний IP-адрес сервера с портом 8080. Я думаю, что мне нужно сообщить моему серверу, что его IP-адрес сопоставлен с правильным поддоменом?

EDIT03:

На обоих запланированных входных лотках создаются следующие журналы: time="2019-04-29T04:31:42Z" level=error msg="Service not found for default/cockroachdb-public"

1 Ответ

1 голос
/ 30 апреля 2019

Ваша ссылка выглядит хорошо на входной стороне. Вы используете довольно много перенаправлений, если вы действительно не знаете, что каждый выполняет, не используйте их, вы можете оказаться в бесконечном цикле перенаправлений.

Вы можете просмотреть следующие журналы и методы для отладки:

Запустите kubectl logs <traefik pod> и посмотрите последнюю партию журналов.

Запустите kubectl get service, и, насколько я слышал, это, вероятно, ваша основная проблема. Убедитесь, что ваш сервис существует в пространстве имен по умолчанию.

Запустите kubectl port-forward svc/cockroachdb-public 8080:8080 и попробуйте подключиться к нему через localhost:8080 и посмотрите терминал для сообщений о возможных ошибках.

Запустите kubectl describe ingress cockroachdb-public и посмотрите на события, это должно дать вам кое-что для работы.

Попробуйте получить доступ к службе из другого модуля, который у вас работает ping cockroachdb-public.default.svc.cluster.local, и посмотрите, разрешает ли он IP-адрес.

Взгляните на ваши кластерные привязки и учетную запись службы, она может быть ограничена и не иметь разрешения для перечисления служб в пространстве имен по умолчанию: kubectl create clusterrolebinding default-admin --clusterrole cluster-admin --serviceaccount=default:default

...