【问题标题】:Expose deployment via service type Node Port on digital Ocean Kubernetes通过数字海洋 Kubernetes 上的服务类型节点端口公开部署
【发布时间】:2019-11-02 06:05:57
【问题描述】:

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

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

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

XXXXXXXXXXXXXXXXXX.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>


【问题讨论】:

  • 请显示服务定义,kubectl describe &lt;svc&gt; 输出,iptables -Liptables -t nat -L 输出。
  • @AndyShinn 你可以在下面的帖子中找到我的服务。关于 iptables,我无法显示这些命令的输出,因为我在我的 DO 帐户页面中编辑了 DO 的防火墙。

标签: kubernetes digital-ocean kubernetes-service


【解决方案1】:

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

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

注意:您将使用 Nginx 流,如果您想使用开源 Nginx 而不是 Nginx Plus,那么您可能需要使用 -with-stream 选项。

示例配置文件:

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.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-12
    • 2016-08-14
    • 1970-01-01
    • 2016-12-22
    • 2015-03-14
    • 2018-09-11
    • 1970-01-01
    • 2021-01-08
    相关资源
    最近更新 更多