В настоящее время я настраиваю 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/