Запуск Graylog в кластере Kubernetes за входным контроллером - PullRequest
1 голос
/ 24 марта 2020

Я пытаюсь настроить Graylog в моем кластере Kubernetes, как описано здесь . Проблема, с которой я сталкиваюсь - это определение переменной среды GRAYLOG_HTTP_EXTERNAL_URI. Документация подсказывает мне ввести «мой IP-адрес», и из того, что я смог выяснить, переменная предназначена для указания браузеру, где найти Graylog API.

Но мой кластер доступен через NGINX обратный прокси-сервер, служащий входным контроллером, что означает, что браузер не может получить доступ к модулю Graylog напрямую и даже реже через http, поэтому он не знает, какое значение мне следует там использовать. Я попробовал опубликовать c IP-адрес входного контроллера, но все, что я получаю, это 503. Есть ли способ разрешить доступ к Graylog API, при этом сохраняя службу защищенной за входным контроллером?

1 Ответ

1 голос
/ 24 марта 2020

Это действительно зависит от того, как вы это выставляете. По умолчанию это не выставлено внешнему миру. У нас есть graylog3 служба типа NodePort, поэтому у нас есть только внутренний IP-адрес, к которому можно получить доступ из другого модуля или использовать для доступа к нему при входе.

$ kubectl get service -o wide
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                          AGE   SELECTOR
es6          NodePort    10.23.244.28    <none>        9200:30001/TCP,9300:30002/TCP    54m   service=es-deploy
graylog3     NodePort    10.23.242.128   <none>        9000:30003/TCP,12201:30004/TCP   54m   service=graylog-deploy
kubernetes   ClusterIP   10.23.240.1     <none>        443/TCP                          57m   <none>
mongo        ClusterIP   10.23.243.160   <none>        27017/TCP                        54m   service=mongo-deploy

Если мы свернем этот сервис и порт из другого модуля, у нас будет следующий вывод:

$ kubectl exec -ti ubuntu -- curl 10.23.242.128:9000
<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="robots" content="noindex, nofollow">
    <meta charset="UTF-8">
    <title>Graylog Web Interface</title>
    <link rel="shortcut icon" href="http://your_ip_address:30003/assets/favicon.png">

  </head>
  <body>
    <script src="http://your_ip_address:30003/config.js"></script>

    <script src="http://your_ip_address:30003/assets/vendor.4024e2a8db732781a971.js"></script>

    <script src="http://your_ip_address:30003/assets/polyfill.a5e2fb591e8fd54ee4ef.js"></script>

    <script src="http://your_ip_address:30003/assets/builtins.a5e2fb591e8fd54ee4ef.js"></script>

    <script src="http://your_ip_address:30003/assets/plugin/org.graylog.plugins.threatintel.ThreatIntelPlugin/plugin.org.graylog.plugins.threatintel.ThreatIntelPlugin.b864ba54b438ac0bdc48.js"></script>

    <script src="http://your_ip_address:30003/assets/plugin/org.graylog.plugins.collector.CollectorPlugin/plugin.org.graylog.plugins.collector.CollectorPlugin.bcc87290018e859a8a9e.js"></script>

    <script src="http://your_ip_address:30003/assets/plugin/org.graylog.aws.AWSPlugin/plugin.org.graylog.aws.AWSPlugin.8ae7cb13983ce33eeb5b.js"></script>

    <script src="http://your_ip_address:30003/assets/app.a5e2fb591e8fd54ee4ef.js"></script>

  </body>
</html>

Как видно, есть ссылка для http://your_ip_address:30003. Если мы оставим это так, приложение сломается, потому что оно ссылается на что-то несуществующее.

Итак, я изменю 2 вещи, сделаю его видимым из внешнего мира при входе и заменим GRAYLOG_HTTP_EXTERNAL_URI на правильный IP-адрес. Я получу:

1 - Создание правила входа для выставить Graylog:

Вот так выглядит мой входной манифест

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: graylog
spec:
  backend:
    serviceName: graylog3
    servicePort: 9000
$ kubectl get ingresses 
NAME      HOSTS   ADDRESS          PORTS   AGE
graylog   *       34.107.139.231   80      56s

2 - отредактируйте наш GRAYLOG_HTTP_EXTERNAL_URI и замените http://your_ip_address:30003 на http://34.107.139.231:80.

Заметьте, что здесь я меняю порт с 30003 на 80, так как наше правило входа выставляет на порт 80.

$ kubectl edit deployments graylog-deploy 

Изменения сделаны, теперь давайте свернемся с этим порт с любой консоли (дайте ему время для воссоздания модулей):

$ curl 34.107.139.231:80
<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="robots" content="noindex, nofollow">
    <meta charset="UTF-8">
    <title>Graylog Web Interface</title>
    <link rel="shortcut icon" href="http://34.107.139.231:80/assets/favicon.png">

  </head>
  <body>
    <script src="http://34.107.139.231:80/config.js"></script>

    <script src="http://34.107.139.231:80/assets/vendor.4024e2a8db732781a971.js"></script>

    <script src="http://34.107.139.231:80/assets/polyfill.a5e2fb591e8fd54ee4ef.js"></script>

    <script src="http://34.107.139.231:80/assets/builtins.a5e2fb591e8fd54ee4ef.js"></script>

    <script src="http://34.107.139.231:80/assets/plugin/org.graylog.plugins.threatintel.ThreatIntelPlugin/plugin.org.graylog.plugins.threatintel.ThreatIntelPlugin.b864ba54b438ac0bdc48.js"></script>

    <script src="http://34.107.139.231:80/assets/plugin/org.graylog.plugins.collector.CollectorPlugin/plugin.org.graylog.plugins.collector.CollectorPlugin.bcc87290018e859a8a9e.js"></script>

    <script src="http://34.107.139.231:80/assets/plugin/org.graylog.aws.AWSPlugin/plugin.org.graylog.aws.AWSPlugin.8ae7cb13983ce33eeb5b.js"></script>

    <script src="http://34.107.139.231:80/assets/app.a5e2fb591e8fd54ee4ef.js"></script>

  </body>
</html>

Теперь мы можем видеть http://34.107.139.231:80/, как и ожидалось, и страница может быть идеально загружена.

Если у вас есть доменное имя, которое перенаправляет на IP-адрес вашего приложения, поместите его в эту переменную.

...