我正在尝试按照here的说明在Kubernetes集群中设置Graylog。我遇到的问题是环境变量GREYLOG_HTTP_EXTERNAL_URI的定义。该文档告诉我输入“我的IP地址”,然后从我能发现的内容中得知该变量是告诉浏览器在哪里可以找到Graylog API的信息。
但是我的集群是通过用作入口 Controller 的NGINX反向代理访问的,这意味着浏览器无法直接访问Graylog Pod,甚至无法通过http来访问,因此它并不真正知道我应该在此赋什么值。我尝试了入口 Controller 的公共(public)IP地址,但我得到的只是一个503。是否有一种方法可以允许访问Graylog API,同时仍将服务保护在入口 Controller 的后面?
最佳答案
这实际上取决于您如何公开它。默认情况下,它不暴露于外界。我们具有graylog3
类型的NodePort
服务,因此我们只有一个内部IP,可以从另一个Pod中访问该IP,或者将其用于通过Ingress公开。
$ 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
如果我们将该服务和端口从另一个Pod中 curl ,则会得到以下输出:
$ 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:
这就是我的入口 list 的样子
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 该端口(给它一些时间来重新创建Pod):
$ 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,请将其放在此变量中。
关于kubernetes - 在入口 Controller 后面的Kubernetes集群中运行Graylog,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60828734/