Запустите Graylog в кластере Kubernetes за входным контроллером с шифрованием TLS - PullRequest
0 голосов
/ 26 марта 2020

В настоящее время я настраиваю Graylog в моем кластере Kubernetes, как описано здесь . Я также хочу зашифровать трафик данных c к моему кластеру, используя обратный прокси NGINX в качестве входного контроллера, поэтому контроллер является единственной частью кластера, которая должна заботиться о https, а мое реальное приложение - нет. Это мой ingress.yaml:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-ingress
  namespace: my-namespace
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/use-regex: "true"
spec:
  tls:
  - hosts:
    - my-app.com
    secretName: my-certificat
  rules:
  - host: my-app.com
    http:
      paths:
      - backend:
          serviceName: some-service
          servicePort: 8092
        path: /api/v1.0/(.*)
      - backend:
          serviceName: graylog3
          servicePort: 9000
        path: /api/(.*)
      - backend:
          serviceName: graylog3
          servicePort: 9000
        path: /graylog/(.*)
      - backend:
          serviceName: some-other-service
          servicePort: 15672
        path: /something/(.*)
      - backend:
          serviceName: my-app
          servicePort: 80
        path: /(.*)

Когда я пытаюсь получить доступ к веб-интерфейсу Graylog по адресу my-app.com/graylog/, я получаю много предупреждений о смешанном контенте, когда браузер пытается загрузить сценарии. требуется индексом Graylog. html, который, кажется, указывает на проблему http / https. Я следовал этим инструкциям по преобразованию моего самозаверяющего сертификата в требуемый формат, добавил его в мое хранилище JVM Trust Store, а также создал секрет tls в моем кластере, но он все еще не работает.

На странице написано:

Полученные в результате файлы graylog-certificate.pem и graylog-key.pem можно использовать в файле конфигурации Graylog.

Но я не надену У меня нет файла конфигурации Graylog, только файлы .yaml, и я не знаю, куда поместить недавно созданный сертификат / секрет, чтобы Graylog мог их распознать.


Обновление:

Итак, я разобрался, как перенести файл конфигурации NGINX в Kubernetes. Вот оно:

apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-conf
  namespace: my-namespace
data:
  nginx.conf: |
    http {
      include conf/mime.types;
      include /etc/nginx/mime.types;

      server {
        listen      443 ssl http2;
        server_name my-app.com;
        ssl_certificate /etc/nginx/ssl/my-secret.crt;
        ssl_certificate_key /etc/nginx/ssl/my-secret.key;

        location /graylog/
        {
          proxy_set_header Host $http_host;
          proxy_set_header X-Forwarded-Host $host;
          proxy_set_header X-Forwarded-Server $host;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Graylog-Server-URL https://$server_name/graylog/;
          rewrite          ^/graylog/(.*)$  /$1  break;
          proxy_pass       http://graylog3:9000;
        }
      }
    }

Я больше не получаю предупреждений о смешанном контенте, так что, похоже, это сработало, но теперь я получаю ошибки MIME-типа, говоря, что вместо требуемого JavaScript файлы, полученные браузером HTML взамен. Следование по маршруту к одному из сценариев приводит к индексу Graylogs. html, поэтому я предполагаю, что в пути запроса есть ошибка, из-за которой запрос направляется на целевую страницу в качестве поведения по умолчанию.

GRAYLOG_HTTP_EXTERNAL_URI в моем graylog.yaml:

https://my.com/graylog/
...