0

我正在为多个客户端在 Kubernetes 中实施解决方案,并且我想使用 Prometheus 监控我的集群。但是,因为这可以快速扩展,并且我想降低成本,所以我将使用 Federation for Prometheus,来抓取 Kubernetes 的不同集群,但我需要公开我的 Prometheus 部署。

我已经使用服务类型 LoadBalancer 公开了我的 Prometheus 部署,但是这种方法将这笔额外费用添加到了我的基础设施(Digital Ocean LB)中。

是否可以使用服务类型 NodePort 来实现这一点,将端口暴露给我的集群 IP,如下所示:

XXXXXXXXXXXXXXXX.k8s.ondigitalocean.com:9090

我可以在哪里使用这个 URL 到我的主 Prometheus 报废所有“奴隶”Prometheus 实例?

我已经尝试过了,但我无法访问我的集群端口。有什么东西挡住了。我还删除了我的防火墙,以确保没有任何东西干扰这个实现,但什么也没有。

这是我的服务:

Name:                     my-nodeport-service
Namespace:                default
Labels:                   <none>
Annotations:              kubectl.kubernetes.io/last-applied-configuration:
                            {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"my-nodeport-service","namespace":"default"},"spec":{"ports":[{"na...
Selector:                 app=nginx
Type:                     NodePort
IP:                       10.245.162.125
Port:                     http  80/TCP
TargetPort:               80/TCP
NodePort:                 http  30800/TCP
Endpoints:                10.244.2.220:80
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>


Can anybody help me please?

---

This is my service: 

```kubectl describe service my-nodeport-service
Name:                     my-nodeport-service
Namespace:                default
Labels:                   <none>
Annotations:              kubectl.kubernetes.io/last-applied-configuration:
                            {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"my-nodeport-service","namespace":"default"},"spec":{"ports":[{"na...
Selector:                 app=nginx
Type:                     NodePort
IP:                       10.245.162.125
Port:                     http  80/TCP
TargetPort:               80/TCP
NodePort:                 http  30800/TCP
Endpoints:                10.244.2.220:80
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>


4

1 回答 1

0

然后,您可以设置主机 XXXXXXXXXXXXXXXX.k8s.ondigitalocean.com:9090 作为 Nginx 的负载均衡器。

尝试设置 Nginx TCP 负载均衡器。

注意:您将使用 Nginx 流,如果您想使用开源 Nginx 而不是 Nginx Plus,那么您可能必须使用-with-stream选项编译您自己的 Nginx。

示例配置文件:

events {
    worker_connections  1024;
}

stream {
    upstream stream_backend {
        server dhcp-180.example.com:446;
        server dhcp-185.example.com:446;
        server dhcp-186.example.com:446;
        server dhcp-187.example.com:446;
    }

    server {
        listen     446;
        proxy_pass stream_backend;
    }

运行 Nginx 后,测试结果应该是这样的:

在此处输入图像描述

主机 lb.example.com 充当 Nginx 的负载均衡器。

在此示例中,Ngnix 配置为使用循环,如您所见,每次新连接最终都会连接到不同的主机/容器。

注意:容器主机名与节点主机名相同,这是由于 hostNetwork。

此解决方案有一些缺点,例如:

  • 定义 hostNetwork 为 pod 中运行的所有容器保留主机的端口
  • 创建一个负载均衡器,您会遇到单点故障
  • 每次向集群添加或删除新节点时,都应更新负载均衡器

通过这种方式,可以设置一个 kubernetes 集群,以从/到集群外部的 Ingress-Egress TCP 连接路由。

有用的帖子:load-balancer-tcp

NodePort 文档:nodePort

于 2019-07-03T07:32:08.277 回答