首页 > 解决方案 > K8S 裸机 nginx-ingress-controller

问题描述

操作系统:RHEL7 | k8s 版本:1.12/13 | kubespray | 裸机

我部署了一个标准的 kubespray 裸机集群,我试图了解部署 nginx-ingress-controller 的最简单推荐方法是什么,这将允许我部署简单的服务。没有提供负载平衡器。我希望我的 MASTER 公共 IP 作为我的服务的端点。

抬头

Github k8s ingress-nginx建议将 NodePort 服务作为“强制性”步骤,这似乎不足以使其与 kubespray 的ingress_controller一起工作。

我能够通过强制 LoadBalancer 服务类型并将 externalIP 值设置为 nginx-ingress-controller 的 MASTER 公共 IP 使其工作,kubectl edit svc但由于缺乏负载均衡器本身,它似乎不是正确的解决方案。

使用掌舵图的类似结果:

helm install -n ingress-nginx stable/nginx-ingress --set controller.service.externalIPs[0]="MASTER PUBLIC IP"

标签: nginxkuberneteskubernetes-ingressbare-metal-server

解决方案


我能够通过 kubectl edit svc 强制 LoadBalancer 服务类型并将 externalIP 值设置为 nginx-ingress-controller 的 MASTER 公共 IP 使其正常工作,但由于缺乏负载均衡器本身,这似乎不是一个正确的解决方案。

正确,这不是LoadBalancer的用途。它旨在为 AWS、GCP 或 Azure 等云提供商或具有某种 API 的负载均衡器提供负载均衡器,以便 kube-controller-manager 可以与其交互。如果您查看您的 kube-controller-manager 日志,您应该会看到一些错误。你让它工作的方式显然是一个黑客,但我想它是有效的。

实现这一点的标准方法是使用NodePort服务并在您的主服务器上使用任何代理/负载均衡器(即 nginx 或 haproxy)将流量发送到 NodePort。请注意,我也不建议使用 master 来处理您的服务,因为它已经处理了一些关键的 Kubernetes pod,例如 kube-controller-manager、kube-apiserver、kube-scheduler 等。

唯一的例外是MetalLB,您可以将其与 LoadBalancer 服务类型一起使用。请记住,在撰写本文时,该项目仍处于早期阶段。


推荐阅读