通过数字海洋Kubernetes上的服务类型Node Port公开部署

时间:2019-06-19 13:22:13

标签: kubernetes digital-ocean kubernetes-service

我正在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>


1 个答案:

答案 0 :(得分:0)

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

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

注意::您将使用Nginx流,如果要使用开源Nginx而不是Nginx Plus,则可能需要使用 -with-stream < / strong>选项。

示例配置文件:

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之后,测试结果应类似于:

enter image description here

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

在此示例中,Ngnix被配置为使用轮询,并且如您所见,每次新连接终止到另一个主机/容器时。

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

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

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

这样,就可以将kubernetes集群设置为从/到集群外部路由的Ingress-Egress TCP连接。

有用的帖子:load-balancer-tcp

NodePort文档:nodePort