【发布时间】:2021-02-23 14:24:19
【问题描述】:
我正在使用 nginx 并通过仅将 status stub module 暴露给内部网络来利用它(我没有使用 allow module,而是使用 listen to bind to 127.0.0.1)。
我想将 nginx 作为服务部署到 kubernetes,并使用不同的 kubernetes service types 公开两个 nginx 服务器,它们在 nginx.conf(见下文)中定义。这样状态服务器端点仅在 Kubernetes 集群内部可用(CluserIP),而另一个服务器端点在 Kubernetes 集群外部可用(NodePort)。
我了解,nginx.conf 的状态服务器也可以监听localhost,并且 kubernetes 服务配置可以配置为仅从 kubernetes 集群内将流量传递到状态服务器。
虽然我尝试过,但我无法使用正确的 kubernetes 服务配置来实现这一点,希望得到一些帮助。
这里是 nginx 配置(nginx.conf)
events {
worker_connections 4000;
use epoll;
epoll_events 512;
multi_accept on;
accept_mutex on;
}
http {
server {
listen 80 default_server;
root /usr/share/nginx/html;
location / {
return 200 'success';
}
}
server {
listen 127.0.0.1:8080;
server_name _;
location / {
stub_status;
}
}
}
【问题讨论】:
-
作为一般规则,在设置为侦听或绑定到 127.0.0.1 的容器中运行的内容将无法从该容器外部访问。如果您希望它可以从其他地方访问,即使是 ClusterIP 服务,它也需要
listen 0.0.0.0:8080。 -
@DavidMaze:谢谢,这就是我更新帖子的原因。在进行此更改时,您知道 k8s 服务配置应该是什么样子吗?
-
容器规范应该列出两个端口;您应该有两个独立的服务,它们都具有相同的选择器,但具有不同的类型并针对 pod 中的不同端口。
-
@DavidMaze:我想我理解你,这听起来很合理。如果您愿意将您的评论转换为答案,我会接受它(附加一个 sn-p 会特别好)
标签: nginx kubernetes