我是 Kubernetes 新手,试图了解如何最好地将 NGINX Ingress Controller 与我当前的设置集成。我有一个示例服务定义如下:
apiVersion: v1
kind: Service
metadata:
name: sample-service
namespace: samples
annotations:
load-balancer.hetzner.cloud/name: "kubernetes-worker-lb"
load-balancer.hetzner.cloud/location: fsn1
spec:
selector:
app: sample
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: LoadBalancer
该服务配置为使用 Hetzner Cloud 上的负载均衡器,将流量分配到我的工作节点。
现在我正在探索 NGINX Ingress Controller ,我对它如何融入这张图片有点困惑。具体来说:
对于上下文,我有:
我正在寻找有关为我的服务的传入流量配置此功能的最佳方法的指导。 Hetzner 负载均衡器和 NGINX 入口控制器应该共存,还是入口控制器本身就足够了?
任何有关这些组件的作用的澄清将不胜感激!
NGINX Ingress Controller 是否会取代现有的负载均衡器,或者它们可以一起工作?
入口控制器带有自己的
Service
类型 LoadBalancer
和一个 nginx pod,用作集群内 pod 的反向代理。
这个想法是在 Hetzner 上使用一个负载均衡器来为多个目标提供流量,例如基于路径、子域、标头...这可以节省成本,并且还使您能够在一处控制入口(例如,关于身份验证)。
入口控制器应该放置在 Hetzner 云负载均衡器后面,还是直接管理流量?
都不是。如上所述,入口控制器将创建自己的 Hetzner Cloud 负载均衡器。
我应该对此服务进行哪些更改(如果有)才能与 NGINX Ingress Controller 配合使用?例如,类型:LoadBalancer 是否应该更改为类型:ClusterIP?
是的,您应该将其更改为键入
ClusterIP
,但这不是必需的。如果您想为该部署使用专用的 Hetzner 负载均衡器,可以将其保留为 LoadBalancer
类型。入口控制器 pod (nginx) 可以与两者一起使用。
Hetzner LoadBalancer 和 NGINX Ingress Controller 是否应该共存,或者 Ingress Controller 本身就足够了?
您需要区分 kubernetes 内部“基础设施”和 kubernetes 外部基础设施(在您的例子中是 Hetzner)。如果您希望将流量从外部引入集群,则两者都需要。这些是你的选择:
您为每个部署创建一个类型为
LoadBalancer
的服务,这将为您创建一个 Hetzner LoadBalancer。这样,您将为每个部署获得一个专用的 Hetzner LoadBalancer,这将是昂贵的。
您使用一个入口控制器,它附带一个类型为
LoadBalancer
的服务,它将创建一个 Hetzner LoadBalancer,作为集群的单点入口。
关键是,你两者都需要。如果没有 Hetzner LoadBalancer,您就无法运行入口控制器。尽管如上所述,您可以组合这两个选项,甚至运行多个入口控制器,例如在多租户环境中,为每个租户提供自己的入口控制器。
从技术上讲,还可以选择
NodePort
类型的服务,但我们不要在这里过于复杂化。