nginx - 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"
解决方案
我能够通过 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 服务类型一起使用。请记住,在撰写本文时,该项目仍处于早期阶段。
推荐阅读
- entity-framework-6 - Entity Framework 6 使用反射排序
- mapbox - Mapbox GL JS - 设置数据
- android - Mockito Android 抛出验证错误,但我根本不调用验证
- python - 多项朴素贝叶斯 - sklearn
- javascript - 指针事件:无不适用于 material-ui textField 输入
- firebase - 在 Flutter/Firebase 应用上使用计时器交付编程内容
- tensorflow - 制作具有 batch_size 作为值的张量
- java - 使用 java/javafx 更改 linux 中的活动/应用程序菜单栏
- java - 在测试期间跳过执行 eclipse(或 netBeans)中的几行
- spring-boot - 条件原生查询中的注入文本 - JPA